From 898f63ff8a9880e7f90b0595841a377dfecd9296 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 29 Nov 2023 18:37:23 +0000 Subject: [PATCH] Add alert if JSON is invalid (#143) --- calculator/steenrod_calculator_wasm_bg.wasm | Bin 157805 -> 157300 bytes .../adem_algebra/enum.PorBockstein.html | 28 +- docs/algebra/adem_algebra/index.html | 4 +- .../adem_algebra/struct.AdemAlgebra.html | 446 ++--- .../adem_algebra/struct.AdemBasisElement.html | 68 +- .../adem_algebra/trait.AdemAlgebraT.html | 6 +- .../adem_algebra/enum.PorBockstein.html | 28 +- .../algebra/adem_algebra/fn.shift_vec.html | 4 +- docs/algebra/algebra/adem_algebra/index.html | 4 +- .../adem_algebra/struct.AdemAlgebra.html | 446 ++--- .../adem_algebra/struct.AdemBasisElement.html | 68 +- .../adem_algebra/trait.AdemAlgebraT.html | 6 +- docs/algebra/algebra/algebra_trait/index.html | 4 +- .../algebra/algebra_trait/trait.Algebra.html | 140 +- .../algebra_trait/trait.GeneratedAlgebra.html | 36 +- .../algebra_trait/trait.MuAlgebra.html | 120 +- .../algebra_trait/trait.UnstableAlgebra.html | 122 +- .../algebra/bialgebra_trait/index.html | 4 +- .../bialgebra_trait/trait.Bialgebra.html | 18 +- .../combinatorics/constant.MAX_XI_TAU.html | 4 +- .../combinatorics/constant.TAU_DEGREES.html | 4 +- .../combinatorics/constant.XI_DEGREES.html | 4 +- .../fn.adem_relation_coefficient.html | 18 +- .../combinatorics/fn.inadmissible_pairs.html | 12 +- .../algebra/combinatorics/fn.tau_degrees.html | 4 +- .../algebra/combinatorics/fn.xi_degrees.html | 4 +- docs/algebra/algebra/combinatorics/index.html | 4 +- .../struct.PartitionIterator.html | 862 ++++----- ...ruct.TruncatedPolynomialMonomialBasis.html | 40 +- docs/algebra/algebra/field/index.html | 4 +- docs/algebra/algebra/field/struct.Field.html | 150 +- docs/algebra/algebra/index.html | 4 +- .../milnor_algebra/constant.ALLOCATION.html | 4 +- .../milnor_algebra/fn.q_part_default.html | 4 +- .../algebra/algebra/milnor_algebra/index.html | 6 +- .../milnor_algebra/struct.Matrix2D.html | 28 +- .../milnor_algebra/struct.MilnorAlgebra.html | 422 ++--- .../struct.MilnorBasisElement.html | 56 +- .../milnor_algebra/struct.MilnorProfile.html | 54 +- .../struct.PPartAllocation.html | 26 +- .../struct.PPartMultiplier.html | 868 ++++----- .../milnor_algebra/trait.MilnorAlgebraT.html | 6 +- .../milnor_algebra/type.MilnorHashMap.html | 8 +- .../algebra/milnor_algebra/type.PPart.html | 1066 ++++++++++- .../milnor_algebra/type.PPartEntry.html | 1041 +++++++++- .../pair_algebra/constant.AY_CACHE.html | 4 +- .../algebra/pair_algebra/fn.a_y_cached.html | 10 +- .../algebra/pair_algebra/fn.a_y_inner.html | 10 +- docs/algebra/algebra/pair_algebra/index.html | 6 +- .../algebra/pair_algebra/macro.sub.html | 4 +- .../algebra/pair_algebra/macro.unsub.html | 4 +- .../struct.MilnorPairElement.html | 32 +- .../pair_algebra/trait.PairAlgebra.html | 100 +- .../algebra/pair_algebra/type.HashMap.html | 7 +- .../algebra/polynomial_algebra/index.html | 4 +- .../struct.PolynomialAlgebraMonomial.html | 58 +- .../struct.PolynomialAlgebraTableEntry.html | 28 +- .../trait.PolynomialAlgebra.html | 106 +- .../steenrod_algebra/enum.AlgebraType.html | 40 +- .../enum.SteenrodAlgebra.html | 370 ++-- .../enum.SteenrodAlgebraBorrow.html | 24 +- .../algebra/steenrod_algebra/index.html | 4 +- .../macro.dispatch_steenrod.html | 4 +- .../steenrod_algebra/struct.AlgebraSpec.html | 34 +- .../trait.SteenrodAlgebraT.html | 6 +- docs/algebra/all.html | 4 +- .../combinatorics/constant.MAX_XI_TAU.html | 4 +- .../fn.adem_relation_coefficient.html | 18 +- .../combinatorics/fn.inadmissible_pairs.html | 12 +- .../algebra/combinatorics/fn.tau_degrees.html | 4 +- docs/algebra/combinatorics/fn.xi_degrees.html | 4 +- docs/algebra/combinatorics/index.html | 4 +- .../struct.PartitionIterator.html | 862 ++++----- ...ruct.TruncatedPolynomialMonomialBasis.html | 40 +- docs/algebra/enum.AlgebraType.html | 40 +- docs/algebra/enum.SteenrodAlgebra.html | 370 ++-- docs/algebra/enum.SteenrodAlgebraBorrow.html | 24 +- docs/algebra/field/index.html | 4 +- docs/algebra/field/struct.Field.html | 150 +- docs/algebra/fn.module_gens_from_json.html | 8 +- docs/algebra/index.html | 4 +- docs/algebra/macro.dispatch_algebra.html | 4 +- docs/algebra/milnor_algebra/index.html | 6 +- .../milnor_algebra/struct.MilnorAlgebra.html | 422 ++--- .../struct.MilnorBasisElement.html | 56 +- .../milnor_algebra/struct.MilnorProfile.html | 54 +- .../struct.PPartAllocation.html | 26 +- .../struct.PPartMultiplier.html | 868 ++++----- .../milnor_algebra/trait.MilnorAlgebraT.html | 6 +- docs/algebra/milnor_algebra/type.PPart.html | 1066 ++++++++++- .../milnor_algebra/type.PPartEntry.html | 1041 +++++++++- .../algebra/module/block_structure/index.html | 4 +- .../struct.BlockStructure.html | 50 +- .../struct.GeneratorBasisEltPair.html | 30 +- .../finite_dimensional_module/index.html | 4 +- .../struct.FiniteDimensionalModule.html | 180 +- .../finitely_presented_module/index.html | 4 +- .../struct.FPMIndexTable.html | 28 +- .../struct.FinitelyPresentedModule.html | 114 +- docs/algebra/module/free_module/index.html | 4 +- .../free_module/struct.GeneratorData.html | 30 +- .../free_module/struct.MuFreeModule.html | 180 +- .../free_module/struct.OffsetIterator.html | 864 ++++----- .../struct.OperationGeneratorPair.html | 34 +- .../module/free_module/type.FreeModule.html | 100 +- .../free_module/type.UnstableFreeModule.html | 100 +- docs/algebra/module/hom_module/index.html | 4 +- .../module/hom_module/struct.HomModule.html | 102 +- .../free_module_homomorphism/index.html | 4 +- .../struct.MuFreeModuleHomomorphism.html | 138 +- .../type.FreeModuleHomomorphism.html | 74 +- .../type.UnstableFreeModuleHomomorphism.html | 74 +- .../full_module_homomorphism/index.html | 4 +- .../struct.FullModuleHomomorphism.html | 100 +- .../generic_zero_homomorphism/index.html | 4 +- .../struct.GenericZeroHomomorphism.html | 62 +- .../homomorphism/hom_pullback/index.html | 4 +- .../hom_pullback/struct.HomPullback.html | 84 +- docs/algebra/module/homomorphism/index.html | 6 +- .../quotient_homomorphism/index.html | 4 +- .../struct.QuotientHomomorphism.html | 82 +- .../struct.QuotientHomomorphismSource.html | 68 +- .../struct.FullModuleHomomorphism.html | 100 +- .../struct.GenericZeroHomomorphism.html | 62 +- .../homomorphism/struct.HomPullback.html | 84 +- .../struct.MuFreeModuleHomomorphism.html | 138 +- .../struct.QuotientHomomorphism.html | 82 +- .../struct.QuotientHomomorphismSource.html | 68 +- .../trait.IdentityHomomorphism.html | 8 +- .../trait.ModuleHomomorphism.html | 90 +- .../homomorphism/trait.ZeroHomomorphism.html | 8 +- .../type.FreeModuleHomomorphism.html | 74 +- .../type.UnstableFreeModuleHomomorphism.html | 74 +- docs/algebra/module/index.html | 6 +- docs/algebra/module/module_trait/index.html | 4 +- .../struct.ModuleFailedRelationError.html | 30 +- .../module/module_trait/trait.Module.html | 208 +- .../algebra/module/quotient_module/index.html | 4 +- .../struct.QuotientModule.html | 132 +- docs/algebra/module/rpn/fn.coef_adem.html | 4 +- docs/algebra/module/rpn/fn.coef_milnor.html | 12 +- docs/algebra/module/rpn/index.html | 4 +- docs/algebra/module/rpn/struct.RPSpec.html | 34 +- .../rpn/struct.RealProjectiveSpace.html | 126 +- .../module/steenrod_module/fn.from_json.html | 8 +- .../algebra/module/steenrod_module/index.html | 4 +- .../steenrod_module/json/fn.from_json.html | 8 +- .../module/steenrod_module/json/index.html | 4 +- .../steenrod_module/type.SteenrodModule.html | 45 +- docs/algebra/module/struct.FDModule.html | 180 +- docs/algebra/module/struct.FPModule.html | 114 +- docs/algebra/module/struct.GeneratorData.html | 30 +- docs/algebra/module/struct.HomModule.html | 102 +- .../struct.ModuleFailedRelationError.html | 30 +- docs/algebra/module/struct.MuFreeModule.html | 180 +- .../module/struct.OperationGeneratorPair.html | 34 +- .../algebra/module/struct.QuotientModule.html | 132 +- .../module/struct.RealProjectiveSpace.html | 126 +- .../module/struct.SuspensionModule.html | 94 +- docs/algebra/module/struct.TensorModule.html | 118 +- .../module/suspension_module/index.html | 4 +- .../struct.SuspensionModule.html | 94 +- docs/algebra/module/tensor_module/index.html | 4 +- .../tensor_module/struct.TensorModule.html | 118 +- docs/algebra/module/trait.Module.html | 208 +- docs/algebra/module/trait.ZeroModule.html | 12 +- docs/algebra/module/type.FreeModule.html | 100 +- .../module/type.UnstableFreeModule.html | 100 +- docs/algebra/module/zero_module/index.html | 4 +- .../module/zero_module/trait.ZeroModule.html | 12 +- docs/algebra/pair_algebra/index.html | 4 +- .../struct.MilnorPairElement.html | 32 +- .../pair_algebra/trait.PairAlgebra.html | 100 +- docs/algebra/steenrod_evaluator/index.html | 4 +- .../struct.SteenrodEvaluator.html | 94 +- .../steenrod_parser/enum.AlgebraBasisElt.html | 32 +- .../steenrod_parser/enum.AlgebraNode.html | 32 +- .../steenrod_parser/enum.BocksteinOrSq.html | 28 +- .../steenrod_parser/fn.algebra_expr.html | 4 +- .../steenrod_parser/fn.algebra_factor.html | 4 +- .../steenrod_parser/fn.algebra_generator.html | 8 +- .../steenrod_parser/fn.algebra_term.html | 4 +- docs/algebra/steenrod_parser/fn.brackets.html | 6 +- .../steenrod_parser/fn.convert_error.html | 4 +- docs/algebra/steenrod_parser/fn.digits.html | 8 +- .../steenrod_parser/fn.fold_separated.html | 8 +- .../steenrod_parser/fn.module_expr.html | 8 +- .../steenrod_parser/fn.module_generator.html | 4 +- .../steenrod_parser/fn.module_term.html | 8 +- docs/algebra/steenrod_parser/fn.p_or_sq.html | 4 +- .../steenrod_parser/fn.parse_algebra.html | 4 +- .../steenrod_parser/fn.parse_module.html | 4 +- docs/algebra/steenrod_parser/fn.scalar.html | 4 +- docs/algebra/steenrod_parser/fn.space.html | 6 +- docs/algebra/steenrod_parser/index.html | 6 +- .../algebra/steenrod_parser/type.IResult.html | 9 +- .../steenrod_parser/type.ModuleNode.html | 1066 ++++++++++- docs/algebra/struct.AdemAlgebra.html | 446 ++--- docs/algebra/struct.Field.html | 150 +- docs/algebra/struct.MilnorAlgebra.html | 422 ++--- .../struct.PolynomialAlgebraMonomial.html | 58 +- .../struct.PolynomialAlgebraTableEntry.html | 28 +- docs/algebra/trait.AdemAlgebraT.html | 6 +- docs/algebra/trait.Algebra.html | 140 +- docs/algebra/trait.Bialgebra.html | 18 +- docs/algebra/trait.GeneratedAlgebra.html | 36 +- docs/algebra/trait.MilnorAlgebraT.html | 6 +- docs/algebra/trait.MuAlgebra.html | 120 +- docs/algebra/trait.PolynomialAlgebra.html | 106 +- docs/algebra/trait.SteenrodAlgebraT.html | 6 +- docs/algebra/trait.UnstableAlgebra.html | 122 +- docs/algebra_dim/all.html | 4 +- docs/algebra_dim/index.html | 4 +- docs/bivec/all.html | 4 +- docs/bivec/index.html | 4 +- docs/bivec/struct.BiVec.html | 68 +- docs/bruner/all.html | 4 +- docs/bruner/index.html | 4 +- docs/chart/all.html | 4 +- docs/chart/constant.PATTERNS.html | 4 +- docs/chart/enum.Orientation.html | 24 +- docs/chart/index.html | 4 +- docs/chart/struct.SvgBackend.html | 84 +- docs/chart/struct.TikzBackend.html | 82 +- docs/chart/trait.Backend.html | 92 +- docs/crates.js | 1 + docs/d2_charts/all.html | 4 +- docs/d2_charts/index.html | 4 +- docs/define_module/all.html | 4 +- docs/define_module/fn.gens_to_json.html | 4 +- docs/define_module/fn.get_gens.html | 4 +- ...fn.interactive_module_define_fdmodule.html | 10 +- ...fn.interactive_module_define_fpmodule.html | 10 +- docs/define_module/index.html | 4 +- docs/differentials/all.html | 4 +- docs/differentials/index.html | 4 +- docs/ext/all.html | 4 +- .../chain_complex/chain_homotopy/index.html | 4 +- .../enum.ChainComplexGrading.html | 24 +- .../finite_chain_complex/index.html | 4 +- .../struct.FiniteAugmentedChainComplex.html | 74 +- .../struct.FiniteChainComplex.html | 70 +- docs/ext/chain_complex/index.html | 4 +- docs/ext/chain_complex/struct.ChainMap.html | 34 +- .../struct.FiniteAugmentedChainComplex.html | 74 +- .../struct.FiniteChainComplex.html | 70 +- .../chain_complex/struct.StemIterator.html | 860 ++++----- .../trait.AugmentedChainComplex.html | 12 +- .../trait.BoundedChainComplex.html | 10 +- .../ext/chain_complex/trait.ChainComplex.html | 68 +- .../chain_complex/trait.FreeChainComplex.html | 34 +- docs/ext/index.html | 14 +- docs/ext/nassau/constant.MAX_NEW_GENS.html | 4 +- docs/ext/nassau/enum.Magic.html | 24 +- docs/ext/nassau/index.html | 4 +- docs/ext/nassau/struct.MilnorSubalgebra.html | 58 +- docs/ext/nassau/struct.Resolution.html | 98 +- docs/ext/nassau/struct.SenderData.html | 28 +- docs/ext/nassau/struct.SignatureIterator.html | 852 ++++----- .../ext/nassau/struct.SubalgebraIterator.html | 856 ++++----- .../ext/resolution/constant.MAX_NEW_GENS.html | 4 +- docs/ext/resolution/index.html | 6 +- docs/ext/resolution/struct.MuResolution.html | 118 +- docs/ext/resolution/struct.SenderData.html | 34 +- docs/ext/resolution/type.Resolution.html | 117 +- .../resolution/type.UnstableResolution.html | 117 +- docs/ext/resolution_homomorphism/index.html | 6 +- .../struct.MuResolutionHomomorphism.html | 128 +- .../type.ResolutionHomomorphism.html | 101 +- .../type.UnstableResolutionHomomorphism.html | 101 +- docs/ext/save/enum.SaveKind.html | 38 +- docs/ext/save/fn.open_file.html | 4 +- docs/ext/save/fn.open_files.html | 4 +- docs/ext/save/index.html | 4 +- docs/ext/save/struct.ChecksumReader.html | 112 +- docs/ext/save/struct.ChecksumWriter.html | 82 +- docs/ext/save/struct.SaveFile.html | 38 +- docs/ext/secondary/index.html | 6 +- docs/ext/secondary/static.TAU_BIDEGREE.html | 4 +- .../secondary/struct.SecondaryComposite.html | 70 +- .../secondary/struct.SecondaryHomotopy.html | 76 +- .../secondary/struct.SecondaryResolution.html | 44 +- docs/ext/secondary/trait.SecondaryLift.html | 40 +- docs/ext/secondary/type.CompositeData.html | 1066 ++++++++++- docs/ext/type.CCC.html | 44 +- .../utils/constant.STATIC_MODULES_PATH.html | 4 +- docs/ext/utils/fn.construct.html | 14 +- docs/ext/utils/fn.construct_nassau.html | 10 +- docs/ext/utils/fn.construct_standard.html | 10 +- docs/ext/utils/fn.get_unit.html | 8 +- docs/ext/utils/fn.load_module_json.html | 4 +- docs/ext/utils/fn.parse_module_name.html | 4 +- docs/ext/utils/fn.query_module.html | 8 +- docs/ext/utils/fn.query_module_only.html | 10 +- docs/ext/utils/fn.query_unstable_module.html | 6 +- .../utils/fn.query_unstable_module_only.html | 4 +- docs/ext/utils/fn.secondary_job.html | 4 +- docs/ext/utils/fn.unicode_num.html | 4 +- docs/ext/utils/index.html | 6 +- docs/ext/utils/logging/index.html | 4 +- docs/ext/utils/logging/struct.LogWriter.html | 80 +- docs/ext/utils/logging/struct.Timer.html | 24 +- docs/ext/utils/struct.Config.html | 46 +- docs/ext/utils/struct.LogWriter.html | 80 +- docs/ext/utils/struct.Timer.html | 24 +- .../ext/utils/type.QueryModuleResolution.html | 53 +- docs/ext/yoneda/constant.PENALTY_UNIT.html | 4 +- docs/ext/yoneda/fn.compute_kernel_image.html | 14 +- docs/ext/yoneda/fn.operation_drop.html | 4 +- docs/ext/yoneda/fn.rate_adem_operation.html | 4 +- docs/ext/yoneda/fn.rate_milnor_operation.html | 4 +- docs/ext/yoneda/fn.rate_operation.html | 12 +- docs/ext/yoneda/fn.split_mut_borrow.html | 4 +- docs/ext/yoneda/fn.yoneda_representative.html | 6 +- .../fn.yoneda_representative_element.html | 10 +- ...n.yoneda_representative_with_strategy.html | 8 +- docs/ext/yoneda/index.html | 4 +- docs/ext/yoneda/type.Yoneda.html | 39 +- docs/ext_m_n/all.html | 4 +- docs/ext_m_n/index.html | 4 +- docs/filtration_one/all.html | 4 +- docs/filtration_one/index.html | 4 +- docs/fp/all.html | 4 +- docs/fp/constant.MAX_MULTINOMIAL_LEN.html | 4 +- docs/fp/constant.NUM_PRIMES.html | 4 +- docs/fp/constant.ODD_PRIMES.html | 4 +- docs/fp/constant.PRIMES.html | 4 +- docs/fp/constant.PRIME_TO_INDEX_MAP.html | 4 +- .../constants/constant.BINOMIAL4_TABLE.html | 4 +- .../constant.BINOMIAL4_TABLE_SIZE.html | 4 +- docs/fp/constants/constant.BITS_PER_LIMB.html | 4 +- .../fp/constants/constant.BYTES_PER_LIMB.html | 4 +- docs/fp/constants/constant.INVERSE_TABLE.html | 4 +- .../constant.MAX_MULTINOMIAL_LEN.html | 4 +- docs/fp/constants/constant.MAX_PRIME.html | 4 +- docs/fp/constants/constant.NOT_A_PRIME.html | 4 +- docs/fp/constants/constant.NUM_PRIMES.html | 4 +- docs/fp/constants/constant.PRIMES.html | 4 +- .../constant.PRIME_TO_INDEX_MAP.html | 4 +- docs/fp/constants/index.html | 6 +- .../macro.populate_binomial_table.html | 4 +- docs/fp/constants/static.BINOMIAL_TABLE.html | 4 +- docs/fp/constants/type.Limb.html | 4 +- docs/fp/index.html | 4 +- docs/fp/limb/fn.add.html | 12 +- docs/fp/limb/fn.bit_length.html | 4 +- docs/fp/limb/fn.bit_length_const.html | 4 +- docs/fp/limb/fn.bitmask.html | 4 +- docs/fp/limb/fn.entries_per_limb.html | 4 +- docs/fp/limb/fn.entries_per_limb_const.html | 4 +- docs/fp/limb/fn.is_reduced.html | 4 +- docs/fp/limb/fn.limb_bit_index_pair.html | 6 +- docs/fp/limb/fn.number.html | 4 +- docs/fp/limb/fn.pack.html | 4 +- docs/fp/limb/fn.range.html | 10 +- docs/fp/limb/fn.reduce.html | 4 +- docs/fp/limb/fn.sign_rule.html | 4 +- docs/fp/limb/fn.truncate.html | 4 +- docs/fp/limb/fn.unpack.html | 4 +- docs/fp/limb/index.html | 4 +- docs/fp/limb/struct.LimbBitIndexPair.html | 30 +- docs/fp/macro.const_for.html | 4 +- docs/fp/matrix/index.html | 4 +- docs/fp/matrix/m4ri/index.html | 4 +- docs/fp/matrix/m4ri/struct.M4riTable.html | 50 +- docs/fp/matrix/matrix_inner/index.html | 4 +- .../matrix_inner/struct.AugmentedMatrix.html | 142 +- .../fp/matrix/matrix_inner/struct.Matrix.html | 160 +- .../matrix_inner/struct.MatrixSliceMut.html | 38 +- docs/fp/matrix/quasi_inverse/index.html | 4 +- .../quasi_inverse/struct.QuasiInverse.html | 48 +- docs/fp/matrix/struct.AugmentedMatrix.html | 142 +- docs/fp/matrix/struct.Matrix.html | 160 +- docs/fp/matrix/struct.MatrixSliceMut.html | 38 +- docs/fp/matrix/struct.QuasiInverse.html | 48 +- docs/fp/matrix/struct.Subquotient.html | 50 +- docs/fp/matrix/struct.Subspace.html | 42 +- docs/fp/matrix/subquotient/index.html | 4 +- .../subquotient/struct.Subquotient.html | 50 +- docs/fp/matrix/subspace/index.html | 4 +- docs/fp/matrix/subspace/struct.Subspace.html | 42 +- docs/fp/prime/constant.TWO.html | 4 +- docs/fp/prime/fn.direct_binomial.html | 4 +- docs/fp/prime/fn.factor_pk.html | 4 +- docs/fp/prime/fn.integer_power.html | 4 +- docs/fp/prime/fn.inverse.html | 4 +- docs/fp/prime/fn.is_valid_prime.html | 4 +- docs/fp/prime/fn.log2.html | 4 +- docs/fp/prime/fn.logp.html | 4 +- docs/fp/prime/fn.minus_one_to_the_n.html | 4 +- docs/fp/prime/fn.power_mod.html | 4 +- docs/fp/prime/index.html | 4 +- docs/fp/prime/macro.impl_binomial.html | 4 +- docs/fp/prime/struct.BinomialIterator.html | 878 ++++----- docs/fp/prime/struct.BitflagIterator.html | 880 ++++----- docs/fp/prime/struct.InvalidPrimeError.html | 24 +- docs/fp/prime/struct.ValidPrime.html | 42 +- docs/fp/prime/trait.Binomial.html | 32 +- docs/fp/simd/constant.LIMBS_PER_SIMD.html | 4 +- docs/fp/simd/fn.add_simd.html | 4 +- docs/fp/simd/index.html | 4 +- docs/fp/simd/x86_64/fn.load.html | 4 +- docs/fp/simd/x86_64/fn.store.html | 4 +- docs/fp/simd/x86_64/fn.xor.html | 4 +- docs/fp/simd/x86_64/index.html | 4 +- docs/fp/simd/x86_64/type.SimdLimb.html | 4 +- docs/fp/vector/impl_fpvectorp/index.html | 4 +- docs/fp/vector/impl_slicemutp/index.html | 4 +- docs/fp/vector/impl_slicep/index.html | 4 +- docs/fp/vector/index.html | 4 +- docs/fp/vector/inner/index.html | 4 +- docs/fp/vector/inner/struct.FpVectorP.html | 68 +- docs/fp/vector/inner/struct.SliceMutP.html | 44 +- docs/fp/vector/inner/struct.SliceP.html | 38 +- docs/fp/vector/iter/index.html | 4 +- .../vector/iter/struct.FpVectorIterator.html | 862 ++++----- .../iter/struct.FpVectorNonZeroIteratorP.html | 866 ++++----- .../vector/vector_generic/enum.FpVector.html | 48 +- .../enum.FpVectorNonZeroIterator.html | 854 ++++----- docs/fp/vector/vector_generic/enum.Slice.html | 30 +- .../vector/vector_generic/enum.SliceMut.html | 30 +- docs/fp/vector/vector_generic/index.html | 4 +- .../vector_generic/macro.dispatch_vector.html | 4 +- .../macro.dispatch_vector_inner.html | 4 +- .../vector_generic/macro.impl_try_into.html | 4 +- .../vector/vector_generic/macro.match_p.html | 4 +- docs/help.html | 4 +- docs/implementors/core/clone/trait.Clone.js | 12 +- docs/implementors/core/cmp/trait.Eq.js | 12 +- docs/implementors/core/cmp/trait.PartialEq.js | 12 +- docs/implementors/core/convert/trait.From.js | 8 +- .../core/convert/trait.TryFrom.js | 8 +- .../core/convert/trait.TryInto.js | 4 +- .../core/default/trait.Default.js | 10 +- docs/implementors/core/error/trait.Error.js | 4 +- docs/implementors/core/fmt/trait.Debug.js | 12 +- docs/implementors/core/fmt/trait.Display.js | 8 +- docs/implementors/core/hash/trait.Hash.js | 6 +- .../core/iter/traits/collect/trait.Extend.js | 2 +- .../iter/traits/collect/trait.IntoIterator.js | 4 +- .../exact_size/trait.ExactSizeIterator.js | 2 +- .../iter/traits/iterator/trait.Iterator.js | 6 +- docs/implementors/core/marker/trait.Copy.js | 8 +- docs/implementors/core/marker/trait.Freeze.js | 14 +- docs/implementors/core/marker/trait.Send.js | 14 +- .../core/marker/trait.StructuralEq.js | 12 +- .../core/marker/trait.StructuralPartialEq.js | 12 +- docs/implementors/core/marker/trait.Sync.js | 14 +- docs/implementors/core/marker/trait.Unpin.js | 14 +- docs/implementors/core/ops/arith/trait.Add.js | 2 +- .../core/ops/arith/trait.AddAssign.js | 2 +- docs/implementors/core/ops/arith/trait.Mul.js | 2 +- .../core/ops/arith/trait.MulAssign.js | 2 +- docs/implementors/core/ops/arith/trait.Sub.js | 2 +- .../core/ops/deref/trait.Deref.js | 2 +- .../core/ops/deref/trait.DerefMut.js | 2 +- docs/implementors/core/ops/drop/trait.Drop.js | 6 +- .../core/ops/index/trait.Index.js | 8 +- .../core/ops/index/trait.IndexMut.js | 8 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 14 +- .../panic/unwind_safe/trait.UnwindSafe.js | 14 +- .../core/str/traits/trait.FromStr.js | 4 +- .../trait.MaybeIndexedParallelIterator.js | 3 + .../trait.MaybeIntoParallelIterator.js | 3 + .../trait.MaybeIntoParallelRefMutIterator.js | 3 + .../prelude/trait.MaybeParallelIterator.js | 3 + .../iter/trait.IndexedParallelIterator.js | 3 + .../rayon/iter/trait.ParallelIterator.js | 3 + .../serde/de/trait.Deserialize.js | 8 +- .../implementors/serde/ser/trait.Serialize.js | 8 +- docs/implementors/std/io/trait.Read.js | 2 +- docs/implementors/std/io/trait.Write.js | 2 +- docs/lift_hom/all.html | 4 +- docs/lift_hom/index.html | 4 +- docs/mahowald_invariant/all.html | 4 +- docs/mahowald_invariant/index.html | 4 +- docs/massey/all.html | 4 +- docs/massey/index.html | 4 +- docs/maybe_rayon/all.html | 26 + .../concurrent/fn.in_place_scope.html | 27 + docs/maybe_rayon/concurrent/fn.join.html | 30 + docs/maybe_rayon/concurrent/fn.scope.html | 28 + docs/maybe_rayon/concurrent/index.html | 26 + .../maybe_rayon/concurrent/prelude/index.html | 28 + .../concurrent/prelude/sidebar-items.js | 1 + .../trait.IndexedParallelIterator.html | 711 +++++++ .../trait.MaybeIndexedParallelIterator.html | 26 + .../trait.MaybeIntoParallelIterator.html | 29 + ...trait.MaybeIntoParallelRefMutIterator.html | 29 + .../prelude/trait.MaybeParallelIterator.html | 26 + .../prelude/trait.ParallelIterator.html | 1683 +++++++++++++++++ docs/maybe_rayon/concurrent/sidebar-items.js | 1 + docs/maybe_rayon/concurrent/type.Scope.html | 28 + docs/maybe_rayon/index.html | 26 + docs/maybe_rayon/sidebar-items.js | 1 + docs/num_gens/all.html | 4 +- docs/num_gens/index.html | 4 +- docs/once/all.html | 4 +- docs/once/constant.DATA_LAYOUT.html | 4 +- docs/once/constant.MAX_OUTER_LENGTH.html | 4 +- docs/once/constant.USIZE_LEN.html | 4 +- docs/once/fn.inner_index.html | 4 +- docs/once/index.html | 4 +- docs/once/struct.OnceBiVec.html | 60 +- docs/once/struct.OnceVec.html | 84 +- docs/once/struct.OooTracker.html | 26 +- docs/once/struct.Page.html | 32 +- docs/query/all.html | 4 +- docs/query/constant.ARGV.html | 4 +- docs/query/fn.optional.html | 10 +- docs/query/fn.raw.html | 8 +- docs/query/fn.vector.html | 4 +- docs/query/fn.with_default.html | 10 +- docs/query/fn.yes_no.html | 4 +- docs/query/index.html | 4 +- docs/resolution_size/all.html | 4 +- docs/resolution_size/index.html | 4 +- docs/resolve/all.html | 4 +- docs/resolve/index.html | 4 +- docs/resolve_through_stem/all.html | 4 +- docs/resolve_through_stem/index.html | 4 +- docs/resolve_unstable/all.html | 4 +- docs/resolve_unstable/index.html | 4 +- docs/save_bruner/all.html | 4 +- docs/save_bruner/index.html | 4 +- docs/search-index.js | 19 +- docs/secondary/all.html | 4 +- docs/secondary/index.html | 4 +- docs/secondary_massey/all.html | 4 +- docs/secondary_massey/index.html | 4 +- docs/secondary_product/all.html | 4 +- docs/secondary_product/index.html | 4 +- docs/settings.html | 4 +- docs/sq0/all.html | 4 +- docs/sq0/index.html | 4 +- docs/src-files.js | 1 + docs/src/algebra/algebra/adem_algebra.rs.html | 2 +- .../src/algebra/algebra/algebra_trait.rs.html | 2 +- .../algebra/algebra/bialgebra_trait.rs.html | 2 +- .../src/algebra/algebra/combinatorics.rs.html | 2 +- docs/src/algebra/algebra/field.rs.html | 2 +- .../algebra/algebra/milnor_algebra.rs.html | 18 +- docs/src/algebra/algebra/mod.rs.html | 2 +- docs/src/algebra/algebra/pair_algebra.rs.html | 2 +- .../algebra/polynomial_algebra.rs.html | 2 +- .../algebra/algebra/steenrod_algebra.rs.html | 14 +- docs/src/algebra/lib.rs.html | 6 +- .../algebra/module/block_structure.rs.html | 2 +- .../module/finite_dimensional_module.rs.html | 10 +- .../module/finitely_presented_module.rs.html | 10 +- docs/src/algebra/module/free_module.rs.html | 2 +- docs/src/algebra/module/hom_module.rs.html | 2 +- .../free_module_homomorphism.rs.html | 2 +- .../full_module_homomorphism.rs.html | 2 +- .../generic_zero_homomorphism.rs.html | 2 +- .../module/homomorphism/hom_pullback.rs.html | 2 +- .../algebra/module/homomorphism/mod.rs.html | 42 +- .../quotient_homomorphism.rs.html | 2 +- docs/src/algebra/module/mod.rs.html | 2 +- docs/src/algebra/module/module_trait.rs.html | 2 +- .../algebra/module/quotient_module.rs.html | 2 +- docs/src/algebra/module/rpn.rs.html | 14 +- .../algebra/module/steenrod_module.rs.html | 10 +- .../algebra/module/suspension_module.rs.html | 2 +- docs/src/algebra/module/tensor_module.rs.html | 2 +- docs/src/algebra/module/zero_module.rs.html | 2 +- docs/src/algebra/steenrod_evaluator.rs.html | 2 +- docs/src/algebra/steenrod_parser.rs.html | 2 +- docs/src/algebra_dim/algebra_dim.rs.html | 2 +- docs/src/bivec/lib.rs.html | 14 +- docs/src/bruner/bruner.rs.html | 2 +- docs/src/chart/chart.rs.html | 2 +- docs/src/chart/lib.rs.html | 2 +- docs/src/d2_charts/d2_charts.rs.html | 2 +- docs/src/define_module/define_module.rs.html | 2 +- docs/src/differentials/differentials.rs.html | 2 +- .../ext/chain_complex/chain_homotopy.rs.html | 62 +- .../finite_chain_complex.rs.html | 2 +- docs/src/ext/chain_complex/mod.rs.html | 2 +- docs/src/ext/lib.rs.html | 2 +- docs/src/ext/nassau.rs.html | 42 +- docs/src/ext/resolution.rs.html | 70 +- docs/src/ext/resolution_homomorphism.rs.html | 46 +- docs/src/ext/save.rs.html | 2 +- docs/src/ext/secondary.rs.html | 154 +- docs/src/ext/utils.rs.html | 2 +- docs/src/ext/yoneda.rs.html | 2 +- docs/src/ext_m_n/ext_m_n.rs.html | 2 +- .../src/filtration_one/filtration_one.rs.html | 2 +- docs/src/fp/constants.rs.html | 2 +- .../out/constants.rs.html | 2 +- docs/src/fp/lib.rs.html | 2 +- docs/src/fp/limb.rs.html | 2 +- docs/src/fp/matrix/m4ri.rs.html | 2 +- docs/src/fp/matrix/matrix_inner.rs.html | 22 +- docs/src/fp/matrix/mod.rs.html | 2 +- docs/src/fp/matrix/quasi_inverse.rs.html | 2 +- docs/src/fp/matrix/subquotient.rs.html | 2 +- docs/src/fp/matrix/subspace.rs.html | 2 +- docs/src/fp/prime.rs.html | 14 +- docs/src/fp/simd/mod.rs.html | 2 +- docs/src/fp/simd/x86_64.rs.html | 2 +- docs/src/fp/vector/impl_fpvectorp.rs.html | 2 +- docs/src/fp/vector/impl_slicemutp.rs.html | 2 +- docs/src/fp/vector/impl_slicep.rs.html | 2 +- docs/src/fp/vector/inner.rs.html | 2 +- docs/src/fp/vector/iter.rs.html | 2 +- docs/src/fp/vector/mod.rs.html | 2 +- docs/src/fp/vector/vector_generic.rs.html | 14 +- docs/src/lift_hom/lift_hom.rs.html | 2 +- .../mahowald_invariant.rs.html | 2 +- docs/src/massey/massey.rs.html | 2 +- docs/src/maybe_rayon/concurrent.rs.html | 154 ++ docs/src/maybe_rayon/lib.rs.html | 44 + docs/src/num_gens/num_gens.rs.html | 2 +- docs/src/once/lib.rs.html | 40 +- docs/src/query/lib.rs.html | 2 +- .../resolution_size/resolution_size.rs.html | 2 +- docs/src/resolve/resolve.rs.html | 2 +- .../resolve_through_stem.rs.html | 2 +- .../resolve_unstable/resolve_unstable.rs.html | 2 +- docs/src/save_bruner/save_bruner.rs.html | 2 +- docs/src/secondary/secondary.rs.html | 2 +- .../secondary_massey/secondary_massey.rs.html | 50 +- .../secondary_product.rs.html | 2 +- docs/src/sq0/sq0.rs.html | 2 +- docs/src/sseq/bigraded.rs.html | 2 +- docs/src/sseq/coordinates/bidegree.rs.html | 10 +- docs/src/sseq/coordinates/element.rs.html | 2 +- docs/src/sseq/coordinates/generator.rs.html | 10 +- docs/src/sseq/coordinates/mod.rs.html | 20 +- docs/src/sseq/coordinates/range.rs.html | 2 +- docs/src/sseq/differential.rs.html | 2 +- docs/src/sseq/lib.rs.html | 2 +- docs/src/sseq/sseq.rs.html | 2 +- docs/src/steenrod/steenrod.rs.html | 2 +- docs/src/tensor/tensor.rs.html | 2 +- .../src/unstable_chart/unstable_chart.rs.html | 2 +- .../unstable_suspension.rs.html | 2 +- docs/src/yoneda/yoneda.rs.html | 2 +- docs/sseq/all.html | 4 +- docs/sseq/bigraded/index.html | 4 +- .../bigraded/struct.DenseBigradedModule.html | 32 +- docs/sseq/coordinates/bidegree/index.html | 4 +- .../coordinates/bidegree/struct.Bidegree.html | 68 +- docs/sseq/coordinates/element/index.html | 4 +- .../element/struct.BidegreeElement.html | 40 +- docs/sseq/coordinates/fn.iter_s_t.html | 8 +- docs/sseq/coordinates/generator/index.html | 4 +- .../generator/struct.BidegreeGenerator.html | 60 +- docs/sseq/coordinates/index.html | 4 +- docs/sseq/coordinates/range/index.html | 4 +- .../range/struct.BidegreeRange.html | 42 +- docs/sseq/differential/index.html | 4 +- .../differential/struct.Differential.html | 46 +- docs/sseq/index.html | 4 +- docs/sseq/sseq/index.html | 4 +- docs/sseq/sseq/struct.Adams.html | 22 +- docs/sseq/sseq/struct.Product.html | 34 +- docs/sseq/sseq/struct.Sseq.html | 122 +- docs/sseq/sseq/trait.SseqProfile.html | 14 +- docs/sseq/struct.Adams.html | 22 +- docs/sseq/struct.DenseBigradedModule.html | 32 +- docs/sseq/struct.Differential.html | 46 +- docs/sseq/struct.Product.html | 34 +- docs/sseq/struct.Sseq.html | 122 +- docs/sseq/trait.SseqProfile.html | 14 +- docs/static.files/ayu-fd19013d6ce078bf.css | 1 - docs/static.files/dark-0a43001d3fc2282c.css | 1 - docs/static.files/light-1596385f77d47ef2.css | 1 - docs/static.files/main-0795b7d26be81095.js | 12 - docs/static.files/main-c5bd66d33317d69f.js | 12 + .../noscript-5d8b3c7633ad77ba.css | 1 + .../noscript-cffde32267a19fd6.css | 1 - .../static.files/rustdoc-cb6f1f67f1bcd037.css | 8 - .../static.files/rustdoc-fa3bb1812debf86c.css | 10 + docs/static.files/search-6dfdfced5eff6596.js | 5 - docs/static.files/search-8be46b629f5f14a8.js | 5 + ...e9d4e5.js => settings-74424d7eec62a23e.js} | 4 +- .../settings-8c76f75bfb6bd192.css | 3 - docs/static.files/storage-db41da1a38ea3cb8.js | 1 - docs/static.files/storage-fec3eaa3851e447d.js | 1 + docs/steenrod/all.html | 4 +- docs/steenrod/index.html | 4 +- docs/tensor/all.html | 4 +- docs/tensor/index.html | 4 +- docs/unstable_chart/all.html | 4 +- docs/unstable_chart/index.html | 4 +- docs/unstable_suspension/all.html | 4 +- docs/unstable_suspension/index.html | 4 +- docs/yoneda/all.html | 4 +- docs/yoneda/index.html | 4 +- index.js | 13 +- sseq_gui_wasm_bg.wasm | Bin 840191 -> 859614 bytes 694 files changed, 24682 insertions(+), 14529 deletions(-) create mode 100644 docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.js create mode 100644 docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.js create mode 100644 docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.js create mode 100644 docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.js create mode 100644 docs/implementors/rayon/iter/trait.IndexedParallelIterator.js create mode 100644 docs/implementors/rayon/iter/trait.ParallelIterator.js create mode 100644 docs/maybe_rayon/all.html create mode 100644 docs/maybe_rayon/concurrent/fn.in_place_scope.html create mode 100644 docs/maybe_rayon/concurrent/fn.join.html create mode 100644 docs/maybe_rayon/concurrent/fn.scope.html create mode 100644 docs/maybe_rayon/concurrent/index.html create mode 100644 docs/maybe_rayon/concurrent/prelude/index.html create mode 100644 docs/maybe_rayon/concurrent/prelude/sidebar-items.js create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.IndexedParallelIterator.html create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.html create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.html create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.html create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.html create mode 100644 docs/maybe_rayon/concurrent/prelude/trait.ParallelIterator.html create mode 100644 docs/maybe_rayon/concurrent/sidebar-items.js create mode 100644 docs/maybe_rayon/concurrent/type.Scope.html create mode 100644 docs/maybe_rayon/index.html create mode 100644 docs/maybe_rayon/sidebar-items.js rename docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/{fp-81686b76175bef8a => fp-664134690232b2b2}/out/constants.rs.html (79%) create mode 100644 docs/src/maybe_rayon/concurrent.rs.html create mode 100644 docs/src/maybe_rayon/lib.rs.html delete mode 100644 docs/static.files/ayu-fd19013d6ce078bf.css delete mode 100644 docs/static.files/dark-0a43001d3fc2282c.css delete mode 100644 docs/static.files/light-1596385f77d47ef2.css delete mode 100644 docs/static.files/main-0795b7d26be81095.js create mode 100644 docs/static.files/main-c5bd66d33317d69f.js create mode 100644 docs/static.files/noscript-5d8b3c7633ad77ba.css delete mode 100644 docs/static.files/noscript-cffde32267a19fd6.css delete mode 100644 docs/static.files/rustdoc-cb6f1f67f1bcd037.css create mode 100644 docs/static.files/rustdoc-fa3bb1812debf86c.css delete mode 100644 docs/static.files/search-6dfdfced5eff6596.js create mode 100644 docs/static.files/search-8be46b629f5f14a8.js rename docs/static.files/{settings-de11bff964e9d4e5.js => settings-74424d7eec62a23e.js} (70%) delete mode 100644 docs/static.files/settings-8c76f75bfb6bd192.css delete mode 100644 docs/static.files/storage-db41da1a38ea3cb8.js create mode 100644 docs/static.files/storage-fec3eaa3851e447d.js diff --git a/calculator/steenrod_calculator_wasm_bg.wasm b/calculator/steenrod_calculator_wasm_bg.wasm index 02a5fe06a69b786215776b47d284dac533d12ae5..56712e19b675b24295aeeb37e0b8620f274fcda8 100644 GIT binary patch delta 50091 zcmeFadtg-6xi`F@HJ3~>GsyrUT>{8NNl*m2 zXe|*6;QNS3*b-48rb1Cvu&j8L39BHatUMWNh0#MK-U)vtWQ9VKhZe+iWl6XYjY<$j z`AYJ`Xb9gc_hsoG2nH?p-(}bU2?UTYR(?Le6A2c2Pf-d(#^CXJAebkY%iVIf>!_K5 z`^0vCs4CqT)s*xjs?)jWUUk8DF1_gDS(l#s-Sg+pz3f73mvnBEIe(Uy`!^|SlRJC< ztXbBVlK&v4?@076c}Oi)pURuER()S>QGb^$>QVKDyd-6}sSyvzPWhvJB@LH7ss15P zs~^huo-&owYt?$x-lG0ZHprvu_wu3qyBv^p>UVP0GpMmtY4xhQQ!Q7otN%c1v;0i% zP(PE~)V=C%^;`L&`jOm@f1il=z5?(2{r9`@{#RM7?opq~bLv@jgL2h>;%%=iQ7hH^ z@`5}i=@#_^^`v|(f00k+X^i=RG^r=mO&C%A)z7Qf%*ZyO>`ggigSsEd`_wjhK<$%j z*P`|+4DoGwL2X3AgX(j+S*=z#su$%uEZU-u-YPGug8N>Lw5a<}R^{p7^*t?TMPN=! zRa>?-z*>}amj)ZU?BBk{s!^8n75e1FOLLso=PHo*hbtqjtb4ZAgaf zpq;S8iC5f{!n3<%D@UEc0yK^egArUG`<$rd|7JLGiK848LzEI@0;rnSydRd1KZEvNlLjzi97X?2S` zP3jPumv=h0bR|~RSs@LMhAO|bFhe;yPTFQ2pXI!>6(izhvfn9`L4Wa@?|G*kHEh{<<_)c}I)o zlsP*&l6N?g2tQf{AeAI`xPh`{zuQq^l+*Z_Ujd6--0|YJx+j*6>u@z5FFUrIS=&}C zx3<%{TPC>&%Vr+i(bD=8wd_(yMia|}=6T43J@Rl@`H+g0;xF(vOgQ2%@I-G%{-%6t zZk@dK9a%9P%Xn$UHCUUy6=&v(y;VM`lB;}0<)tNyYE&c@1@;n|7AA`vD_NrI-Onm} z^zyd-$W#zSC|+!r5vV~&Eoi_?Dj1hoNi^2O9o2p06tCvsud4~DuT>3>)ERQ|b(G`b z?xp3cR70KG27-dm_VRs=idA9bVPspnpEsg}+FkI(|FM7Uz|?pUs~!v1yS?l)^M{i1*5GS*sePB5 zOkSb(J>uS*9C%LaTP+r+KGzOimJHi@j&(vD2&JM3zO3+UnkXWt`R z%y-V(=v*h$h_e{~yLx;)50kRPn1E}ix>Y8zi@h16pHwhdZ-?ygTswIAxVUmpOqGNi zz0K8-N~JxR+aAo5b~k*{c6C&&Co%n-!5kH_Fslh~KxImu+UtS7?K155mtg>!tx=2J z-=_wZ8(5W&ix1$SNuz62r6Y;)v4GpJXZP?*Z?sc;mJJmx2N@bb zXLg9Qh&jb`8xk|zr+S_*@4B(-6NZmv`zZE!z`KSy?o}T2!9@z4jhTiCFlVdR?`_rH zQ;voI_H%O^uFyLgOGfPy3}s~|&;5PX$Z|{_Nh-m0Oc1{w)06-VnqqnOZO5AJ_f*MmTg>@~A%ASO|=qe5p- zW(?RyYkJ*1@=!XVGQ5vE{D(upef~thTc;;BusDjKDr8o$)Y4sZrDR4CtXB5 z;?b+m_#Acch{rX32FjuhPxd)MLGJjp?-u!m+uW~v#~f;Jzn{^N9{!Yt1xwZaR(6W+f3FHHG+v4ReNqh7m5;cq6lI?f7M!zYi2@f+Yd>Wx_ z63as?$5|uPcDA+R7D_CnHQWP6h}mB8Pr+=ALcX%a>8#Hq|kHUmT0A;u8%H)#9W8{)W%el)#}y^yrADE5C+3%loOc*E|?+jPK_r-=7BaU zr)I9R)ZI96V|eR}n9OtTrGrYP#l2J{sm8?v?wf;8k&s(9WF)yN z>ehR8J0Dut7kE0H9k&5h21P&Xz+|F zNpQw|a>gP%za3}H_dpkdcxC4&L4!heksSqR9CK7v@ig=la5j-_*?G2_lgdvlaW6fp zzie{vKWY%9riiVk#q-?1A5{ymznNRba=aV#tvw_d|YLx|m&Ke(3Dajz5BJ zv(sCxy+eC+OjF8-UD6@+?-@1*GPHra-C)Oju-gWd?%rY4lH$YLXi3T--)X~7%xOs` zOQj0O#Vc(UO~x_TXhTZbg?7Fj2Pobjeris;h)}yQUu+m&_qhTn28}wZ!;vi*b!;E( zhlnqaCoo=6S@p|hFD##Jqh#}3;Iu?+Q(M`N+5nf1ur ztVepYK5q2KknjeLIb9aJ%f_62*hC=)RoRN_V4fZ4L<{V0Mjb31drfYlMjiAfdjHrz zs+<~yr7L!pViK7x6LD5$Q($4Et<6AZ62(mt>qPq4M#;jg0*B2ikeL;B1;LVt13Nr+ z>Z`=#;x&gdzQmCjU!VH=4%g$_`mq2@bNw-sGlTeYN*t#>08zir|Hy!sI_q=b7a3A=VJrc-Me(e)ZV4>X^+50KsHDrrg)QHC$eDKmAs!gzChi20Kh?8~a_b%`0NE z;ez8wOUGNTX} zi=$C%EZW#AzA+;}V}|L+GiI26P-{Kw@Txrv z1`@OrA~%#zzDQ)Io1StF{(e5?qU!l}V1RYjI1=R=bzU;x2>@GjT(HBOI*`W@3=LLU>S_f5=X+h<`70~3q_sOg(ju%y(Zpwfmv1>^XH2DxE*$I=RLD-Hg$P7WbKX1-^b@=JM)}c)kOXq%B)= zCx3euT6_N6&ArxOLIbRb593%8wj@gbhXC#N(;Cry=hJ7jsSjX;35-|=YqI?G8&JRK zjG1lfo4QA6|JE~pi1AE3^Fe&|$1_jD-;rlcko(=mXZ=8yZ5VoXlSJFh%l+h>r zh}uw=0h2=sv{5?lK7T42+X`dghh z65uL33PsUl;&Ej~6Hnle9f)%m9l{%ogm}#?cKz0@*&?;>z>81nZ~%8-Y^Hrl892cS zmt2{hb?Cn}>)>~$pzD*q)4k(aFKJ+>RddSnz$h?p+ns(%clWG0C;tz1{~vSEy<0!` zPndZB?~d+p;#Yt7!3qEtw1a?G$$SI&L_-GfgD*Xp9nF6a1?F8wV7z+SQ*!(-$u653 z!7lqcyYTQ7!F@L%qrbEB#!SW@yg@G!=L4uKD_DIEE0ftSwl}Pw*F)qS_ucuka=Y9! zSRHf4&_lD*SA3^8tyduj2s04&Ts)V0|HZ1E0^NRXGRU3JwAInO=qs-DJT zX8N3fD&#+5DEa5OcV9IT?f&|zp0dvU>MF25chJ=Xk#o+~<;c0_>gtkPRmu|p+6l_; zhN~|`$K9@J(=mpQj`K{%-@ayKc+(?*(R1!S*VI-t;k8b!AG?O33~VXQ?VF!dUP6m z($h>sWS3xsFvA+n)Qkg~DHvi1nXuE>DGmtltNFgh?KCv65% zW~9xNjJ}rFt}riCXv#ulEq` zUUIh}6*Cs9iW^5o3z^(U8(5)x?u|AYUUK8mZb#A3S*LbGD|Ghq6Q>Er5beHuBT@W| z8_(;g>*7q;T};=D8n5)aK9A0+Y}Xe7xZ~aYo2o>+eQ!D@U1aPl&ekW1>>vmb(*w@V zcB!n@4w^Kbc`_^L6S>RhMh{BkefZG3xd)>{)SK4uk5MCQFC?}R+=Ms>~ za4g^b{mmsJ?tz=DN})X4VJPj;IZ?s%D0Y{`X|60iM;>y|TUr)g`-Iu%>7|1wnw5fO z6$)x*r7G=Cu&jbKf!-`gh3sNbCb;(IqzdgWbLS)$rC{5Rq&icP580iajb391mR6N* zHLrwdo^hoaD{E0h;wX3UvTFhSr}Sx9ojsXU#&)}(8Sl6c z-̱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 NQ&SUDW#m?|;eYCqS`7dI delta 50516 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 diff --git a/docs/algebra/adem_algebra/enum.PorBockstein.html b/docs/algebra/adem_algebra/enum.PorBockstein.html index 8c2313b08..1080f3292 100644 --- a/docs/algebra/adem_algebra/enum.PorBockstein.html +++ b/docs/algebra/adem_algebra/enum.PorBockstein.html @@ -1,4 +1,4 @@ -PorBockstein in algebra::adem_algebra - Rust +PorBockstein in algebra::adem_algebra - Rust @@ -23,18 +23,18 @@ }); -
pub enum PorBockstein {
-    P(u32),
-    Bockstein(bool),
+
pub enum PorBockstein {
+    P(u32),
+    Bockstein(bool),
 }
Expand description

A Steenrod power $P^i$, or a Bockstein $\beta^\varepsilon$.

-

Variants§

§

P(u32)

§

Bockstein(bool)

Trait Implementations§

source§

impl Debug for PorBockstein

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Variants§

§

P(u32)

§

Bockstein(bool)

Trait Implementations§

source§

impl Debug for PorBockstein

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/adem_algebra/index.html b/docs/algebra/adem_algebra/index.html index 55956bef3..f8d81fbe2 100644 --- a/docs/algebra/adem_algebra/index.html +++ b/docs/algebra/adem_algebra/index.html @@ -1,4 +1,4 @@ -algebra::adem_algebra - Rust +algebra::adem_algebra - Rust @@ -23,5 +23,5 @@ }); -

Module algebra::adem_algebra

source ·
Expand description

The Steenrod algebra using the Adem basis.

+

Module algebra::adem_algebra

source ·
Expand description

The Steenrod algebra using the Adem basis.

Structs

Enums

  • A Steenrod power $P^i$, or a Bockstein $\beta^\varepsilon$.

Traits

  • An algebra that can be viewed as an Adem algebra.
\ No newline at end of file diff --git a/docs/algebra/adem_algebra/struct.AdemAlgebra.html b/docs/algebra/adem_algebra/struct.AdemAlgebra.html index f4039838b..a51536a1f 100644 --- a/docs/algebra/adem_algebra/struct.AdemAlgebra.html +++ b/docs/algebra/adem_algebra/struct.AdemAlgebra.html @@ -1,4 +1,4 @@ -AdemAlgebra in algebra::adem_algebra - Rust +AdemAlgebra in algebra::adem_algebra - Rust @@ -23,72 +23,72 @@ }); -
pub struct AdemAlgebra {
-    p: ValidPrime,
-    generic: bool,
-    unstable_enabled: bool,
-    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
-    basis_table: OnceVec<Vec<AdemBasisElement>>,
-    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
-    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
-    excess_table: OnceVec<Vec<usize>>,
+
pub struct AdemAlgebra {
+    p: ValidPrime,
+    generic: bool,
+    unstable_enabled: bool,
+    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
+    basis_table: OnceVec<Vec<AdemBasisElement>>,
+    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
+    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
+    excess_table: OnceVec<Vec<usize>>,
 }
Expand description

An Algebra implementing the Steenrod algebra, using the Adem basis.

-

Fields§

§p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

degree -> index -> AdemBasisElement

-
§basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

degree -> AdemBasisElement -> index

-
§multiplication_table: OnceVec<Vec<Vec<FpVector>>>

degree -> first square -> admissible sequence idx -> result

-
§excess_table: OnceVec<Vec<usize>>

Implementations§

source§

impl AdemAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

Constructs a new AdemAlgebra.

-
source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

fn generate_basis_even(&self, max_degree: i32)

source

fn generate_basis2(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_element_to_index_map(&self, max_degree: i32)

source

pub fn basis_element_from_index( - &self, - degree: i32, - idx: usize +

Fields§

§p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

degree -> index -> AdemBasisElement

+
§basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

degree -> AdemBasisElement -> index

+
§multiplication_table: OnceVec<Vec<Vec<FpVector>>>

degree -> first square -> admissible sequence idx -> result

+
§excess_table: OnceVec<Vec<usize>>

Implementations§

source§

impl AdemAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

Constructs a new AdemAlgebra.

+
source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

fn generate_basis_even(&self, max_degree: i32)

source

fn generate_basis2(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_element_to_index_map(&self, max_degree: i32)

source

pub fn basis_element_from_index( + &self, + degree: i32, + idx: usize ) -> &AdemBasisElement

source

pub fn try_basis_element_to_index( &self, elt: &AdemBasisElement -) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

source

fn tail_of_basis_element_to_index( +) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

source

fn tail_of_basis_element_to_index( &self, elt: &mut AdemBasisElement, - idx: u32, - q: u32 -) -> usize

source

fn generate_multiplication_table_2(&self, max_degree: i32)

source

fn generate_multiplication_table_2_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

source

fn generate_multiplication_table_generic(&self, max_degree: i32)

source

fn generate_multiplication_table_generic_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

This function expresses $Sq^x$ (current) in terms of the admissible basis and returns + idx: u32, + q: u32 +) -> usize

source

fn generate_multiplication_table_2(&self, max_degree: i32)

source

fn generate_multiplication_table_2_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

source

fn generate_multiplication_table_generic(&self, max_degree: i32)

source

fn generate_multiplication_table_generic_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

This function expresses $Sq^x$ (current) in terms of the admissible basis and returns the result as an FpVector, where (current) is the admissible monomial of degree $n - qx$ (so that $Sq^x)$ (current) has degree $n$) and index idx.

Here $Sq^x$ means $P^{x/2}$ if $x$ is even and $\beta P^{(x-1)/2}$ if $x$ is odd.

Note that x is always positive.

source

pub fn multiply_inner( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source

pub fn make_mono_admissible( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - excess: i32 + excess: i32 )

source

fn make_mono_admissible_2( &self, - result: SliceMut<'_>, + result: SliceMut<'_>, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

Reduce a Steenrod monomial at the prime 2.

Arguments:
source

fn make_mono_admissible_generic( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

source

fn decompose_basis_element_2( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_generic( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_generic( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source

pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

source§

impl AdemAlgebra

source

fn generate_excess_table(&self, max_degree: i32)

Trait Implementations§

source§

impl AdemAlgebraT for AdemAlgebra

source§

impl Algebra for AdemAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
source

pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

source§

impl AdemAlgebra

source

fn generate_excess_table(&self, max_degree: i32)

Trait Implementations§

source§

impl AdemAlgebraT for AdemAlgebra

source§

impl Algebra for AdemAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize +disasterous consequences. So we store the magic in the save files. Read more

source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize )

Computes the product r * s of two basis elements, and adds the -result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
source§

fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of two general elements, and adds the -result to result. Read more
source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for AdemAlgebra

source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

impl Display for AdemAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for AdemAlgebra

source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for AdemAlgebra

source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

impl Display for AdemAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for AdemAlgebra

source§

fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because they generate all relations.

-
source§

fn generator_to_string(&self, degree: i32, _idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( +

source§

fn generator_to_string(&self, degree: i32, _idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators. Read more
source§

impl PairAlgebra for AdemAlgebra

§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn element_is_zero(_elt: &Self::Element) -> bool

source§

fn finalize_element(_elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the -complement of the image of the differential.
source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
Decomposes an element into generators. Read more
source§

impl PairAlgebra for AdemAlgebra

§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn element_is_zero(_elt: &Self::Element) -> bool

source§

fn finalize_element(_elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the +complement of the image of the differential.
source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said -indecomposable.
source§

fn new_pair_element(&self, _degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn sigma_multiply_basis( +indecomposable.

source§

fn new_pair_element(&self, _degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn sigma_multiply_basis( &self, _result: &mut Self::Element, - _coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + _coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to -result.
source§

fn a_multiply( +result.

source§

fn a_multiply( &self, - _result: SliceMut<'_>, - _coeff: u32, - _r_degree: i32, - _r: Slice<'_>, - _s_degree: i32, + _result: SliceMut<'_>, + _coeff: u32, + _r_degree: i32, + _r: Slice<'_>, + _s_degree: i32, _s: &Self::Element -)

Compute $A(r, s)$ and write the result to result.
source§

fn element_to_bytes( +)

Compute $A(r, s)$ and write the result to result.
source§

fn element_to_bytes( &self, _elt: &Self::Element, - _buffer: &mut impl Write -) -> Result<()>

source§

fn element_from_bytes( + _buffer: &mut impl Write +) -> Result<()>

source§

fn element_from_bytes( &self, - _degree: i32, - _buffer: &mut impl Read -) -> Result<Self::Element>

source§

fn sigma_multiply( + _degree: i32, + _buffer: &mut impl Read +) -> Result<Self::Element>

source§

fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for AdemAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for AdemAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

+From<T> for U chooses to do.

source§

impl<A> MuAlgebra<false> for Awhere - A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

Computes the product r * s of two general elements, and adds the result to result. Read more
source§

impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/adem_algebra/struct.AdemBasisElement.html b/docs/algebra/adem_algebra/struct.AdemBasisElement.html index 2a6786946..6c4e24628 100644 --- a/docs/algebra/adem_algebra/struct.AdemBasisElement.html +++ b/docs/algebra/adem_algebra/struct.AdemBasisElement.html @@ -1,4 +1,4 @@ -AdemBasisElement in algebra::adem_algebra - Rust +AdemBasisElement in algebra::adem_algebra - Rust @@ -23,11 +23,11 @@ }); -
pub struct AdemBasisElement {
-    pub degree: i32,
-    pub bocksteins: u32,
-    pub ps: Vec<u32>,
-    pub p_or_sq: bool,
+
pub struct AdemBasisElement {
+    pub degree: i32,
+    pub bocksteins: u32,
+    pub ps: Vec<u32>,
+    pub p_or_sq: bool,
 }
Expand description

An Adem basis element for the Steenrod algebra.

To encode an element $$ @@ -42,35 +42,35 @@ \mathtt{ps} &= [i_0, i_1, \ldots, i_n] \\ \mathtt{bocksteins} &= 000\cdots0\varepsilon_{n+1} \varepsilon_n \cdots \varepsilon_0 \end{aligned} $$

-

Fields§

§degree: i32

The degree of the element.

-
§bocksteins: u32

A bitset of which $\beta$ Bocksteins are in the element’s decomposition.

-
§ps: Vec<u32>

A list of which Steenrod powers are in the element’s decompositions.

-
§p_or_sq: bool

Whether to denote the generators as powers $P^i$ or squares $Sq^i$ when using string formatting; +

Fields§

§degree: i32

The degree of the element.

+
§bocksteins: u32

A bitset of which $\beta$ Bocksteins are in the element’s decomposition.

+
§ps: Vec<u32>

A list of which Steenrod powers are in the element’s decompositions.

+
§p_or_sq: bool

Whether to denote the generators as powers $P^i$ or squares $Sq^i$ when using string formatting; true denotes the former.

-

Implementations§

source§

impl AdemBasisElement

source

fn iter_filtered(&self) -> impl Iterator<Item = PorBockstein> + '_

Returns an iterator over the element’s decomposition.

+

Implementations§

source§

impl AdemBasisElement

source

fn iter_filtered(&self) -> impl Iterator<Item = PorBockstein> + '_

Returns an iterator over the element’s decomposition.

This returns alternating Bocksteins and Ps, but skipping any \beta^0 factors.

-
source

fn excess(&self, p: ValidPrime) -> u32

Trait Implementations§

source§

impl Clone for AdemBasisElement

source§

fn clone(&self) -> AdemBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AdemBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<AdemBasisElement> for AdemBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for AdemBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere - T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
source

fn excess(&self, p: ValidPrime) -> u32

Trait Implementations§

source§

impl Clone for AdemBasisElement

source§

fn clone(&self) -> AdemBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AdemBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<AdemBasisElement> for AdemBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for AdemBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere + T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/adem_algebra/trait.AdemAlgebraT.html b/docs/algebra/adem_algebra/trait.AdemAlgebraT.html index 13c53c494..74e6ccc09 100644 --- a/docs/algebra/adem_algebra/trait.AdemAlgebraT.html +++ b/docs/algebra/adem_algebra/trait.AdemAlgebraT.html @@ -1,4 +1,4 @@ -AdemAlgebraT in algebra::adem_algebra - Rust +AdemAlgebraT in algebra::adem_algebra - Rust @@ -23,7 +23,7 @@ }); -
pub trait AdemAlgebraT: Send + Sync + Algebra {
+
pub trait AdemAlgebraT: Send + Sync + Algebra {
     // Required method
     fn adem_algebra(&self) -> &AdemAlgebra;
 }
Expand description

An algebra that can be viewed as an Adem algebra.

@@ -31,4 +31,4 @@ with their version of SteenrodAlgebra.

In order for things to work AdemAlgebraT cannot implement Algebra. Otherwise, the algebra enum for our bindings will see an implementation clash.

-

Required Methods§

Implementors§

\ No newline at end of file +

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/algebra/algebra/adem_algebra/enum.PorBockstein.html b/docs/algebra/algebra/adem_algebra/enum.PorBockstein.html index e206b5b48..398d88ce1 100644 --- a/docs/algebra/algebra/adem_algebra/enum.PorBockstein.html +++ b/docs/algebra/algebra/adem_algebra/enum.PorBockstein.html @@ -1,4 +1,4 @@ -PorBockstein in algebra::algebra::adem_algebra - Rust +PorBockstein in algebra::algebra::adem_algebra - Rust @@ -23,18 +23,18 @@ }); -
pub enum PorBockstein {
-    P(u32),
-    Bockstein(bool),
+
pub enum PorBockstein {
+    P(u32),
+    Bockstein(bool),
 }
Expand description

A Steenrod power $P^i$, or a Bockstein $\beta^\varepsilon$.

-

Variants§

§

P(u32)

§

Bockstein(bool)

Trait Implementations§

source§

impl Debug for PorBockstein

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Variants§

§

P(u32)

§

Bockstein(bool)

Trait Implementations§

source§

impl Debug for PorBockstein

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/adem_algebra/fn.shift_vec.html b/docs/algebra/algebra/adem_algebra/fn.shift_vec.html index e90752f04..e9c3b529b 100644 --- a/docs/algebra/algebra/adem_algebra/fn.shift_vec.html +++ b/docs/algebra/algebra/adem_algebra/fn.shift_vec.html @@ -1,4 +1,4 @@ -shift_vec in algebra::algebra::adem_algebra - Rust +shift_vec in algebra::algebra::adem_algebra - Rust @@ -23,7 +23,7 @@ }); -
unsafe fn shift_vec<T>(v: &mut Vec<T>, offset: isize)
Expand description

Shifts a Vec’s elements back by offset.

+
unsafe fn shift_vec<T>(v: &mut Vec<T>, offset: isize)
Expand description

Shifts a Vec’s elements back by offset.

Safety

This function leaves v in an invalid state, since ptr does not point to the beginning of an allocation after this function completes. Operations diff --git a/docs/algebra/algebra/adem_algebra/index.html b/docs/algebra/algebra/adem_algebra/index.html index 498deb373..cad9622e8 100644 --- a/docs/algebra/algebra/adem_algebra/index.html +++ b/docs/algebra/algebra/adem_algebra/index.html @@ -1,4 +1,4 @@ -algebra::algebra::adem_algebra - Rust +algebra::algebra::adem_algebra - Rust @@ -23,5 +23,5 @@ }); -

Expand description

The Steenrod algebra using the Adem basis.

+
Expand description

The Steenrod algebra using the Adem basis.

Structs

Enums

  • A Steenrod power $P^i$, or a Bockstein $\beta^\varepsilon$.

Traits

  • An algebra that can be viewed as an Adem algebra.

Functions

  • shift_vec 🔒
    Shifts a Vec’s elements back by offset.
\ No newline at end of file diff --git a/docs/algebra/algebra/adem_algebra/struct.AdemAlgebra.html b/docs/algebra/algebra/adem_algebra/struct.AdemAlgebra.html index 8ddbdd8a4..f2a515c54 100644 --- a/docs/algebra/algebra/adem_algebra/struct.AdemAlgebra.html +++ b/docs/algebra/algebra/adem_algebra/struct.AdemAlgebra.html @@ -1,4 +1,4 @@ -AdemAlgebra in algebra::algebra::adem_algebra - Rust +AdemAlgebra in algebra::algebra::adem_algebra - Rust @@ -23,72 +23,72 @@ }); -
pub struct AdemAlgebra {
-    p: ValidPrime,
-    generic: bool,
-    unstable_enabled: bool,
-    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
-    basis_table: OnceVec<Vec<AdemBasisElement>>,
-    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
-    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
-    excess_table: OnceVec<Vec<usize>>,
+
pub struct AdemAlgebra {
+    p: ValidPrime,
+    generic: bool,
+    unstable_enabled: bool,
+    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
+    basis_table: OnceVec<Vec<AdemBasisElement>>,
+    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
+    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
+    excess_table: OnceVec<Vec<usize>>,
 }
Expand description

An Algebra implementing the Steenrod algebra, using the Adem basis.

-

Fields§

§p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

degree -> index -> AdemBasisElement

-
§basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

degree -> AdemBasisElement -> index

-
§multiplication_table: OnceVec<Vec<Vec<FpVector>>>

degree -> first square -> admissible sequence idx -> result

-
§excess_table: OnceVec<Vec<usize>>

Implementations§

source§

impl AdemAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

Constructs a new AdemAlgebra.

-
source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

fn generate_basis_even(&self, max_degree: i32)

source

fn generate_basis2(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_element_to_index_map(&self, max_degree: i32)

source

pub fn basis_element_from_index( - &self, - degree: i32, - idx: usize +

Fields§

§p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

degree -> index -> AdemBasisElement

+
§basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

degree -> AdemBasisElement -> index

+
§multiplication_table: OnceVec<Vec<Vec<FpVector>>>

degree -> first square -> admissible sequence idx -> result

+
§excess_table: OnceVec<Vec<usize>>

Implementations§

source§

impl AdemAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

Constructs a new AdemAlgebra.

+
source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

fn generate_basis_even(&self, max_degree: i32)

source

fn generate_basis2(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_element_to_index_map(&self, max_degree: i32)

source

pub fn basis_element_from_index( + &self, + degree: i32, + idx: usize ) -> &AdemBasisElement

source

pub fn try_basis_element_to_index( &self, elt: &AdemBasisElement -) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

source

fn tail_of_basis_element_to_index( +) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

source

fn tail_of_basis_element_to_index( &self, elt: &mut AdemBasisElement, - idx: u32, - q: u32 -) -> usize

source

fn generate_multiplication_table_2(&self, max_degree: i32)

source

fn generate_multiplication_table_2_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

source

fn generate_multiplication_table_generic(&self, max_degree: i32)

source

fn generate_multiplication_table_generic_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

This function expresses $Sq^x$ (current) in terms of the admissible basis and returns + idx: u32, + q: u32 +) -> usize

source

fn generate_multiplication_table_2(&self, max_degree: i32)

source

fn generate_multiplication_table_2_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

source

fn generate_multiplication_table_generic(&self, max_degree: i32)

source

fn generate_multiplication_table_generic_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

This function expresses $Sq^x$ (current) in terms of the admissible basis and returns the result as an FpVector, where (current) is the admissible monomial of degree $n - qx$ (so that $Sq^x)$ (current) has degree $n$) and index idx.

Here $Sq^x$ means $P^{x/2}$ if $x$ is even and $\beta P^{(x-1)/2}$ if $x$ is odd.

Note that x is always positive.

source

pub fn multiply_inner( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source

pub fn make_mono_admissible( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - excess: i32 + excess: i32 )

source

fn make_mono_admissible_2( &self, - result: SliceMut<'_>, + result: SliceMut<'_>, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

Reduce a Steenrod monomial at the prime 2.

Arguments:
source

fn make_mono_admissible_generic( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

source

fn decompose_basis_element_2( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_generic( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_generic( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source

pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

source§

impl AdemAlgebra

source

fn generate_excess_table(&self, max_degree: i32)

Trait Implementations§

source§

impl AdemAlgebraT for AdemAlgebra

source§

impl Algebra for AdemAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
source

pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

source§

impl AdemAlgebra

source

fn generate_excess_table(&self, max_degree: i32)

Trait Implementations§

source§

impl AdemAlgebraT for AdemAlgebra

source§

impl Algebra for AdemAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize +disasterous consequences. So we store the magic in the save files. Read more

source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize )

Computes the product r * s of two basis elements, and adds the -result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
source§

fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of two general elements, and adds the -result to result. Read more
source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for AdemAlgebra

source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

impl Display for AdemAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for AdemAlgebra

source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for AdemAlgebra

source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

impl Display for AdemAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for AdemAlgebra

source§

fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because they generate all relations.

-
source§

fn generator_to_string(&self, degree: i32, _idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( +

source§

fn generator_to_string(&self, degree: i32, _idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators. Read more
source§

impl PairAlgebra for AdemAlgebra

§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn element_is_zero(_elt: &Self::Element) -> bool

source§

fn finalize_element(_elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the -complement of the image of the differential.
source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
Decomposes an element into generators. Read more
source§

impl PairAlgebra for AdemAlgebra

§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn element_is_zero(_elt: &Self::Element) -> bool

source§

fn finalize_element(_elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the +complement of the image of the differential.
source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said -indecomposable.
source§

fn new_pair_element(&self, _degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn sigma_multiply_basis( +indecomposable.

source§

fn new_pair_element(&self, _degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn sigma_multiply_basis( &self, _result: &mut Self::Element, - _coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + _coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to -result.
source§

fn a_multiply( +result.

source§

fn a_multiply( &self, - _result: SliceMut<'_>, - _coeff: u32, - _r_degree: i32, - _r: Slice<'_>, - _s_degree: i32, + _result: SliceMut<'_>, + _coeff: u32, + _r_degree: i32, + _r: Slice<'_>, + _s_degree: i32, _s: &Self::Element -)

Compute $A(r, s)$ and write the result to result.
source§

fn element_to_bytes( +)

Compute $A(r, s)$ and write the result to result.
source§

fn element_to_bytes( &self, _elt: &Self::Element, - _buffer: &mut impl Write -) -> Result<()>

source§

fn element_from_bytes( + _buffer: &mut impl Write +) -> Result<()>

source§

fn element_from_bytes( &self, - _degree: i32, - _buffer: &mut impl Read -) -> Result<Self::Element>

source§

fn sigma_multiply( + _degree: i32, + _buffer: &mut impl Read +) -> Result<Self::Element>

source§

fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for AdemAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for AdemAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

+From<T> for U chooses to do.

source§

impl<A> MuAlgebra<false> for Awhere - A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

Computes the product r * s of two general elements, and adds the result to result. Read more
source§

impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/adem_algebra/struct.AdemBasisElement.html b/docs/algebra/algebra/adem_algebra/struct.AdemBasisElement.html index 9d157c17f..093464cd5 100644 --- a/docs/algebra/algebra/adem_algebra/struct.AdemBasisElement.html +++ b/docs/algebra/algebra/adem_algebra/struct.AdemBasisElement.html @@ -1,4 +1,4 @@ -AdemBasisElement in algebra::algebra::adem_algebra - Rust +AdemBasisElement in algebra::algebra::adem_algebra - Rust @@ -23,11 +23,11 @@ }); -
pub struct AdemBasisElement {
-    pub degree: i32,
-    pub bocksteins: u32,
-    pub ps: Vec<u32>,
-    pub p_or_sq: bool,
+
pub struct AdemBasisElement {
+    pub degree: i32,
+    pub bocksteins: u32,
+    pub ps: Vec<u32>,
+    pub p_or_sq: bool,
 }
Expand description

An Adem basis element for the Steenrod algebra.

To encode an element $$ @@ -42,35 +42,35 @@ \mathtt{ps} &= [i_0, i_1, \ldots, i_n] \\ \mathtt{bocksteins} &= 000\cdots0\varepsilon_{n+1} \varepsilon_n \cdots \varepsilon_0 \end{aligned} $$

-

Fields§

§degree: i32

The degree of the element.

-
§bocksteins: u32

A bitset of which $\beta$ Bocksteins are in the element’s decomposition.

-
§ps: Vec<u32>

A list of which Steenrod powers are in the element’s decompositions.

-
§p_or_sq: bool

Whether to denote the generators as powers $P^i$ or squares $Sq^i$ when using string formatting; +

Fields§

§degree: i32

The degree of the element.

+
§bocksteins: u32

A bitset of which $\beta$ Bocksteins are in the element’s decomposition.

+
§ps: Vec<u32>

A list of which Steenrod powers are in the element’s decompositions.

+
§p_or_sq: bool

Whether to denote the generators as powers $P^i$ or squares $Sq^i$ when using string formatting; true denotes the former.

-

Implementations§

source§

impl AdemBasisElement

source

fn iter_filtered(&self) -> impl Iterator<Item = PorBockstein> + '_

Returns an iterator over the element’s decomposition.

+

Implementations§

source§

impl AdemBasisElement

source

fn iter_filtered(&self) -> impl Iterator<Item = PorBockstein> + '_

Returns an iterator over the element’s decomposition.

This returns alternating Bocksteins and Ps, but skipping any \beta^0 factors.

-
source

fn excess(&self, p: ValidPrime) -> u32

Trait Implementations§

source§

impl Clone for AdemBasisElement

source§

fn clone(&self) -> AdemBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AdemBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<AdemBasisElement> for AdemBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for AdemBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere - T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
source

fn excess(&self, p: ValidPrime) -> u32

Trait Implementations§

source§

impl Clone for AdemBasisElement

source§

fn clone(&self) -> AdemBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for AdemBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for AdemBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<AdemBasisElement> for AdemBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for AdemBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere + T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/adem_algebra/trait.AdemAlgebraT.html b/docs/algebra/algebra/adem_algebra/trait.AdemAlgebraT.html index 41eb67704..df2b69ebf 100644 --- a/docs/algebra/algebra/adem_algebra/trait.AdemAlgebraT.html +++ b/docs/algebra/algebra/adem_algebra/trait.AdemAlgebraT.html @@ -1,4 +1,4 @@ -AdemAlgebraT in algebra::algebra::adem_algebra - Rust +AdemAlgebraT in algebra::algebra::adem_algebra - Rust @@ -23,7 +23,7 @@ }); -
pub trait AdemAlgebraT: Send + Sync + Algebra {
+
pub trait AdemAlgebraT: Send + Sync + Algebra {
     // Required method
     fn adem_algebra(&self) -> &AdemAlgebra;
 }
Expand description

An algebra that can be viewed as an Adem algebra.

@@ -31,4 +31,4 @@ with their version of SteenrodAlgebra.

In order for things to work AdemAlgebraT cannot implement Algebra. Otherwise, the algebra enum for our bindings will see an implementation clash.

-

Required Methods§

Implementors§

\ No newline at end of file +

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/algebra/algebra/algebra_trait/index.html b/docs/algebra/algebra/algebra_trait/index.html index 7c142b475..58b8d5720 100644 --- a/docs/algebra/algebra/algebra_trait/index.html +++ b/docs/algebra/algebra/algebra_trait/index.html @@ -1,4 +1,4 @@ -algebra::algebra::algebra_trait - Rust +algebra::algebra::algebra_trait - Rust @@ -23,6 +23,6 @@ }); -

Traits

\ No newline at end of file diff --git a/docs/algebra/algebra/algebra_trait/trait.GeneratedAlgebra.html b/docs/algebra/algebra/algebra_trait/trait.GeneratedAlgebra.html index 827f4dc92..1d3a84214 100644 --- a/docs/algebra/algebra/algebra_trait/trait.GeneratedAlgebra.html +++ b/docs/algebra/algebra/algebra_trait/trait.GeneratedAlgebra.html @@ -1,4 +1,4 @@ -GeneratedAlgebra in algebra::algebra::algebra_trait - Rust +GeneratedAlgebra in algebra::algebra::algebra_trait - Rust @@ -23,33 +23,33 @@ }); -
pub trait GeneratedAlgebra: Algebra {
+
pub trait GeneratedAlgebra: Algebra {
     // Required methods
-    fn generators(&self, degree: i32) -> Vec<usize>;
+    fn generators(&self, degree: i32) -> Vec<usize>;
     fn decompose_basis_element(
         &self,
-        degree: i32,
-        idx: usize
-    ) -> Vec<(u32, (i32, usize), (i32, usize))>;
+        degree: i32,
+        idx: usize
+    ) -> Vec<(u32, (i32, usize), (i32, usize))>;
     fn generating_relations(
         &self,
-        degree: i32
-    ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>;
+        degree: i32
+    ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>;
 
     // Provided method
-    fn generator_to_string(&self, degree: i32, idx: usize) -> String { ... }
+    fn generator_to_string(&self, degree: i32, idx: usize) -> String { ... }
 }
Expand description

An Algebra equipped with a distinguished presentation.

These data can be used to specify finite modules as the actions of the distinguished generators.

-

Required Methods§

source

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree.

+

Required Methods§

source

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree.

Generators are specified as basis element indices in that degree. The order of the list is not important.

This method need not be fast, because they will only be performed when constructing the module, and will often only involve low dimensional elements.

source

fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators.

+ degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators.

Given a basis element $A$, this function returns a list of triples $(c_i, A_i, B_i)$, such that

$$ A = \sum_i c_i A_i B_i,$$

@@ -62,18 +62,18 @@

It is invalid to supply an element that is a generator.

source

fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

Returns relations that the algebra wants checked to ensure the consistency of module.

+ degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

Returns relations that the algebra wants checked to ensure the consistency of module.

Relations are encoded as general multi-degree elements which are killed in the quotient: $$ \sum_i c_i \alpha_i \beta_i = 0. $$ where $c_i$ are coefficients and $\alpha_i$ and $\beta_i$ are basis elements of arbitrary degree.

-

Provided Methods§

source

fn generator_to_string(&self, degree: i32, idx: usize) -> String

Returns the name of a generator.

+

Provided Methods§

source

fn generator_to_string(&self, degree: i32, idx: usize) -> String

Returns the name of a generator.

Note: idx is the index within degree’s basis, not the list returned by GeneratedAlgebra::generators().

By default, this function will forward to Algebra::basis_element_to_string(), but may be overridden if more concise names are available.

This function MUST be inverse to [GeneratedAlgebra::string_to_generator()].

-

Implementors§

source§

impl GeneratedAlgebra for SteenrodAlgebra

An algebra with a specified list of generators and generating relations. This data can be used +

Implementors§

source§

impl GeneratedAlgebra for SteenrodAlgebra

An algebra with a specified list of generators and generating relations. This data can be used to specify modules by specifying the actions of the generators.

-
source§

impl GeneratedAlgebra for AdemAlgebra

source§

impl GeneratedAlgebra for MilnorAlgebra

\ No newline at end of file +
source§

impl GeneratedAlgebra for AdemAlgebra

source§

impl GeneratedAlgebra for MilnorAlgebra

\ No newline at end of file diff --git a/docs/algebra/algebra/algebra_trait/trait.MuAlgebra.html b/docs/algebra/algebra/algebra_trait/trait.MuAlgebra.html index 013476965..34914af99 100644 --- a/docs/algebra/algebra/algebra_trait/trait.MuAlgebra.html +++ b/docs/algebra/algebra/algebra_trait/trait.MuAlgebra.html @@ -1,4 +1,4 @@ -MuAlgebra in algebra::algebra::algebra_trait - Rust +MuAlgebra in algebra::algebra::algebra_trait - Rust @@ -23,91 +23,91 @@ }); -
pub trait MuAlgebra<const U: bool>: Algebra {
+
pub trait MuAlgebra<const U: bool>: Algebra {
     // Required methods
-    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
+    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
     fn multiply_basis_elements_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r_index: usize,
-        s_degree: i32,
-        s_index: usize,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r_index: usize,
+        s_degree: i32,
+        s_index: usize,
+        excess: i32
     );
     fn multiply_basis_element_by_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r_idx: usize,
-        s_degree: i32,
-        s: Slice<'_>,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r_idx: usize,
+        s_degree: i32,
+        s: Slice<'_>,
+        excess: i32
     );
     fn multiply_element_by_basis_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r: Slice<'_>,
-        s_degree: i32,
-        s_idx: usize,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r: Slice<'_>,
+        s_degree: i32,
+        s_idx: usize,
+        excess: i32
     );
     fn multiply_element_by_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r: Slice<'_>,
-        s_degree: i32,
-        s: Slice<'_>,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r: Slice<'_>,
+        s_degree: i32,
+        s: Slice<'_>,
+        excess: i32
     );
 }
Expand description

An algebra that is maybe unstable. Every Algebra implements MuAlgebra by ignoring the excess parameter, and every UnstableAlgebra implements MuAlgebra. This makes it possible to write code that is generic over stable and unstable algebras.

-

Required Methods§

Required Methods§

source

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source

fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

source

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result.

Neither result nor r must be aligned.

source

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the result to result.

Neither result, s, nor r must be aligned.

diff --git a/docs/algebra/algebra/algebra_trait/trait.UnstableAlgebra.html b/docs/algebra/algebra/algebra_trait/trait.UnstableAlgebra.html index c2554c01a..be3f3b820 100644 --- a/docs/algebra/algebra/algebra_trait/trait.UnstableAlgebra.html +++ b/docs/algebra/algebra/algebra_trait/trait.UnstableAlgebra.html @@ -1,4 +1,4 @@ -UnstableAlgebra in algebra::algebra::algebra_trait - Rust +UnstableAlgebra in algebra::algebra::algebra_trait - Rust @@ -23,94 +23,94 @@ }); -
pub trait UnstableAlgebra: Algebra {
+
pub trait UnstableAlgebra: Algebra {
     // Required methods
-    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
+    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
     fn multiply_basis_elements_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r_index: usize,
-        s_degree: i32,
-        s_index: usize,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r_index: usize,
+        s_degree: i32,
+        s_index: usize,
+        excess: i32
     );
 
     // Provided methods
     fn multiply_basis_element_by_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r_idx: usize,
-        s_degree: i32,
-        s: Slice<'_>,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r_idx: usize,
+        s_degree: i32,
+        s: Slice<'_>,
+        excess: i32
     ) { ... }
     fn multiply_element_by_basis_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r: Slice<'_>,
-        s_degree: i32,
-        s_idx: usize,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r: Slice<'_>,
+        s_degree: i32,
+        s_idx: usize,
+        excess: i32
     ) { ... }
     fn multiply_element_by_element_unstable(
         &self,
-        result: SliceMut<'_>,
-        coeff: u32,
-        r_degree: i32,
-        r: Slice<'_>,
-        s_degree: i32,
-        s: Slice<'_>,
-        excess: i32
+        result: SliceMut<'_>,
+        coeff: u32,
+        r_degree: i32,
+        r: Slice<'_>,
+        s_degree: i32,
+        s: Slice<'_>,
+        excess: i32
     ) { ... }
-}

Required Methods§

Required Methods§

source

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source

fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

Provided Methods§

source

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of a basis element r and a general element s, and adds the result to result.

Neither result nor s must be aligned.

source

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result.

Neither result nor r must be aligned.

source

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the result to result.

Neither result, s, nor r must be aligned.

-

Implementors§

\ No newline at end of file +

Implementors§

\ No newline at end of file diff --git a/docs/algebra/algebra/bialgebra_trait/index.html b/docs/algebra/algebra/bialgebra_trait/index.html index 459f23d65..a9f0de0ed 100644 --- a/docs/algebra/algebra/bialgebra_trait/index.html +++ b/docs/algebra/algebra/bialgebra_trait/index.html @@ -1,4 +1,4 @@ -algebra::algebra::bialgebra_trait - Rust +algebra::algebra::bialgebra_trait - Rust @@ -23,5 +23,5 @@ }); -

Traits

\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/constant.MAX_XI_TAU.html b/docs/algebra/algebra/combinatorics/constant.MAX_XI_TAU.html index 86769d6a1..f52af9128 100644 --- a/docs/algebra/algebra/combinatorics/constant.MAX_XI_TAU.html +++ b/docs/algebra/algebra/combinatorics/constant.MAX_XI_TAU.html @@ -1,4 +1,4 @@ -MAX_XI_TAU in algebra::algebra::combinatorics - Rust +MAX_XI_TAU in algebra::algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
pub const MAX_XI_TAU: usize = MAX_MULTINOMIAL_LEN; // 10usize
\ No newline at end of file +
pub const MAX_XI_TAU: usize = MAX_MULTINOMIAL_LEN; // 10usize
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/constant.TAU_DEGREES.html b/docs/algebra/algebra/combinatorics/constant.TAU_DEGREES.html index 156322fde..6b49b0650 100644 --- a/docs/algebra/algebra/combinatorics/constant.TAU_DEGREES.html +++ b/docs/algebra/algebra/combinatorics/constant.TAU_DEGREES.html @@ -1,4 +1,4 @@ -TAU_DEGREES in algebra::algebra::combinatorics - Rust +TAU_DEGREES in algebra::algebra::combinatorics - Rust @@ -23,6 +23,6 @@ }); -
const TAU_DEGREES: [[i32; 10]; 8];
Expand description

If p is the nth prime, then TAU_DEGREES[n][i] is the degree of $τ_i$ at the prime p. Its value is +

const TAU_DEGREES: [[i32; 10]; 8];
Expand description

If p is the nth prime, then TAU_DEGREES[n][i] is the degree of $τ_i$ at the prime p. Its value is nonsense at the prime 2

\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/constant.XI_DEGREES.html b/docs/algebra/algebra/combinatorics/constant.XI_DEGREES.html index 4da3584cf..1a6a2a751 100644 --- a/docs/algebra/algebra/combinatorics/constant.XI_DEGREES.html +++ b/docs/algebra/algebra/combinatorics/constant.XI_DEGREES.html @@ -1,4 +1,4 @@ -XI_DEGREES in algebra::algebra::combinatorics - Rust +XI_DEGREES in algebra::algebra::combinatorics - Rust @@ -23,6 +23,6 @@ }); -
const XI_DEGREES: [[i32; 10]; 8];
Expand description

If p is the nth prime, then XI_DEGREES[n][i - 1] is the degree of $ξ_i$ at the prime p divided by +

const XI_DEGREES: [[i32; 10]; 8];
Expand description

If p is the nth prime, then XI_DEGREES[n][i - 1] is the degree of $ξ_i$ at the prime p divided by q, where q = 2p - 2 if p != 2 and 1 if p = 2.

\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/fn.adem_relation_coefficient.html b/docs/algebra/algebra/combinatorics/fn.adem_relation_coefficient.html index eef59d2e0..06a133434 100644 --- a/docs/algebra/algebra/combinatorics/fn.adem_relation_coefficient.html +++ b/docs/algebra/algebra/combinatorics/fn.adem_relation_coefficient.html @@ -1,4 +1,4 @@ -adem_relation_coefficient in algebra::algebra::combinatorics - Rust +adem_relation_coefficient in algebra::algebra::combinatorics - Rust @@ -23,11 +23,11 @@ }); -
pub fn adem_relation_coefficient(
-    p: ValidPrime,
-    x: u32,
-    y: u32,
-    j: u32,
-    e1: u32,
-    e2: u32
-) -> u32
\ No newline at end of file +
pub fn adem_relation_coefficient(
+    p: ValidPrime,
+    x: u32,
+    y: u32,
+    j: u32,
+    e1: u32,
+    e2: u32
+) -> u32
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/fn.inadmissible_pairs.html b/docs/algebra/algebra/combinatorics/fn.inadmissible_pairs.html index c8eb6cef0..cd92f8fc5 100644 --- a/docs/algebra/algebra/combinatorics/fn.inadmissible_pairs.html +++ b/docs/algebra/algebra/combinatorics/fn.inadmissible_pairs.html @@ -1,4 +1,4 @@ -inadmissible_pairs in algebra::algebra::combinatorics - Rust +inadmissible_pairs in algebra::algebra::combinatorics - Rust @@ -23,8 +23,8 @@ }); -
pub fn inadmissible_pairs(
-    p: ValidPrime,
-    generic: bool,
-    degree: i32
-) -> Vec<(u32, u32, u32)>
\ No newline at end of file +
pub fn inadmissible_pairs(
+    p: ValidPrime,
+    generic: bool,
+    degree: i32
+) -> Vec<(u32, u32, u32)>
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/fn.tau_degrees.html b/docs/algebra/algebra/combinatorics/fn.tau_degrees.html index 01b2d56ec..667704d5d 100644 --- a/docs/algebra/algebra/combinatorics/fn.tau_degrees.html +++ b/docs/algebra/algebra/combinatorics/fn.tau_degrees.html @@ -1,4 +1,4 @@ -tau_degrees in algebra::algebra::combinatorics - Rust +tau_degrees in algebra::algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
pub fn tau_degrees(p: ValidPrime) -> &'static [i32]
\ No newline at end of file +
pub fn tau_degrees(p: ValidPrime) -> &'static [i32]
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/fn.xi_degrees.html b/docs/algebra/algebra/combinatorics/fn.xi_degrees.html index c533a798f..62dce8333 100644 --- a/docs/algebra/algebra/combinatorics/fn.xi_degrees.html +++ b/docs/algebra/algebra/combinatorics/fn.xi_degrees.html @@ -1,4 +1,4 @@ -xi_degrees in algebra::algebra::combinatorics - Rust +xi_degrees in algebra::algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
pub fn xi_degrees(p: ValidPrime) -> &'static [i32]
\ No newline at end of file +
pub fn xi_degrees(p: ValidPrime) -> &'static [i32]
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/index.html b/docs/algebra/algebra/combinatorics/index.html index 1b0a47243..fdbfe914a 100644 --- a/docs/algebra/algebra/combinatorics/index.html +++ b/docs/algebra/algebra/combinatorics/index.html @@ -1,4 +1,4 @@ -algebra::algebra::combinatorics - Rust +algebra::algebra::combinatorics - Rust @@ -23,6 +23,6 @@ }); -

Structs

Constants

1.0.0 · source§

fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.6.0 · source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · source§

fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · source§

fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · source§

fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · source§

fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are equal to those of -another. Read more
source§

fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
1.5.0 · source§

fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are not equal to those of -another. Read more
1.5.0 · source§

fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
1.5.0 · source§

fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
1.5.0 · source§

fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
1.5.0 · source§

fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
source§

fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given comparator function. Read more
source§

fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for PartitionIterator<'a>

§

impl<'a> Send for PartitionIterator<'a>

§

impl<'a> Sync for PartitionIterator<'a>

§

impl<'a> Unpin for PartitionIterator<'a>

§

impl<'a> UnwindSafe for PartitionIterator<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+As soon as an order can be determined, the evaluation stops and a result is returned. Read more
source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
source§

fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · source§

fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · source§

fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · source§

fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · source§

fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · source§

fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
source§

fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given comparator function. Read more
source§

fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for PartitionIterator<'a>

§

impl<'a> Send for PartitionIterator<'a>

§

impl<'a> Sync for PartitionIterator<'a>

§

impl<'a> Unpin for PartitionIterator<'a>

§

impl<'a> UnwindSafe for PartitionIterator<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<I> IntoIterator for Iwhere - I: Iterator,

§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
§

type IntoIter = I

Which kind of iterator are we turning this into?
const: unstable · source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
source§

impl<T> Itertools for Twhere - T: Iterator + ?Sized,

source§

fn interleave<J>( +From<T> for U chooses to do.

+

source§

impl<I> IntoIterator for Iwhere + I: Iterator,

§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
§

type IntoIter = I

Which kind of iterator are we turning this into?
const: unstable · source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
source§

impl<T> Itertools for Twhere + T: Iterator + ?Sized,

source§

fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

Alternate elements from two iterators until both have run out. Read more
source§

fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

Alternate elements from two iterators until both have run out. Read more
source§

fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
Alternate elements from two iterators until at least one of them has run out. Read more
source§

fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
source§

fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
source§

fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
source§

fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
source§

fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
source§

fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
source§

fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
source§

fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

Return an iterable that can chunk the iterator. Read more
source§

fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

source§

fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

Return an iterable that can chunk the iterator. Read more
source§

fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
source§

fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
source§

fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
source§

fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

Split into an iterator pair that both yield all elements from -the original iterator. Read more
source§

fn step(self, n: usize) -> Step<Self>where - Self: Sized,

👎Deprecated since 0.8.0: Use std .step_by() instead
Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
Split into an iterator pair that both yield all elements from +the original iterator. Read more
source§

fn step(self, n: usize) -> Step<Self>where + Self: Sized,

👎Deprecated since 0.8.0: Use std .step_by() instead
Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
source§

fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

Convert each item of the iterator using the Into trait. Read more
source§

fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

Convert each item of the iterator using the Into trait. Read more
source§

fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

👎Deprecated since 0.10.0: Use .map_ok() instead
source§

fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
👎Deprecated since 0.10.0: Use .map_ok() instead
source§

fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
source§

fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
source§

fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
source§

fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
source§

fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
source§

fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
source§

fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
source§

fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
source§

fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
source§

fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
source§

fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
source§

fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
source§

fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
source§

fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
source§

fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
source§

fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
source§

fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
source§

fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
source§

fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
source§

fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
source§

fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
source§

fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
source§

fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
source§

fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
source§

fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
source§

fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
source§

fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
source§

fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
source§

fn with_position(self) -> WithPosition<Self>where - Self: Sized,

Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
source§

fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
source§

fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
source§

fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
source§

fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
source§

fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

source§

fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
source§

fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

Find the position and value of the first element satisfying a predicate. Read more
source§

fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the last element, if any. Read more
source§

fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the first element, if any. Read more
source§

fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

Returns true if the given item is present in this iterator. Read more
source§

fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

Check whether all elements compare equal. Read more
source§

fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
source§

fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

Consume the last n elements from the iterator eagerly, +(up to 12). Read more
source§

fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

Find the position and value of the first element satisfying a predicate. Read more
source§

fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the last element, if any. Read more
source§

fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the first element, if any. Read more
source§

fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

Returns true if the given item is present in this iterator. Read more
source§

fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

Check whether all elements compare equal. Read more
source§

fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
source§

fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
source§

fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

👎Deprecated since 0.8.0: Use .for_each() instead
Run the closure f eagerly on each element of the iterator. Read more
source§

fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

Combine all an iterator’s elements into one element by using Extend. Read more
source§

fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

.collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
source§

fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

.try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
source§

fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

👎Deprecated since 0.8.0: Use .for_each() instead
Run the closure f eagerly on each element of the iterator. Read more
source§

fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

Combine all an iterator’s elements into one element by using Extend. Read more
source§

fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

.collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
source§

fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

.try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
source§

fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
source§

fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

Combine all iterator elements into one String, separated by sep. Read more
source§

fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

Format all iterator elements, separated by sep. Read more
source§

fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

Format all iterator elements, separated by sep. Read more
source§

fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

👎Deprecated since 0.10.0: Use .fold_ok() instead
source§

fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

Fold Result values from an iterator. Read more
source§

fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

Fold Option values from an iterator. Read more
source§

fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

👎Deprecated since 0.10.2: Use Iterator::reduce instead
Accumulator of the elements in the iterator. Read more
source§

fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

Accumulate the elements in the iterator in a tree-like manner. Read more
source§

fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

An iterator method that applies a function, producing a single, final value. Read more
source§

fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

Iterate over the entire iterator and add all the elements. Read more
source§

fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

Iterate over the entire iterator and multiply all the elements. Read more
source§

fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
source§

fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort the k smallest elements into a new iterator, in ascending order. Read more
source§

fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
source§

fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
source§

fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

Return the minimum and maximum elements in the iterator. Read more
source§

fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
source§

fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
source§

fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

Return the position of the maximum element in the iterator. Read more
source§

fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
source§

fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
source§

fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

Return the position of the minimum element in the iterator. Read more
source§

fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
source§

fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
source§

fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

Return the positions of the minimum and maximum elements in -the iterator. Read more
source§

fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
source§

fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
source§

fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
source§

fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

Combine all iterator elements into one String, separated by sep. Read more
source§

fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

Format all iterator elements, separated by sep. Read more
source§

fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

Format all iterator elements, separated by sep. Read more
source§

fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

👎Deprecated since 0.10.0: Use .fold_ok() instead
source§

fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

Fold Result values from an iterator. Read more
source§

fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

Fold Option values from an iterator. Read more
source§

fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

👎Deprecated since 0.10.2: Use Iterator::reduce instead
Accumulator of the elements in the iterator. Read more
source§

fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

Accumulate the elements in the iterator in a tree-like manner. Read more
source§

fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

An iterator method that applies a function, producing a single, final value. Read more
source§

fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

Iterate over the entire iterator and add all the elements. Read more
source§

fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

Iterate over the entire iterator and multiply all the elements. Read more
source§

fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
source§

fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort the k smallest elements into a new iterator, in ascending order. Read more
source§

fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
source§

fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
source§

fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

Return the minimum and maximum elements in the iterator. Read more
source§

fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
source§

fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
source§

fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

Return the position of the maximum element in the iterator. Read more
source§

fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
source§

fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
source§

fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

Return the position of the minimum element in the iterator. Read more
source§

fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
source§

fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
source§

fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

Return the positions of the minimum and maximum elements in +the iterator. Read more
source§

fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
source§

fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
source§

fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
source§

fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
source§

fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
source§

fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

An iterator adaptor that allows the user to peek at multiple .next() -values without advancing the base iterator. Read more
source§

fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

Converts an iterator of tuples into a tuple of containers. Read more
source§

impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere - IT: Iterator<Item = (A, B)>, - FromA: Default + Extend<A>, - FromB: Default + Extend<B>,

source§

fn multiunzip(self) -> (FromA, FromB)

Unzip this iterator into multiple collections.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + Self: Sized,
An iterator adaptor that allows the user to peek at multiple .next() +values without advancing the base iterator. Read more
source§

fn multiunzip<FromI>(self) -> FromIwhere + Self: Sized + MultiUnzip<FromI>,

Converts an iterator of tuples into a tuple of containers. Read more
source§

impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere + IT: Iterator<Item = (A, B)>, + FromA: Default + Extend<A>, + FromB: Default + Extend<B>,

source§

fn multiunzip(self) -> (FromA, FromB)

Unzip this iterator into multiple collections.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html b/docs/algebra/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html index 0323d1073..87e3dd820 100644 --- a/docs/algebra/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html +++ b/docs/algebra/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html @@ -1,4 +1,4 @@ -TruncatedPolynomialMonomialBasis in algebra::algebra::combinatorics - Rust +TruncatedPolynomialMonomialBasis in algebra::algebra::combinatorics - Rust @@ -23,23 +23,23 @@ }); -
pub struct TruncatedPolynomialMonomialBasis {
-    p: ValidPrime,
-    pub gens: OnceVec<(usize, usize)>,
-    pub gen_degrees: OnceVec<i32>,
-    parts_by_max: OnceVec<Vec<Vec<FpVector>>>,
-    pub parts: OnceVec<Vec<FpVector>>,
-}

Fields§

§p: ValidPrime§gens: OnceVec<(usize, usize)>

degree => (first_index, number_of_gens)

-
§gen_degrees: OnceVec<i32>

index ==> degree

-
§parts_by_max: OnceVec<Vec<Vec<FpVector>>>

degree => max_part => list of partitions with maximum part max_part

-
§parts: OnceVec<Vec<FpVector>>

Implementations§

source§

impl TruncatedPolynomialMonomialBasis

source

pub fn new(p: ValidPrime) -> Self

source

pub fn generators(&self, degree: i32) -> usize

source

pub fn generators_up_to_degree(&self, degree: i32) -> usize

source

pub fn gen_deg_idx_to_internal_idx(&self, degree: i32, idx: usize) -> usize

source

pub fn internal_idx_to_gen_deg(&self, idx: usize) -> (i32, usize)

source

pub fn parts(&self, degree: i32) -> &Vec<FpVector>

source

pub fn add_gens_and_calculate_parts(&self, degree: i32, new_gens: usize)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
pub struct TruncatedPolynomialMonomialBasis {
+    p: ValidPrime,
+    pub gens: OnceVec<(usize, usize)>,
+    pub gen_degrees: OnceVec<i32>,
+    parts_by_max: OnceVec<Vec<Vec<FpVector>>>,
+    pub parts: OnceVec<Vec<FpVector>>,
+}

Fields§

§p: ValidPrime§gens: OnceVec<(usize, usize)>

degree => (first_index, number_of_gens)

+
§gen_degrees: OnceVec<i32>

index ==> degree

+
§parts_by_max: OnceVec<Vec<Vec<FpVector>>>

degree => max_part => list of partitions with maximum part max_part

+
§parts: OnceVec<Vec<FpVector>>

Implementations§

source§

impl TruncatedPolynomialMonomialBasis

source

pub fn new(p: ValidPrime) -> Self

source

pub fn generators(&self, degree: i32) -> usize

source

pub fn generators_up_to_degree(&self, degree: i32) -> usize

source

pub fn gen_deg_idx_to_internal_idx(&self, degree: i32, idx: usize) -> usize

source

pub fn internal_idx_to_gen_deg(&self, idx: usize) -> (i32, usize)

source

pub fn parts(&self, degree: i32) -> &Vec<FpVector>

source

pub fn add_gens_and_calculate_parts(&self, degree: i32, new_gens: usize)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/field/index.html b/docs/algebra/algebra/field/index.html index cad14023d..3b3157b04 100644 --- a/docs/algebra/algebra/field/index.html +++ b/docs/algebra/algebra/field/index.html @@ -1,4 +1,4 @@ -algebra::algebra::field - Rust +algebra::algebra::field - Rust @@ -23,5 +23,5 @@ }); -

Module algebra::algebra::field

source ·
Expand description

Finite fields over a prime.

+

Module algebra::algebra::field

source ·
Expand description

Finite fields over a prime.

Structs

\ No newline at end of file diff --git a/docs/algebra/algebra/field/struct.Field.html b/docs/algebra/algebra/field/struct.Field.html index 23a94ec70..de317ffd8 100644 --- a/docs/algebra/algebra/field/struct.Field.html +++ b/docs/algebra/algebra/field/struct.Field.html @@ -1,4 +1,4 @@ -Field in algebra::algebra::field - Rust +Field in algebra::algebra::field - Rust @@ -23,108 +23,108 @@ }); -

Struct algebra::algebra::field::Field

source ·
pub struct Field {
-    prime: ValidPrime,
+

Struct algebra::algebra::field::Field

source ·
pub struct Field {
+    prime: ValidPrime,
 }
Expand description

$\mathbb{F}_p$, viewed as an Algebra over itself.

As an Algebra, a field is one-dimensional, with basis element 1. It is also trivially a coalgebra via the trivial diagonal comultiplication, and thus a Bialgebra.

-

Fields§

§prime: ValidPrime

Implementations§

source§

impl Field

source

pub fn new(p: ValidPrime) -> Self

Returns a new Field over the given prime p.

-

Trait Implementations§

source§

impl Algebra for Field

source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn compute_basis(&self, _degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( +

Fields§

§prime: ValidPrime

Implementations§

source§

impl Field

source

pub fn new(p: ValidPrime) -> Self

Returns a new Field over the given prime p.

+

Trait Implementations§

source§

impl Algebra for Field

source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn compute_basis(&self, _degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( &self, - result: SliceMut<'_>, - coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + result: SliceMut<'_>, + coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

Computes the product r * s of two basis elements, and adds the -result to result. Read more
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

Converts a basis element into a string for display.
source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

Converts a basis element into a string for display.
source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is -implemented). Read more
source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the +implemented). Read more
source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have disasterous consequences. So we store the magic in the save files. Read more
source§

fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of two general elements, and adds the result to result. Read more
source§

impl Bialgebra for Field

source§

fn coproduct( &self, - _op_deg: i32, - _op_idx: usize -) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
source§

impl Display for Field

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Field

§

impl Send for Field

§

impl Sync for Field

§

impl Unpin for Field

§

impl UnwindSafe for Field

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ _op_deg: i32, + _op_idx: usize +) -> Vec<(i32, usize, i32, usize)>
Computes a coproduct $\Delta(x)$, expressed as Read more
source§

fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
source§

impl Display for Field

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Field

§

impl Send for Field

§

impl Sync for Field

§

impl Unpin for Field

§

impl UnwindSafe for Field

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

+From<T> for U chooses to do.

source§

impl<A> MuAlgebra<false> for Awhere - A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/index.html b/docs/algebra/algebra/index.html index 4f3b349c2..0be362602 100644 --- a/docs/algebra/algebra/index.html +++ b/docs/algebra/algebra/index.html @@ -1,4 +1,4 @@ -algebra::algebra - Rust +algebra::algebra - Rust @@ -23,7 +23,7 @@ }); -

Module algebra::algebra

source ·
Expand description

Traits describing algebras, and implementations thereof for different +

Module algebra::algebra

source ·
Expand description

Traits describing algebras, and implementations thereof for different representations of the Steenrod algebra.

Re-exports

Modules

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/struct.MilnorAlgebra.html b/docs/algebra/algebra/milnor_algebra/struct.MilnorAlgebra.html index ce60c5386..f2a48d9ce 100644 --- a/docs/algebra/algebra/milnor_algebra/struct.MilnorAlgebra.html +++ b/docs/algebra/algebra/milnor_algebra/struct.MilnorAlgebra.html @@ -1,4 +1,4 @@ -MilnorAlgebra in algebra::algebra::milnor_algebra - Rust +MilnorAlgebra in algebra::algebra::milnor_algebra - Rust @@ -23,290 +23,290 @@ }); -
pub struct MilnorAlgebra {
+
pub struct MilnorAlgebra {
     profile: MilnorProfile,
-    p: ValidPrime,
-    generic: bool,
-    unstable_enabled: bool,
-    ppart_table: OnceVec<Vec<PPart>>,
-    basis_table: OnceVec<Vec<MilnorBasisElement>>,
-    excess_table: OnceVec<Vec<usize>>,
-    basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>,
-    multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>,
-}

Fields§

§profile: MilnorProfile§p: ValidPrime§generic: bool§unstable_enabled: bool§ppart_table: OnceVec<Vec<PPart>>

This is a list of possible P(R) of each degree, where ppart_table[i] contains elements of + p: ValidPrime, + generic: bool, + unstable_enabled: bool, + ppart_table: OnceVec<Vec<PPart>>, + basis_table: OnceVec<Vec<MilnorBasisElement>>, + excess_table: OnceVec<Vec<usize>>, + basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>, + multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>, +}

Fields§

§profile: MilnorProfile§p: ValidPrime§generic: bool§unstable_enabled: bool§ppart_table: OnceVec<Vec<PPart>>

This is a list of possible P(R) of each degree, where ppart_table[i] contains elements of degree q * i.

-
§basis_table: OnceVec<Vec<MilnorBasisElement>>

A list of all basis elements of each degree, constructed from Self::ppart_table

-
§excess_table: OnceVec<Vec<usize>>§basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>

degree -> MilnorBasisElement -> index

-
§multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>

source_deg -> target_deg -> source_op -> target_op

-

Implementations§

source§

impl MilnorAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

source

pub fn new_with_profile( - p: ValidPrime, +

§basis_table: OnceVec<Vec<MilnorBasisElement>>

A list of all basis elements of each degree, constructed from Self::ppart_table

+
§excess_table: OnceVec<Vec<usize>>§basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>

degree -> MilnorBasisElement -> index

+
§multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>

source_deg -> target_deg -> source_op -> target_op

+

Implementations§

source§

impl MilnorAlgebra

source

pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

source

pub fn new_with_profile( + p: ValidPrime, profile: MilnorProfile, - unstable_enabled: bool -) -> Self

source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

pub fn profile(&self) -> &MilnorProfile

source

pub fn basis_element_from_index( + unstable_enabled: bool +) -> Self

source

pub fn generic(&self) -> bool

source

pub fn q(&self) -> i32

source

pub fn profile(&self) -> &MilnorProfile

source

pub fn basis_element_from_index( &self, - degree: i32, - idx: usize -) -> &MilnorBasisElement

source

pub fn try_basis_element_to_index( + degree: i32, + idx: usize +) -> &MilnorBasisElement

source

pub fn try_basis_element_to_index( &self, elt: &MilnorBasisElement -) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &MilnorBasisElement) -> usize

source

pub fn ppart_table(&self, t: i32) -> &[PPart]

Gives a list of PPart’s in degree t.

-
source§

impl MilnorAlgebra

source

fn compute_ppart(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_2(&self, max_degree: i32)

source

fn generate_excess_table(&self, max_degree: i32)

source§

impl MilnorAlgebra

source

fn try_beps_pn(&self, e: u32, x: PPartEntry) -> Option<(i32, usize)>

source

pub fn beps_pn(&self, e: u32, x: PPartEntry) -> (i32, usize)

Return the degree and index of $Q_1^e P(x)$.

-
source

fn multiply_qpart( +) -> Option<usize>

source

pub fn basis_element_to_index(&self, elt: &MilnorBasisElement) -> usize

source

pub fn ppart_table(&self, t: i32) -> &[PPart]

Gives a list of PPart’s in degree t.

+
source§

impl MilnorAlgebra

source

fn compute_ppart(&self, max_degree: i32)

source

fn generate_basis_generic(&self, max_degree: i32)

source

fn generate_basis_2(&self, max_degree: i32)

source

fn generate_excess_table(&self, max_degree: i32)

source§

impl MilnorAlgebra

source

fn try_beps_pn(&self, e: u32, x: PPartEntry) -> Option<(i32, usize)>

source

pub fn beps_pn(&self, e: u32, x: PPartEntry) -> (i32, usize)

Return the degree and index of $Q_1^e P(x)$.

+
source

fn multiply_qpart( &self, m1: &MilnorBasisElement, - f: u32 -) -> Vec<(u32, MilnorBasisElement)>

source

pub fn multiply( + f: u32 +) -> Vec<(u32, MilnorBasisElement)>

source

pub fn multiply( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, m2: &MilnorBasisElement -)

source

pub fn multiply_with_allocation( +)

source

pub fn multiply_with_allocation( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, m2: &MilnorBasisElement, - excess: i32, + excess: i32, allocation: PPartAllocation -) -> PPartAllocation

source

pub fn multiply_basis_by_element( +) -> PPartAllocation

source

pub fn multiply_basis_by_element( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, - s_deg: i32, - s: Slice<'_> -)

source

fn multiply_basis_by_element_with_allocation( + s_deg: i32, + s: Slice<'_> +)

source

fn multiply_basis_by_element_with_allocation( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, - s_deg: i32, - s: Slice<'_>, + s_deg: i32, + s: Slice<'_>, allocation: PPartAllocation -) -> PPartAllocation

source§

impl MilnorAlgebra

source§

impl MilnorAlgebra

source

fn decompose_basis_element_qpart( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_ppart( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

source

fn decompose_basis_element_ppart( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

source§

impl MilnorAlgebra

source

fn increment_p_part(element: &mut PPart, max: &[PPartEntry]) -> bool

Returns true if the new element is not within the bounds

-

Trait Implementations§

source§

impl Algebra for MilnorAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
source§

impl MilnorAlgebra

source

fn increment_p_part(element: &mut PPart, max: &[PPartEntry]) -> bool

Returns true if the new element is not within the bounds

+

Trait Implementations§

source§

impl Algebra for MilnorAlgebra

source§

fn prefix(&self) -> &str

A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
source§

fn magic(&self) -> u32

A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coef: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize +disasterous consequences. So we store the magic in the save files. Read more

source§

fn prime(&self) -> ValidPrime

Returns the prime the algebra is over.
source§

fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

Returns a list of filtration-one elements in $Ext(k, k)$. Read more
source§

fn compute_basis(&self, max_degree: i32)

Computes basis elements up to and including degree. Read more
source§

fn dimension(&self, degree: i32) -> usize

Returns the dimension of the algebra in degree degree.
source§

fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coef: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

Computes the product r * s of two basis elements, and adds the -result to result. Read more
source§

fn multiply_basis_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> +result to result. Read more

source§

fn multiply_basis_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
source§

fn multiply_element_by_element( - &self, - res: SliceMut<'_>, - coef: u32, - r_deg: i32, - r: Slice<'_>, - s_deg: i32, - s: Slice<'_> +result to result. Read more

source§

fn multiply_element_by_element( + &self, + res: SliceMut<'_>, + coef: u32, + r_deg: i32, + r: Slice<'_>, + s_deg: i32, + s: Slice<'_> )

Computes the product r * s of two general elements, and adds the -result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
source§

fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

Converts a basis element into a string for display.
source§

fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
source§

fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for MilnorAlgebra

source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
source§

impl Display for MilnorAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for MilnorAlgebra

source§

fn generator_to_string(&self, degree: i32, idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( +result to result. Read more

source§

fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

Converts a general element into a string for display.
source§

impl Bialgebra for MilnorAlgebra

source§

fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

Computes a coproduct $\Delta(x)$, expressed as Read more
source§

fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
source§

impl Display for MilnorAlgebra

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GeneratedAlgebra for MilnorAlgebra

source§

fn generator_to_string(&self, degree: i32, idx: usize) -> String

Returns the name of a generator. Read more
source§

fn generators(&self, degree: i32) -> Vec<usize>

Return generators in degree. Read more
source§

fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators. Read more
source§

fn generating_relations( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

Decomposes an element into generators. Read more
source§

fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

Returns relations that the algebra wants checked to ensure the consistency of module. Read more
source§

impl MilnorAlgebraT for MilnorAlgebra

source§

impl PairAlgebra for MilnorAlgebra

source§

fn finalize_element(elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

Returns relations that the algebra wants checked to ensure the consistency of module. Read more
source§

impl MilnorAlgebraT for MilnorAlgebra

source§

impl PairAlgebra for MilnorAlgebra

source§

fn finalize_element(elt: &mut Self::Element)

Assert that elt is in the image of the differential. Drop the data recording the complement of the image of the differential.

§

type Element = MilnorPairElement

An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn new_pair_element(&self, degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn element_is_zero(elt: &Self::Element) -> bool

source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
source§

fn new_pair_element(&self, degree: i32) -> Self::Element

Create a new zero element in the given degree.
source§

fn element_is_zero(elt: &Self::Element) -> bool

source§

fn p_tilde(&self) -> usize

The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.
source§

fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.
source§

fn a_multiply( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element )

Compute $A(r, s)$ and write the result to result.
source§

fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

source§

fn element_from_bytes( + buffer: &mut impl Write +) -> Result<()>

source§

fn element_from_bytes( &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

source§

fn sigma_multiply( + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

source§

fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for MilnorAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
source§

impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

Performs the conversion.
source§

impl UnstableAlgebra for MilnorAlgebra

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+result to result. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

+From<T> for U chooses to do.

source§

impl<A> MuAlgebra<false> for Awhere - A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

source§

fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

Computes the product r * s of two general elements, and adds the result to result. Read more
source§

impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

source§

fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

source§

fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

source§

fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

source§

fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
source§

fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

Computes the product r * s of two general elements, and adds the -result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +result to result. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/struct.MilnorBasisElement.html b/docs/algebra/algebra/milnor_algebra/struct.MilnorBasisElement.html index 23483a393..14b3bbbea 100644 --- a/docs/algebra/algebra/milnor_algebra/struct.MilnorBasisElement.html +++ b/docs/algebra/algebra/milnor_algebra/struct.MilnorBasisElement.html @@ -1,4 +1,4 @@ -MilnorBasisElement in algebra::algebra::milnor_algebra - Rust +MilnorBasisElement in algebra::algebra::milnor_algebra - Rust @@ -23,32 +23,32 @@ }); -
pub struct MilnorBasisElement {
-    pub q_part: u32,
+
pub struct MilnorBasisElement {
+    pub q_part: u32,
     pub p_part: PPart,
-    pub degree: i32,
-}

Fields§

§q_part: u32§p_part: PPart§degree: i32

Implementations§

source§

impl MilnorBasisElement

source

fn from_p(p_part: PPart, degree: i32) -> Self

source

fn excess(&self, p: ValidPrime) -> u32

source

pub fn clone_into(&self, other: &mut Self)

source

pub fn compute_degree(&mut self, p: ValidPrime)

Update the degree component to the correct degree

-

Trait Implementations§

source§

impl Clone for MilnorBasisElement

source§

fn clone(&self) -> MilnorBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MilnorBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MilnorBasisElement

source§

fn default() -> MilnorBasisElement

Returns the “default value” for a type. Read more
source§

impl Display for MilnorBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for MilnorBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<MilnorBasisElement> for MilnorBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for MilnorBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere - T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+ pub degree: i32, +}

Fields§

§q_part: u32§p_part: PPart§degree: i32

Implementations§

source§

impl MilnorBasisElement

source

fn from_p(p_part: PPart, degree: i32) -> Self

source

fn excess(&self, p: ValidPrime) -> u32

source

pub fn clone_into(&self, other: &mut Self)

source

pub fn compute_degree(&mut self, p: ValidPrime)

Update the degree component to the correct degree

+

Trait Implementations§

source§

impl Clone for MilnorBasisElement

source§

fn clone(&self) -> MilnorBasisElement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MilnorBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MilnorBasisElement

source§

fn default() -> MilnorBasisElement

Returns the “default value” for a type. Read more
source§

impl Display for MilnorBasisElement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for MilnorBasisElement

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<MilnorBasisElement> for MilnorBasisElement

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MilnorBasisElement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere + T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/struct.MilnorProfile.html b/docs/algebra/algebra/milnor_algebra/struct.MilnorProfile.html index 1d0c850d9..7e2707751 100644 --- a/docs/algebra/algebra/milnor_algebra/struct.MilnorProfile.html +++ b/docs/algebra/algebra/milnor_algebra/struct.MilnorProfile.html @@ -1,4 +1,4 @@ -MilnorProfile in algebra::algebra::milnor_algebra - Rust +MilnorProfile in algebra::algebra::milnor_algebra - Rust @@ -23,34 +23,34 @@ }); -
pub struct MilnorProfile {
-    pub truncated: bool,
-    pub q_part: u32,
+
pub struct MilnorProfile {
+    pub truncated: bool,
+    pub q_part: u32,
     pub p_part: PPart,
-}

Fields§

§truncated: bool

If true, unspecified p_part entries will be 0. Otherwise they will be infinity.

-
§q_part: u32

A bitmask indicating which of the Q_k we want to include (1 = include). Defaults to !0. +}

Fields§

§truncated: bool

If true, unspecified p_part entries will be 0. Otherwise they will be infinity.

+
§q_part: u32

A bitmask indicating which of the Q_k we want to include (1 = include). Defaults to !0. This is only relevant at odd primes.

§p_part: PPart

The profile function for the Q part.

-

Implementations§

source§

impl MilnorProfile

source

pub fn is_trivial(&self) -> bool

source

pub fn get_p_part(&self, i: usize) -> PPartEntry

source

pub fn is_valid(&self) -> bool

Checks whether the profile function is valid

-
source

pub fn is_an(&self, generic: bool) -> bool

Whether the profile is that of A(n). This is relevant since A(n) is generated by P(p^n) and +

Implementations§

source§

impl MilnorProfile

source

pub fn is_trivial(&self) -> bool

source

pub fn get_p_part(&self, i: usize) -> PPartEntry

source

pub fn is_valid(&self) -> bool

Checks whether the profile function is valid

+
source

pub fn is_an(&self, generic: bool) -> bool

Whether the profile is that of A(n). This is relevant since A(n) is generated by P(p^n) and β but a general subalgebra is not.

-

Trait Implementations§

source§

impl Debug for MilnorProfile

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MilnorProfile

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for MilnorProfile

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq<MilnorProfile> for MilnorProfile

source§

fn eq(&self, other: &MilnorProfile) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for MilnorProfile

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for MilnorProfile

source§

impl StructuralEq for MilnorProfile

source§

impl StructuralPartialEq for MilnorProfile

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Trait Implementations§

source§

impl Debug for MilnorProfile

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MilnorProfile

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for MilnorProfile

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl PartialEq<MilnorProfile> for MilnorProfile

source§

fn eq(&self, other: &MilnorProfile) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for MilnorProfile

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for MilnorProfile

source§

impl StructuralEq for MilnorProfile

source§

impl StructuralPartialEq for MilnorProfile

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/struct.PPartAllocation.html b/docs/algebra/algebra/milnor_algebra/struct.PPartAllocation.html index 150639b42..63200cfe4 100644 --- a/docs/algebra/algebra/milnor_algebra/struct.PPartAllocation.html +++ b/docs/algebra/algebra/milnor_algebra/struct.PPartAllocation.html @@ -1,4 +1,4 @@ -PPartAllocation in algebra::algebra::milnor_algebra - Rust +PPartAllocation in algebra::algebra::milnor_algebra - Rust @@ -23,23 +23,23 @@ }); -
pub struct PPartAllocation {
+
pub struct PPartAllocation {
     m: Matrix2D,
     diagonal: PPart,
     p_part: PPart,
 }
Expand description

The parts of a PPartMultiplier that involve heap allocation. This lets us reuse the allocation across multiple different multipliers. Reusing the whole PPartMultiplier is finicky but doable due to lifetime issues, but it appears to be less performant.

-

Fields§

§m: Matrix2D§diagonal: PPart§p_part: PPart

Implementations§

source§

impl PPartAllocation

source

pub fn with_capacity(n: usize) -> Self

This creates a PPartAllocation with enough capacity to handle mulitiply elements with +

Fields§

§m: Matrix2D§diagonal: PPart§p_part: PPart

Implementations§

source§

impl PPartAllocation

source

pub fn with_capacity(n: usize) -> Self

This creates a PPartAllocation with enough capacity to handle mulitiply elements with of total degree < 2^n - ε at p = 2.

-
source

pub fn with_local(f: impl FnOnce(Self) -> Self)

Trait Implementations§

source§

impl Default for PPartAllocation

source§

fn default() -> PPartAllocation

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+
source

pub fn with_local(f: impl FnOnce(Self) -> Self)

Trait Implementations§

source§

impl Default for PPartAllocation

source§

fn default() -> PPartAllocation

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/struct.PPartMultiplier.html b/docs/algebra/algebra/milnor_algebra/struct.PPartMultiplier.html index 4b28141b8..60c84a02a 100644 --- a/docs/algebra/algebra/milnor_algebra/struct.PPartMultiplier.html +++ b/docs/algebra/algebra/milnor_algebra/struct.PPartMultiplier.html @@ -1,4 +1,4 @@ -PPartMultiplier in algebra::algebra::milnor_algebra - Rust +PPartMultiplier in algebra::algebra::milnor_algebra - Rust @@ -23,24 +23,24 @@ }); -
pub struct PPartMultiplier<'a, const MOD4: bool> {
-    p: ValidPrime,
+
pub struct PPartMultiplier<'a, const MOD4: bool> {
+    p: ValidPrime,
     M: Matrix2D,
     r: &'a PPart,
-    rows: usize,
-    cols: usize,
-    diag_num: usize,
-    init: bool,
+    rows: usize,
+    cols: usize,
+    diag_num: usize,
+    init: bool,
     pub ans: MilnorBasisElement,
     diagonal: PPart,
-}

Fields§

§p: ValidPrime§M: Matrix2D§r: &'a PPart§rows: usize§cols: usize§diag_num: usize§init: bool§ans: MilnorBasisElement§diagonal: PPart

Implementations§

source§

impl<'a, const MOD4: bool> PPartMultiplier<'a, MOD4>

source

fn prime(&self) -> ValidPrime

source

pub fn new_from_allocation( - p: ValidPrime, +}

Fields§

§p: ValidPrime§M: Matrix2D§r: &'a PPart§rows: usize§cols: usize§diag_num: usize§init: bool§ans: MilnorBasisElement§diagonal: PPart

Implementations§

source§

impl<'a, const MOD4: bool> PPartMultiplier<'a, MOD4>

source

fn prime(&self) -> ValidPrime

source

pub fn new_from_allocation( + p: ValidPrime, r: &'a PPart, s: &'a PPart, allocation: PPartAllocation, - q_part: u32, - degree: i32 -) -> Self

source

pub fn into_allocation(self) -> PPartAllocation

source

fn next_val( + q_part: u32, + degree: i32 +) -> Self

source

pub fn into_allocation(self) -> PPartAllocation

source

fn next_val( &self, sum: PPartEntry, k: PPartEntry, @@ -48,7 +48,7 @@ ) -> PPartEntry

This compute the first l > k such that (sum + l) choose l != 0 mod p, stopping if we reach max + 1. This is useful for incrementing the matrix.

TODO: Improve odd prime performance

-
source

fn update(&mut self) -> bool

source

fn update(&mut self) -> bool

We have a matrix of the form | s₁ s₂ s₃ …

r₁ | r₂ | x_{ij} @@ -58,514 +58,514 @@ matrix row by row, from top-to-bottom, and left-to-right. In each pass, we find the first entry that can be incremented. We then increment it and zero out all the entries that appear before it. This will give us all valid entries.

-

Trait Implementations§

source§

impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>

§

type Item = u32

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<u32>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( +

Trait Implementations§

source§

impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>

§

type Item = u32

The type of the elements being iterated over.
source§

fn next(&mut self) -> Option<u32>

Advances the iterator and returns the next value. Read more
source§

fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · source§

fn count(self) -> usizewhere - Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · source§

fn last(self) -> Option<Self::Item>where - Self: Sized,

Consumes the iterator, returning the last element. Read more
source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · source§

fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
1.0.0 · source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
1.0.0 · source§

fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each -element. Read more
1.21.0 · source§

fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
1.0.0 · source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · source§

fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

Creates an iterator which gives the current iteration count as well as -the next value. Read more
1.0.0 · source§

fn peekable(self) -> Peekable<Self>where - Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
1.0.0 · source§

fn count(self) -> usizewhere + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · source§

fn last(self) -> Option<Self::Item>where + Self: Sized,

Consumes the iterator, returning the last element. Read more
source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · source§

fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · source§

fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · source§

fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · source§

fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · source§

fn peekable(self) -> Peekable<Self>where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
1.0.0 · source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · source§

fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · source§

fn take(self, n: usize) -> Take<Self>where - Self: Sized,

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
1.0.0 · source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
1.0.0 · source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
1.0.0 · source§

fn fuse(self) -> Fuse<Self>where - Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · source§

fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · source§

fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

Transforms an iterator into a collection. Read more
source§

fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · source§

fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
source§

fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
1.27.0 · source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
1.27.0 · source§

fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
1.0.0 · source§

fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, -returning the final result. Read more
1.51.0 · source§

fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
source§

fn try_reduce<F, R>( +their documentation for more information. Read more

1.0.0 · source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · source§

fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · source§

fn take(self, n: usize) -> Take<Self>where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · source§

fn fuse(self) -> Fuse<Self>where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · source§

fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · source§

fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
source§

fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · source§

fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
source§

fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · source§

fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · source§

fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · source§

fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
source§

fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · source§

fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · source§

fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns -the first non-none result. Read more
source§

fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · source§

fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · source§

fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
source§

fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns -the first true result or the first error. Read more
1.0.0 · source§

fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.6.0 · source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the -specified function. Read more
1.15.0 · source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
1.6.0 · source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the -specified function. Read more
1.15.0 · source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
1.0.0 · source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · source§

fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · source§

fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · source§

fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · source§

fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · source§

fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.6.0 · source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · source§

fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · source§

fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · source§

fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · source§

fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are equal to those of -another. Read more
source§

fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
1.5.0 · source§

fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are not equal to those of -another. Read more
1.5.0 · source§

fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
1.5.0 · source§

fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
1.5.0 · source§

fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
1.5.0 · source§

fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
source§

fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given comparator function. Read more
source§

fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

Auto Trait Implementations§

§

impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+As soon as an order can be determined, the evaluation stops and a result is returned. Read more
source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · source§

fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
source§

fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · source§

fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · source§

fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · source§

fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · source§

fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · source§

fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
source§

fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given comparator function. Read more
source§

fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (is_sorted)
Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

Auto Trait Implementations§

§

impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>

§

impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<I> IntoIterator for Iwhere - I: Iterator,

§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
§

type IntoIter = I

Which kind of iterator are we turning this into?
const: unstable · source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
source§

impl<T> Itertools for Twhere - T: Iterator + ?Sized,

source§

fn interleave<J>( +From<T> for U chooses to do.

+

source§

impl<I> IntoIterator for Iwhere + I: Iterator,

§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
§

type IntoIter = I

Which kind of iterator are we turning this into?
const: unstable · source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
source§

impl<T> Itertools for Twhere + T: Iterator + ?Sized,

source§

fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

Alternate elements from two iterators until both have run out. Read more
source§

fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

Alternate elements from two iterators until both have run out. Read more
source§

fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
Alternate elements from two iterators until at least one of them has run out. Read more
source§

fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
source§

fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
source§

fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
source§

fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
source§

fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
source§

fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
source§

fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
source§

fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

Return an iterable that can chunk the iterator. Read more
source§

fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

source§

fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

Return an iterable that can chunk the iterator. Read more
source§

fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
source§

fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
source§

fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
source§

fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

Split into an iterator pair that both yield all elements from -the original iterator. Read more
source§

fn step(self, n: usize) -> Step<Self>where - Self: Sized,

👎Deprecated since 0.8.0: Use std .step_by() instead
Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
Split into an iterator pair that both yield all elements from +the original iterator. Read more
source§

fn step(self, n: usize) -> Step<Self>where + Self: Sized,

👎Deprecated since 0.8.0: Use std .step_by() instead
Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
source§

fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

Convert each item of the iterator using the Into trait. Read more
source§

fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

Convert each item of the iterator using the Into trait. Read more
source§

fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

👎Deprecated since 0.10.0: Use .map_ok() instead
source§

fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
👎Deprecated since 0.10.0: Use .map_ok() instead
source§

fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
source§

fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
source§

fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
source§

fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
source§

fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
source§

fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
source§

fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
source§

fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
source§

fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
source§

fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
source§

fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
source§

fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
source§

fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
source§

fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
source§

fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
source§

fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
source§

fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
source§

fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
source§

fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
source§

fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
source§

fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
source§

fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
source§

fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
source§

fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
source§

fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
source§

fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
source§

fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
source§

fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
source§

fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
source§

fn with_position(self) -> WithPosition<Self>where - Self: Sized,

Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
source§

fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
source§

fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
source§

fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
source§

fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
source§

fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

source§

fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
source§

fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

Find the position and value of the first element satisfying a predicate. Read more
source§

fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the last element, if any. Read more
source§

fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the first element, if any. Read more
source§

fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

Returns true if the given item is present in this iterator. Read more
source§

fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

Check whether all elements compare equal. Read more
source§

fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
source§

fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

Consume the last n elements from the iterator eagerly, +(up to 12). Read more
source§

fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

Find the position and value of the first element satisfying a predicate. Read more
source§

fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the last element, if any. Read more
source§

fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Find the value of the first element satisfying a predicate or return the first element, if any. Read more
source§

fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

Returns true if the given item is present in this iterator. Read more
source§

fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

Check whether all elements compare equal. Read more
source§

fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
source§

fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
source§

fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

👎Deprecated since 0.8.0: Use .for_each() instead
Run the closure f eagerly on each element of the iterator. Read more
source§

fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

Combine all an iterator’s elements into one element by using Extend. Read more
source§

fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

.collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
source§

fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

.try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
source§

fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

👎Deprecated since 0.8.0: Use .for_each() instead
Run the closure f eagerly on each element of the iterator. Read more
source§

fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

Combine all an iterator’s elements into one element by using Extend. Read more
source§

fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

.collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
source§

fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

.try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
source§

fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
source§

fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

Combine all iterator elements into one String, separated by sep. Read more
source§

fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

Format all iterator elements, separated by sep. Read more
source§

fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

Format all iterator elements, separated by sep. Read more
source§

fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

👎Deprecated since 0.10.0: Use .fold_ok() instead
source§

fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

Fold Result values from an iterator. Read more
source§

fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

Fold Option values from an iterator. Read more
source§

fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

👎Deprecated since 0.10.2: Use Iterator::reduce instead
Accumulator of the elements in the iterator. Read more
source§

fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

Accumulate the elements in the iterator in a tree-like manner. Read more
source§

fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

An iterator method that applies a function, producing a single, final value. Read more
source§

fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

Iterate over the entire iterator and add all the elements. Read more
source§

fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

Iterate over the entire iterator and multiply all the elements. Read more
source§

fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
source§

fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

Sort the k smallest elements into a new iterator, in ascending order. Read more
source§

fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
source§

fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
source§

fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

Return the minimum and maximum elements in the iterator. Read more
source§

fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
source§

fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
source§

fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

Return the position of the maximum element in the iterator. Read more
source§

fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
source§

fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
source§

fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

Return the position of the minimum element in the iterator. Read more
source§

fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
source§

fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
source§

fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

Return the positions of the minimum and maximum elements in -the iterator. Read more
source§

fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
source§

fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
source§

fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
source§

fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

Combine all iterator elements into one String, separated by sep. Read more
source§

fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

Format all iterator elements, separated by sep. Read more
source§

fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

Format all iterator elements, separated by sep. Read more
source§

fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

👎Deprecated since 0.10.0: Use .fold_ok() instead
source§

fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

Fold Result values from an iterator. Read more
source§

fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

Fold Option values from an iterator. Read more
source§

fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

👎Deprecated since 0.10.2: Use Iterator::reduce instead
Accumulator of the elements in the iterator. Read more
source§

fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

Accumulate the elements in the iterator in a tree-like manner. Read more
source§

fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

An iterator method that applies a function, producing a single, final value. Read more
source§

fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

Iterate over the entire iterator and add all the elements. Read more
source§

fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

Iterate over the entire iterator and multiply all the elements. Read more
source§

fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. Read more
source§

fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
source§

fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

Sort the k smallest elements into a new iterator, in ascending order. Read more
source§

fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
source§

fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
source§

fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

Return the minimum and maximum elements in the iterator. Read more
source§

fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
source§

fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
source§

fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

Return the position of the maximum element in the iterator. Read more
source§

fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
source§

fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
source§

fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

Return the position of the minimum element in the iterator. Read more
source§

fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
source§

fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
source§

fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

Return the positions of the minimum and maximum elements in +the iterator. Read more
source§

fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
source§

fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
source§

fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
source§

fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
source§

fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
source§

fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
source§

fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

Converts an iterator of tuples into a tuple of containers. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
Converts an iterator of tuples into a tuple of containers. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/trait.MilnorAlgebraT.html b/docs/algebra/algebra/milnor_algebra/trait.MilnorAlgebraT.html index 03c916225..7780f9dac 100644 --- a/docs/algebra/algebra/milnor_algebra/trait.MilnorAlgebraT.html +++ b/docs/algebra/algebra/milnor_algebra/trait.MilnorAlgebraT.html @@ -1,4 +1,4 @@ -MilnorAlgebraT in algebra::algebra::milnor_algebra - Rust +MilnorAlgebraT in algebra::algebra::milnor_algebra - Rust @@ -23,7 +23,7 @@ }); -
pub trait MilnorAlgebraT: Send + Sync + Algebra {
+
pub trait MilnorAlgebraT: Send + Sync + Algebra {
     // Required method
     fn milnor_algebra(&self) -> &MilnorAlgebra;
-}

Required Methods§

Implementors§

\ No newline at end of file +}

Required Methods§

Implementors§

\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/type.MilnorHashMap.html b/docs/algebra/algebra/milnor_algebra/type.MilnorHashMap.html index bfdeeac3b..5e39cad38 100644 --- a/docs/algebra/algebra/milnor_algebra/type.MilnorHashMap.html +++ b/docs/algebra/algebra/milnor_algebra/type.MilnorHashMap.html @@ -1,4 +1,4 @@ -MilnorHashMap in algebra::algebra::milnor_algebra - Rust +MilnorHashMap in algebra::algebra::milnor_algebra - Rust @@ -23,5 +23,7 @@ }); -
type MilnorHashMap<V> = FxHashMap<MilnorBasisElement, V>;
Expand description

A version of HashMap<MilnorBasisElement, T> that is more efficient at the prime 2.

-
\ No newline at end of file +
type MilnorHashMap<V> = FxHashMap<MilnorBasisElement, V>;
Expand description

A version of HashMap<MilnorBasisElement, T> that is more efficient at the prime 2.

+

Aliased Type§

struct MilnorHashMap<V> {
+    base: HashMap<MilnorBasisElement, V, BuildHasherDefault<FxHasher>, Global>,
+}

Fields§

§base: HashMap<MilnorBasisElement, V, BuildHasherDefault<FxHasher>, Global>
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/type.PPart.html b/docs/algebra/algebra/milnor_algebra/type.PPart.html index ccef74669..90186c143 100644 --- a/docs/algebra/algebra/milnor_algebra/type.PPart.html +++ b/docs/algebra/algebra/milnor_algebra/type.PPart.html @@ -1,4 +1,4 @@ -PPart in algebra::algebra::milnor_algebra - Rust +PPart in algebra::algebra::milnor_algebra - Rust @@ -23,4 +23,1066 @@ }); -

Type Definition algebra::algebra::milnor_algebra::PPart

source ·
pub type PPart = Vec<PPartEntry>;
\ No newline at end of file +

Type Alias algebra::algebra::milnor_algebra::PPart

source ·
pub type PPart = Vec<PPartEntry>;

Aliased Type§

struct PPart {
+    buf: RawVec<u32, Global>,
+    len: usize,
+}

Fields§

§buf: RawVec<u32, Global>§len: usize

Methods from Deref<Target = [T]>§

source

pub fn as_str(&self) -> &str

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a UTF-8 str.

+
source

pub fn as_bytes(&self) -> &[u8]

🔬This is a nightly-only experimental API. (ascii_char)

Views this slice of ASCII characters as a slice of u8 bytes.

+
1.23.0 · source

pub fn is_ascii(&self) -> bool

Checks if all bytes in this slice are within the ASCII range.

+
source

pub fn as_ascii(&self) -> Option<&[AsciiChar]>

🔬This is a nightly-only experimental API. (ascii_char)

If this slice is_ascii, returns it as a slice of +ASCII characters, otherwise returns None.

+
source

pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar]

🔬This is a nightly-only experimental API. (ascii_char)

Converts this slice of bytes into a slice of ASCII characters, +without checking whether they’re valid.

+
Safety
+

Every byte in the slice must be in 0..=127, or else this is UB.

+
1.23.0 · source

pub fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool

Checks that two slices are an ASCII case-insensitive match.

+

Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), +but without allocating and copying temporaries.

+
1.60.0 · source

pub fn escape_ascii(&self) -> EscapeAscii<'_>

Returns an iterator that produces an escaped version of this slice, +treating it as an ASCII string.

+
Examples
+

+let s = b"0\t\r\n'\"\\\x9d";
+let escaped = s.escape_ascii().to_string();
+assert_eq!(escaped, "0\\t\\r\\n\\'\\\"\\\\\\x9d");
+
source

pub fn trim_ascii_start(&self) -> &[u8]

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a byte slice with leading ASCII whitespace bytes removed.

+

‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

+
Examples
+
#![feature(byte_slice_trim_ascii)]
+
+assert_eq!(b" \t hello world\n".trim_ascii_start(), b"hello world\n");
+assert_eq!(b"  ".trim_ascii_start(), b"");
+assert_eq!(b"".trim_ascii_start(), b"");
+
source

pub fn trim_ascii_end(&self) -> &[u8]

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a byte slice with trailing ASCII whitespace bytes removed.

+

‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

+
Examples
+
#![feature(byte_slice_trim_ascii)]
+
+assert_eq!(b"\r hello world\n ".trim_ascii_end(), b"\r hello world");
+assert_eq!(b"  ".trim_ascii_end(), b"");
+assert_eq!(b"".trim_ascii_end(), b"");
+
source

pub fn trim_ascii(&self) -> &[u8]

🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

Returns a byte slice with leading and trailing ASCII whitespace bytes +removed.

+

‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

+
Examples
+
#![feature(byte_slice_trim_ascii)]
+
+assert_eq!(b"\r hello world\n ".trim_ascii(), b"hello world");
+assert_eq!(b"  ".trim_ascii(), b"");
+assert_eq!(b"".trim_ascii(), b"");
+
source

pub fn flatten(&self) -> &[T]

🔬This is a nightly-only experimental API. (slice_flatten)

Takes a &[[T; N]], and flattens it to a &[T].

+
Panics
+

This panics if the length of the resulting slice would overflow a usize.

+

This is only possible when flattening a slice of arrays of zero-sized +types, and thus tends to be irrelevant in practice. If +size_of::<T>() > 0, this will never panic.

+
Examples
+
#![feature(slice_flatten)]
+
+assert_eq!([[1, 2, 3], [4, 5, 6]].flatten(), &[1, 2, 3, 4, 5, 6]);
+
+assert_eq!(
+    [[1, 2, 3], [4, 5, 6]].flatten(),
+    [[1, 2], [3, 4], [5, 6]].flatten(),
+);
+
+let slice_of_empty_arrays: &[[i32; 0]] = &[[], [], [], [], []];
+assert!(slice_of_empty_arrays.flatten().is_empty());
+
+let empty_slice_of_arrays: &[[u32; 10]] = &[];
+assert!(empty_slice_of_arrays.flatten().is_empty());
+
1.0.0 · source

pub fn len(&self) -> usize

Returns the number of elements in the slice.

+
Examples
+
let a = [1, 2, 3];
+assert_eq!(a.len(), 3);
+
1.0.0 · source

pub fn is_empty(&self) -> bool

Returns true if the slice has a length of 0.

+
Examples
+
let a = [1, 2, 3];
+assert!(!a.is_empty());
+
1.0.0 · source

pub fn first(&self) -> Option<&T>

Returns the first element of the slice, or None if it is empty.

+
Examples
+
let v = [10, 40, 30];
+assert_eq!(Some(&10), v.first());
+
+let w: &[i32] = &[];
+assert_eq!(None, w.first());
+
1.5.0 · source

pub fn split_first(&self) -> Option<(&T, &[T])>

Returns the first and all the rest of the elements of the slice, or None if it is empty.

+
Examples
+
let x = &[0, 1, 2];
+
+if let Some((first, elements)) = x.split_first() {
+    assert_eq!(first, &0);
+    assert_eq!(elements, &[1, 2]);
+}
+
1.5.0 · source

pub fn split_last(&self) -> Option<(&T, &[T])>

Returns the last and all the rest of the elements of the slice, or None if it is empty.

+
Examples
+
let x = &[0, 1, 2];
+
+if let Some((last, elements)) = x.split_last() {
+    assert_eq!(last, &2);
+    assert_eq!(elements, &[0, 1]);
+}
+
1.0.0 · source

pub fn last(&self) -> Option<&T>

Returns the last element of the slice, or None if it is empty.

+
Examples
+
let v = [10, 40, 30];
+assert_eq!(Some(&30), v.last());
+
+let w: &[i32] = &[];
+assert_eq!(None, w.last());
+
source

pub fn first_chunk<const N: usize>(&self) -> Option<&[T; N]>

🔬This is a nightly-only experimental API. (slice_first_last_chunk)

Returns the first N elements of the slice, or None if it has fewer than N elements.

+
Examples
+
#![feature(slice_first_last_chunk)]
+
+let u = [10, 40, 30];
+assert_eq!(Some(&[10, 40]), u.first_chunk::<2>());
+
+let v: &[i32] = &[10];
+assert_eq!(None, v.first_chunk::<2>());
+
+let w: &[i32] = &[];
+assert_eq!(Some(&[]), w.first_chunk::<0>());
+
source

pub fn split_first_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

🔬This is a nightly-only experimental API. (slice_first_last_chunk)

Returns the first N elements of the slice and the remainder, +or None if it has fewer than N elements.

+
Examples
+
#![feature(slice_first_last_chunk)]
+
+let x = &[0, 1, 2];
+
+if let Some((first, elements)) = x.split_first_chunk::<2>() {
+    assert_eq!(first, &[0, 1]);
+    assert_eq!(elements, &[2]);
+}
+
source

pub fn split_last_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

🔬This is a nightly-only experimental API. (slice_first_last_chunk)

Returns the last N elements of the slice and the remainder, +or None if it has fewer than N elements.

+
Examples
+
#![feature(slice_first_last_chunk)]
+
+let x = &[0, 1, 2];
+
+if let Some((last, elements)) = x.split_last_chunk::<2>() {
+    assert_eq!(last, &[1, 2]);
+    assert_eq!(elements, &[0]);
+}
+
source

pub fn last_chunk<const N: usize>(&self) -> Option<&[T; N]>

🔬This is a nightly-only experimental API. (slice_first_last_chunk)

Returns the last element of the slice, or None if it is empty.

+
Examples
+
#![feature(slice_first_last_chunk)]
+
+let u = [10, 40, 30];
+assert_eq!(Some(&[40, 30]), u.last_chunk::<2>());
+
+let v: &[i32] = &[10];
+assert_eq!(None, v.last_chunk::<2>());
+
+let w: &[i32] = &[];
+assert_eq!(Some(&[]), w.last_chunk::<0>());
+
1.0.0 · source

pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>where + I: SliceIndex<[T]>,

Returns a reference to an element or subslice depending on the type of +index.

+
    +
  • If given a position, returns a reference to the element at that +position or None if out of bounds.
  • +
  • If given a range, returns the subslice corresponding to that range, +or None if out of bounds.
  • +
+
Examples
+
let v = [10, 40, 30];
+assert_eq!(Some(&40), v.get(1));
+assert_eq!(Some(&[10, 40][..]), v.get(0..2));
+assert_eq!(None, v.get(3));
+assert_eq!(None, v.get(0..4));
+
1.0.0 · source

pub unsafe fn get_unchecked<I>( + &self, + index: I +) -> &<I as SliceIndex<[T]>>::Outputwhere + I: SliceIndex<[T]>,

Returns a reference to an element or subslice, without doing bounds +checking.

+

For a safe alternative see get.

+
Safety
+

Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used.

+
Examples
+
let x = &[1, 2, 4];
+
+unsafe {
+    assert_eq!(x.get_unchecked(1), &2);
+}
+
1.0.0 · source

pub fn as_ptr(&self) -> *const T

Returns a raw pointer to the slice’s buffer.

+

The caller must ensure that the slice outlives the pointer this +function returns, or else it will end up pointing to garbage.

+

The caller must also ensure that the memory the pointer (non-transitively) points to +is never written to (except inside an UnsafeCell) using this pointer or any pointer +derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

+

Modifying the container referenced by this slice may cause its buffer +to be reallocated, which would also make any pointers to it invalid.

+
Examples
+
let x = &[1, 2, 4];
+let x_ptr = x.as_ptr();
+
+unsafe {
+    for i in 0..x.len() {
+        assert_eq!(x.get_unchecked(i), &*x_ptr.add(i));
+    }
+}
+
1.48.0 · source

pub fn as_ptr_range(&self) -> Range<*const T>

Returns the two raw pointers spanning the slice.

+

The returned range is half-open, which means that the end pointer +points one past the last element of the slice. This way, an empty +slice is represented by two equal pointers, and the difference between +the two pointers represents the size of the slice.

+

See as_ptr for warnings on using these pointers. The end pointer +requires extra caution, as it does not point to a valid element in the +slice.

+

This function is useful for interacting with foreign interfaces which +use two pointers to refer to a range of elements in memory, as is +common in C++.

+

It can also be useful to check if a pointer to an element refers to an +element of this slice:

+ +
let a = [1, 2, 3];
+let x = &a[1] as *const _;
+let y = &5 as *const _;
+
+assert!(a.as_ptr_range().contains(&x));
+assert!(!a.as_ptr_range().contains(&y));
+
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the slice.

+

The iterator yields all items from start to end.

+
Examples
+
let x = &[1, 2, 4];
+let mut iterator = x.iter();
+
+assert_eq!(iterator.next(), Some(&1));
+assert_eq!(iterator.next(), Some(&2));
+assert_eq!(iterator.next(), Some(&4));
+assert_eq!(iterator.next(), None);
+
1.0.0 · source

pub fn windows(&self, size: usize) -> Windows<'_, T>

Returns an iterator over all contiguous windows of length +size. The windows overlap. If the slice is shorter than +size, the iterator returns no values.

+
Panics
+

Panics if size is 0.

+
Examples
+
let slice = ['r', 'u', 's', 't'];
+let mut iter = slice.windows(2);
+assert_eq!(iter.next().unwrap(), &['r', 'u']);
+assert_eq!(iter.next().unwrap(), &['u', 's']);
+assert_eq!(iter.next().unwrap(), &['s', 't']);
+assert!(iter.next().is_none());
+

If the slice is shorter than size:

+ +
let slice = ['f', 'o', 'o'];
+let mut iter = slice.windows(4);
+assert!(iter.next().is_none());
+

There’s no windows_mut, as that existing would let safe code violate the +“only one &mut at a time to the same thing” rule. However, you can sometimes +use Cell::as_slice_of_cells in +conjunction with windows to accomplish something similar:

+ +
use std::cell::Cell;
+
+let mut array = ['R', 'u', 's', 't', ' ', '2', '0', '1', '5'];
+let slice = &mut array[..];
+let slice_of_cells: &[Cell<char>] = Cell::from_mut(slice).as_slice_of_cells();
+for w in slice_of_cells.windows(3) {
+    Cell::swap(&w[0], &w[2]);
+}
+assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
+
1.0.0 · source

pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T>

Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

+

The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

+

See chunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and rchunks for the same iterator but starting at the end of the +slice.

+
Panics
+

Panics if chunk_size is 0.

+
Examples
+
let slice = ['l', 'o', 'r', 'e', 'm'];
+let mut iter = slice.chunks(2);
+assert_eq!(iter.next().unwrap(), &['l', 'o']);
+assert_eq!(iter.next().unwrap(), &['r', 'e']);
+assert_eq!(iter.next().unwrap(), &['m']);
+assert!(iter.next().is_none());
+
1.31.0 · source

pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T>

Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

+

The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

+

Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of chunks.

+

See chunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and rchunks_exact for the same iterator but starting at the end of the slice.

+
Panics
+

Panics if chunk_size is 0.

+
Examples
+
let slice = ['l', 'o', 'r', 'e', 'm'];
+let mut iter = slice.chunks_exact(2);
+assert_eq!(iter.next().unwrap(), &['l', 'o']);
+assert_eq!(iter.next().unwrap(), &['r', 'e']);
+assert!(iter.next().is_none());
+assert_eq!(iter.remainder(), &['m']);
+
source

pub unsafe fn as_chunks_unchecked<const N: usize>(&self) -> &[[T; N]]

🔬This is a nightly-only experimental API. (slice_as_chunks)

Splits the slice into a slice of N-element arrays, +assuming that there’s no remainder.

+
Safety
+

This may only be called when

+
    +
  • The slice splits exactly into N-element chunks (aka self.len() % N == 0).
  • +
  • N != 0.
  • +
+
Examples
+
#![feature(slice_as_chunks)]
+let slice: &[char] = &['l', 'o', 'r', 'e', 'm', '!'];
+let chunks: &[[char; 1]] =
+    // SAFETY: 1-element chunks never have remainder
+    unsafe { slice.as_chunks_unchecked() };
+assert_eq!(chunks, &[['l'], ['o'], ['r'], ['e'], ['m'], ['!']]);
+let chunks: &[[char; 3]] =
+    // SAFETY: The slice length (6) is a multiple of 3
+    unsafe { slice.as_chunks_unchecked() };
+assert_eq!(chunks, &[['l', 'o', 'r'], ['e', 'm', '!']]);
+
+// These would be unsound:
+// let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5
+// let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed
+
source

pub fn as_chunks<const N: usize>(&self) -> (&[[T; N]], &[T])

🔬This is a nightly-only experimental API. (slice_as_chunks)

Splits the slice into a slice of N-element arrays, +starting at the beginning of the slice, +and a remainder slice with length strictly less than N.

+
Panics
+

Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

+
Examples
+
#![feature(slice_as_chunks)]
+let slice = ['l', 'o', 'r', 'e', 'm'];
+let (chunks, remainder) = slice.as_chunks();
+assert_eq!(chunks, &[['l', 'o'], ['r', 'e']]);
+assert_eq!(remainder, &['m']);
+

If you expect the slice to be an exact multiple, you can combine +let-else with an empty slice pattern:

+ +
#![feature(slice_as_chunks)]
+let slice = ['R', 'u', 's', 't'];
+let (chunks, []) = slice.as_chunks::<2>() else {
+    panic!("slice didn't have even length")
+};
+assert_eq!(chunks, &[['R', 'u'], ['s', 't']]);
+
source

pub fn as_rchunks<const N: usize>(&self) -> (&[T], &[[T; N]])

🔬This is a nightly-only experimental API. (slice_as_chunks)

Splits the slice into a slice of N-element arrays, +starting at the end of the slice, +and a remainder slice with length strictly less than N.

+
Panics
+

Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

+
Examples
+
#![feature(slice_as_chunks)]
+let slice = ['l', 'o', 'r', 'e', 'm'];
+let (remainder, chunks) = slice.as_rchunks();
+assert_eq!(remainder, &['l']);
+assert_eq!(chunks, &[['o', 'r'], ['e', 'm']]);
+
source

pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N>

🔬This is a nightly-only experimental API. (array_chunks)

Returns an iterator over N elements of the slice at a time, starting at the +beginning of the slice.

+

The chunks are array references and do not overlap. If N does not divide the +length of the slice, then the last up to N-1 elements will be omitted and can be +retrieved from the remainder function of the iterator.

+

This method is the const generic equivalent of chunks_exact.

+
Panics
+

Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

+
Examples
+
#![feature(array_chunks)]
+let slice = ['l', 'o', 'r', 'e', 'm'];
+let mut iter = slice.array_chunks();
+assert_eq!(iter.next().unwrap(), &['l', 'o']);
+assert_eq!(iter.next().unwrap(), &['r', 'e']);
+assert!(iter.next().is_none());
+assert_eq!(iter.remainder(), &['m']);
+
source

pub fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N>

🔬This is a nightly-only experimental API. (array_windows)

Returns an iterator over overlapping windows of N elements of a slice, +starting at the beginning of the slice.

+

This is the const generic equivalent of windows.

+

If N is greater than the size of the slice, it will return no windows.

+
Panics
+

Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

+
Examples
+
#![feature(array_windows)]
+let slice = [0, 1, 2, 3];
+let mut iter = slice.array_windows();
+assert_eq!(iter.next().unwrap(), &[0, 1]);
+assert_eq!(iter.next().unwrap(), &[1, 2]);
+assert_eq!(iter.next().unwrap(), &[2, 3]);
+assert!(iter.next().is_none());
+
1.31.0 · source

pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T>

Returns an iterator over chunk_size elements of the slice at a time, starting at the end +of the slice.

+

The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

+

See rchunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and chunks for the same iterator but starting at the beginning +of the slice.

+
Panics
+

Panics if chunk_size is 0.

+
Examples
+
let slice = ['l', 'o', 'r', 'e', 'm'];
+let mut iter = slice.rchunks(2);
+assert_eq!(iter.next().unwrap(), &['e', 'm']);
+assert_eq!(iter.next().unwrap(), &['o', 'r']);
+assert_eq!(iter.next().unwrap(), &['l']);
+assert!(iter.next().is_none());
+
1.31.0 · source

pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T>

Returns an iterator over chunk_size elements of the slice at a time, starting at the +end of the slice.

+

The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

+

Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of rchunks.

+

See rchunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and chunks_exact for the same iterator but starting at the beginning of the +slice.

+
Panics
+

Panics if chunk_size is 0.

+
Examples
+
let slice = ['l', 'o', 'r', 'e', 'm'];
+let mut iter = slice.rchunks_exact(2);
+assert_eq!(iter.next().unwrap(), &['e', 'm']);
+assert_eq!(iter.next().unwrap(), &['o', 'r']);
+assert!(iter.next().is_none());
+assert_eq!(iter.remainder(), &['l']);
+
source

pub fn group_by<F>(&self, pred: F) -> GroupBy<'_, T, F>where + F: FnMut(&T, &T) -> bool,

🔬This is a nightly-only experimental API. (slice_group_by)

Returns an iterator over the slice producing non-overlapping runs +of elements using the predicate to separate them.

+

The predicate is called on two elements following themselves, +it means the predicate is called on slice[0] and slice[1] +then on slice[1] and slice[2] and so on.

+
Examples
+
#![feature(slice_group_by)]
+
+let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
+
+let mut iter = slice.group_by(|a, b| a == b);
+
+assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
+assert_eq!(iter.next(), Some(&[3, 3][..]));
+assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
+assert_eq!(iter.next(), None);
+

This method can be used to extract the sorted subslices:

+ +
#![feature(slice_group_by)]
+
+let slice = &[1, 1, 2, 3, 2, 3, 2, 3, 4];
+
+let mut iter = slice.group_by(|a, b| a <= b);
+
+assert_eq!(iter.next(), Some(&[1, 1, 2, 3][..]));
+assert_eq!(iter.next(), Some(&[2, 3][..]));
+assert_eq!(iter.next(), Some(&[2, 3, 4][..]));
+assert_eq!(iter.next(), None);
+
1.0.0 · source

pub fn split_at(&self, mid: usize) -> (&[T], &[T])

Divides one slice into two at an index.

+

The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

+
Panics
+

Panics if mid > len.

+
Examples
+
let v = [1, 2, 3, 4, 5, 6];
+
+{
+   let (left, right) = v.split_at(0);
+   assert_eq!(left, []);
+   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
+}
+
+{
+    let (left, right) = v.split_at(2);
+    assert_eq!(left, [1, 2]);
+    assert_eq!(right, [3, 4, 5, 6]);
+}
+
+{
+    let (left, right) = v.split_at(6);
+    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
+    assert_eq!(right, []);
+}
+
source

pub unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T])

🔬This is a nightly-only experimental API. (slice_split_at_unchecked)

Divides one slice into two at an index, without doing bounds checking.

+

The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

+

For a safe alternative see split_at.

+
Safety
+

Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used. The caller has to ensure that +0 <= mid <= self.len().

+
Examples
+
#![feature(slice_split_at_unchecked)]
+
+let v = [1, 2, 3, 4, 5, 6];
+
+unsafe {
+   let (left, right) = v.split_at_unchecked(0);
+   assert_eq!(left, []);
+   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
+}
+
+unsafe {
+    let (left, right) = v.split_at_unchecked(2);
+    assert_eq!(left, [1, 2]);
+    assert_eq!(right, [3, 4, 5, 6]);
+}
+
+unsafe {
+    let (left, right) = v.split_at_unchecked(6);
+    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
+    assert_eq!(right, []);
+}
+
source

pub fn split_array_ref<const N: usize>(&self) -> (&[T; N], &[T])

🔬This is a nightly-only experimental API. (split_array)

Divides one slice into an array and a remainder slice at an index.

+

The array will contain all indices from [0, N) (excluding +the index N itself) and the slice will contain all +indices from [N, len) (excluding the index len itself).

+
Panics
+

Panics if N > len.

+
Examples
+
#![feature(split_array)]
+
+let v = &[1, 2, 3, 4, 5, 6][..];
+
+{
+   let (left, right) = v.split_array_ref::<0>();
+   assert_eq!(left, &[]);
+   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
+}
+
+{
+    let (left, right) = v.split_array_ref::<2>();
+    assert_eq!(left, &[1, 2]);
+    assert_eq!(right, [3, 4, 5, 6]);
+}
+
+{
+    let (left, right) = v.split_array_ref::<6>();
+    assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
+    assert_eq!(right, []);
+}
+
source

pub fn rsplit_array_ref<const N: usize>(&self) -> (&[T], &[T; N])

🔬This is a nightly-only experimental API. (split_array)

Divides one slice into an array and a remainder slice at an index from +the end.

+

The slice will contain all indices from [0, len - N) (excluding +the index len - N itself) and the array will contain all +indices from [len - N, len) (excluding the index len itself).

+
Panics
+

Panics if N > len.

+
Examples
+
#![feature(split_array)]
+
+let v = &[1, 2, 3, 4, 5, 6][..];
+
+{
+   let (left, right) = v.rsplit_array_ref::<0>();
+   assert_eq!(left, [1, 2, 3, 4, 5, 6]);
+   assert_eq!(right, &[]);
+}
+
+{
+    let (left, right) = v.rsplit_array_ref::<2>();
+    assert_eq!(left, [1, 2, 3, 4]);
+    assert_eq!(right, &[5, 6]);
+}
+
+{
+    let (left, right) = v.rsplit_array_ref::<6>();
+    assert_eq!(left, []);
+    assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
+}
+
1.0.0 · source

pub fn split<F>(&self, pred: F) -> Split<'_, T, F>where + F: FnMut(&T) -> bool,

Returns an iterator over subslices separated by elements that match +pred. The matched element is not contained in the subslices.

+
Examples
+
let slice = [10, 40, 33, 20];
+let mut iter = slice.split(|num| num % 3 == 0);
+
+assert_eq!(iter.next().unwrap(), &[10, 40]);
+assert_eq!(iter.next().unwrap(), &[20]);
+assert!(iter.next().is_none());
+

If the first element is matched, an empty slice will be the first item +returned by the iterator. Similarly, if the last element in the slice +is matched, an empty slice will be the last item returned by the +iterator:

+ +
let slice = [10, 40, 33];
+let mut iter = slice.split(|num| num % 3 == 0);
+
+assert_eq!(iter.next().unwrap(), &[10, 40]);
+assert_eq!(iter.next().unwrap(), &[]);
+assert!(iter.next().is_none());
+

If two matched elements are directly adjacent, an empty slice will be +present between them:

+ +
let slice = [10, 6, 33, 20];
+let mut iter = slice.split(|num| num % 3 == 0);
+
+assert_eq!(iter.next().unwrap(), &[10]);
+assert_eq!(iter.next().unwrap(), &[]);
+assert_eq!(iter.next().unwrap(), &[20]);
+assert!(iter.next().is_none());
+
1.51.0 · source

pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F>where + F: FnMut(&T) -> bool,

Returns an iterator over subslices separated by elements that match +pred. The matched element is contained in the end of the previous +subslice as a terminator.

+
Examples
+
let slice = [10, 40, 33, 20];
+let mut iter = slice.split_inclusive(|num| num % 3 == 0);
+
+assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
+assert_eq!(iter.next().unwrap(), &[20]);
+assert!(iter.next().is_none());
+

If the last element of the slice is matched, +that element will be considered the terminator of the preceding slice. +That slice will be the last item returned by the iterator.

+ +
let slice = [3, 10, 40, 33];
+let mut iter = slice.split_inclusive(|num| num % 3 == 0);
+
+assert_eq!(iter.next().unwrap(), &[3]);
+assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
+assert!(iter.next().is_none());
+
1.27.0 · source

pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F>where + F: FnMut(&T) -> bool,

Returns an iterator over subslices separated by elements that match +pred, starting at the end of the slice and working backwards. +The matched element is not contained in the subslices.

+
Examples
+
let slice = [11, 22, 33, 0, 44, 55];
+let mut iter = slice.rsplit(|num| *num == 0);
+
+assert_eq!(iter.next().unwrap(), &[44, 55]);
+assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
+assert_eq!(iter.next(), None);
+

As with split(), if the first or last element is matched, an empty +slice will be the first (or last) item returned by the iterator.

+ +
let v = &[0, 1, 1, 2, 3, 5, 8];
+let mut it = v.rsplit(|n| *n % 2 == 0);
+assert_eq!(it.next().unwrap(), &[]);
+assert_eq!(it.next().unwrap(), &[3, 5]);
+assert_eq!(it.next().unwrap(), &[1, 1]);
+assert_eq!(it.next().unwrap(), &[]);
+assert_eq!(it.next(), None);
+
1.0.0 · source

pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F>where + F: FnMut(&T) -> bool,

Returns an iterator over subslices separated by elements that match +pred, limited to returning at most n items. The matched element is +not contained in the subslices.

+

The last element returned, if any, will contain the remainder of the +slice.

+
Examples
+

Print the slice split once by numbers divisible by 3 (i.e., [10, 40], +[20, 60, 50]):

+ +
let v = [10, 40, 30, 20, 60, 50];
+
+for group in v.splitn(2, |num| *num % 3 == 0) {
+    println!("{group:?}");
+}
+
1.0.0 · source

pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F>where + F: FnMut(&T) -> bool,

Returns an iterator over subslices separated by elements that match +pred limited to returning at most n items. This starts at the end of +the slice and works backwards. The matched element is not contained in +the subslices.

+

The last element returned, if any, will contain the remainder of the +slice.

+
Examples
+

Print the slice split once, starting from the end, by numbers divisible +by 3 (i.e., [50], [10, 40, 30, 20]):

+ +
let v = [10, 40, 30, 20, 60, 50];
+
+for group in v.rsplitn(2, |num| *num % 3 == 0) {
+    println!("{group:?}");
+}
+
1.0.0 · source

pub fn contains(&self, x: &T) -> boolwhere + T: PartialEq<T>,

Returns true if the slice contains an element with the given value.

+

This operation is O(n).

+

Note that if you have a sorted slice, binary_search may be faster.

+
Examples
+
let v = [10, 40, 30];
+assert!(v.contains(&30));
+assert!(!v.contains(&50));
+

If you do not have a &T, but some other value that you can compare +with one (for example, String implements PartialEq<str>), you can +use iter().any:

+ +
let v = [String::from("hello"), String::from("world")]; // slice of `String`
+assert!(v.iter().any(|e| e == "hello")); // search with `&str`
+assert!(!v.iter().any(|e| e == "hi"));
+
1.0.0 · source

pub fn starts_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

Returns true if needle is a prefix of the slice.

+
Examples
+
let v = [10, 40, 30];
+assert!(v.starts_with(&[10]));
+assert!(v.starts_with(&[10, 40]));
+assert!(!v.starts_with(&[50]));
+assert!(!v.starts_with(&[10, 50]));
+

Always returns true if needle is an empty slice:

+ +
let v = &[10, 40, 30];
+assert!(v.starts_with(&[]));
+let v: &[u8] = &[];
+assert!(v.starts_with(&[]));
+
1.0.0 · source

pub fn ends_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

Returns true if needle is a suffix of the slice.

+
Examples
+
let v = [10, 40, 30];
+assert!(v.ends_with(&[30]));
+assert!(v.ends_with(&[40, 30]));
+assert!(!v.ends_with(&[50]));
+assert!(!v.ends_with(&[50, 30]));
+

Always returns true if needle is an empty slice:

+ +
let v = &[10, 40, 30];
+assert!(v.ends_with(&[]));
+let v: &[u8] = &[];
+assert!(v.ends_with(&[]));
+
1.51.0 · source

pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

Returns a subslice with the prefix removed.

+

If the slice starts with prefix, returns the subslice after the prefix, wrapped in Some. +If prefix is empty, simply returns the original slice.

+

If the slice does not start with prefix, returns None.

+
Examples
+
let v = &[10, 40, 30];
+assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
+assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
+assert_eq!(v.strip_prefix(&[50]), None);
+assert_eq!(v.strip_prefix(&[10, 50]), None);
+
+let prefix : &str = "he";
+assert_eq!(b"hello".strip_prefix(prefix.as_bytes()),
+           Some(b"llo".as_ref()));
+
1.51.0 · source

pub fn strip_suffix<P>(&self, suffix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

Returns a subslice with the suffix removed.

+

If the slice ends with suffix, returns the subslice before the suffix, wrapped in Some. +If suffix is empty, simply returns the original slice.

+

If the slice does not end with suffix, returns None.

+
Examples
+
let v = &[10, 40, 30];
+assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
+assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
+assert_eq!(v.strip_suffix(&[50]), None);
+assert_eq!(v.strip_suffix(&[50, 30]), None);
+

Binary searches this slice for a given element. +If the slice is not sorted, the returned result is unspecified and +meaningless.

+

If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

+

See also binary_search_by, binary_search_by_key, and partition_point.

+
Examples
+

Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

+ +
let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
+
+assert_eq!(s.binary_search(&13),  Ok(9));
+assert_eq!(s.binary_search(&4),   Err(7));
+assert_eq!(s.binary_search(&100), Err(13));
+let r = s.binary_search(&1);
+assert!(match r { Ok(1..=4) => true, _ => false, });
+

If you want to find that whole range of matching items, rather than +an arbitrary matching one, that can be done using partition_point:

+ +
let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
+
+let low = s.partition_point(|x| x < &1);
+assert_eq!(low, 1);
+let high = s.partition_point(|x| x <= &1);
+assert_eq!(high, 5);
+let r = s.binary_search(&1);
+assert!((low..high).contains(&r.unwrap()));
+
+assert!(s[..low].iter().all(|&x| x < 1));
+assert!(s[low..high].iter().all(|&x| x == 1));
+assert!(s[high..].iter().all(|&x| x > 1));
+
+// For something not found, the "range" of equal items is empty
+assert_eq!(s.partition_point(|x| x < &11), 9);
+assert_eq!(s.partition_point(|x| x <= &11), 9);
+assert_eq!(s.binary_search(&11), Err(9));
+

If you want to insert an item to a sorted vector, while maintaining +sort order, consider using partition_point:

+ +
let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
+let num = 42;
+let idx = s.partition_point(|&x| x < num);
+// The above is equivalent to `let idx = s.binary_search(&num).unwrap_or_else(|x| x);`
+s.insert(idx, num);
+assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
+
1.0.0 · source

pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize>where + F: FnMut(&'a T) -> Ordering,

Binary searches this slice with a comparator function.

+

The comparator function should return an order code that indicates +whether its argument is Less, Equal or Greater the desired +target. +If the slice is not sorted or if the comparator function does not +implement an order consistent with the sort order of the underlying +slice, the returned result is unspecified and meaningless.

+

If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

+

See also binary_search, binary_search_by_key, and partition_point.

+
Examples
+

Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

+ +
let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
+
+let seek = 13;
+assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
+let seek = 4;
+assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
+let seek = 100;
+assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
+let seek = 1;
+let r = s.binary_search_by(|probe| probe.cmp(&seek));
+assert!(match r { Ok(1..=4) => true, _ => false, });
+
1.10.0 · source

pub fn binary_search_by_key<'a, B, F>( + &'a self, + b: &B, + f: F +) -> Result<usize, usize>where + F: FnMut(&'a T) -> B, + B: Ord,

Binary searches this slice with a key extraction function.

+

Assumes that the slice is sorted by the key, for instance with +sort_by_key using the same key extraction function. +If the slice is not sorted by the key, the returned result is +unspecified and meaningless.

+

If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

+

See also binary_search, binary_search_by, and partition_point.

+
Examples
+

Looks up a series of four elements in a slice of pairs sorted by +their second elements. The first is found, with a uniquely +determined position; the second and third are not found; the +fourth could match any position in [1, 4].

+ +
let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
+         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
+         (1, 21), (2, 34), (4, 55)];
+
+assert_eq!(s.binary_search_by_key(&13, |&(a, b)| b),  Ok(9));
+assert_eq!(s.binary_search_by_key(&4, |&(a, b)| b),   Err(7));
+assert_eq!(s.binary_search_by_key(&100, |&(a, b)| b), Err(13));
+let r = s.binary_search_by_key(&1, |&(a, b)| b);
+assert!(match r { Ok(1..=4) => true, _ => false, });
+
1.30.0 · source

pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])

Transmute the slice to a slice of another type, ensuring alignment of the types is +maintained.

+

This method splits the slice into three distinct slices: prefix, correctly aligned middle +slice of a new type, and the suffix slice. How exactly the slice is split up is not +specified; the middle part may be smaller than necessary. However, if this fails to return a +maximal middle part, that is because code is running in a context where performance does not +matter, such as a sanitizer attempting to find alignment bugs. Regular code running +in a default (debug or release) execution will return a maximal middle part.

+

This method has no purpose when either input element T or output element U are +zero-sized and will return the original slice without splitting anything.

+
Safety
+

This method is essentially a transmute with respect to the elements in the returned +middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

+
Examples
+

Basic usage:

+ +
unsafe {
+    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
+    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
+    // less_efficient_algorithm_for_bytes(prefix);
+    // more_efficient_algorithm_for_aligned_shorts(shorts);
+    // less_efficient_algorithm_for_bytes(suffix);
+}
+
source

pub fn as_simd<const LANES: usize>(&self) -> (&[T], &[Simd<T, LANES>], &[T])where + Simd<T, LANES>: AsRef<[T; LANES]>, + T: SimdElement, + LaneCount<LANES>: SupportedLaneCount,

🔬This is a nightly-only experimental API. (portable_simd)

Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.

+

This is a safe wrapper around slice::align_to, so has the same weak +postconditions as that method. You’re only assured that +self.len() == prefix.len() + middle.len() * LANES + suffix.len().

+

Notably, all of the following are possible:

+
    +
  • prefix.len() >= LANES.
  • +
  • middle.is_empty() despite self.len() >= 3 * LANES.
  • +
  • suffix.len() >= LANES.
  • +
+

That said, this is a safe method, so if you’re only writing safe code, +then this can at most cause incorrect logic, not unsoundness.

+
Panics
+

This will panic if the size of the SIMD type is different from +LANES times that of the scalar.

+

At the time of writing, the trait restrictions on Simd<T, LANES> keeps +that from ever happening, as only power-of-two numbers of lanes are +supported. It’s possible that, in the future, those restrictions might +be lifted in a way that would make it possible to see panics from this +method for something like LANES == 3.

+
Examples
+
#![feature(portable_simd)]
+use core::simd::SimdFloat;
+
+let short = &[1, 2, 3];
+let (prefix, middle, suffix) = short.as_simd::<4>();
+assert_eq!(middle, []); // Not enough elements for anything in the middle
+
+// They might be split in any possible way between prefix and suffix
+let it = prefix.iter().chain(suffix).copied();
+assert_eq!(it.collect::<Vec<_>>(), vec![1, 2, 3]);
+
+fn basic_simd_sum(x: &[f32]) -> f32 {
+    use std::ops::Add;
+    use std::simd::f32x4;
+    let (prefix, middle, suffix) = x.as_simd();
+    let sums = f32x4::from_array([
+        prefix.iter().copied().sum(),
+        0.0,
+        0.0,
+        suffix.iter().copied().sum(),
+    ]);
+    let sums = middle.iter().copied().fold(sums, f32x4::add);
+    sums.reduce_sum()
+}
+
+let numbers: Vec<f32> = (1..101).map(|x| x as _).collect();
+assert_eq!(basic_simd_sum(&numbers[1..99]), 4949.0);
+
source

pub fn is_sorted(&self) -> boolwhere + T: PartialOrd<T>,

🔬This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this slice are sorted.

+

That is, for each element a and its following element b, a <= b must hold. If the +slice yields exactly zero or one element, true is returned.

+

Note that if Self::Item is only PartialOrd, but not Ord, the above definition +implies that this function returns false if any two consecutive items are not +comparable.

+
Examples
+
#![feature(is_sorted)]
+let empty: [i32; 0] = [];
+
+assert!([1, 2, 2, 9].is_sorted());
+assert!(![1, 3, 2, 4].is_sorted());
+assert!([0].is_sorted());
+assert!(empty.is_sorted());
+assert!(![0.0, 1.0, f32::NAN].is_sorted());
+
source

pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> boolwhere + F: FnMut(&'a T, &'a T) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this slice are sorted using the given comparator function.

+

Instead of using PartialOrd::partial_cmp, this function uses the given compare +function to determine the ordering of two elements. Apart from that, it’s equivalent to +is_sorted; see its documentation for more information.

+
source

pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> boolwhere + F: FnMut(&'a T) -> K, + K: PartialOrd<K>,

🔬This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this slice are sorted using the given key extraction function.

+

Instead of comparing the slice’s elements directly, this function compares the keys of the +elements, as determined by f. Apart from that, it’s equivalent to is_sorted; see its +documentation for more information.

+
Examples
+
#![feature(is_sorted)]
+
+assert!(["c", "bb", "aaa"].is_sorted_by_key(|s| s.len()));
+assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));
+
1.52.0 · source

pub fn partition_point<P>(&self, pred: P) -> usizewhere + P: FnMut(&T) -> bool,

Returns the index of the partition point according to the given predicate +(the index of the first element of the second partition).

+

The slice is assumed to be partitioned according to the given predicate. +This means that all elements for which the predicate returns true are at the start of the slice +and all elements for which the predicate returns false are at the end. +For example, [7, 15, 3, 5, 4, 12, 6] is partitioned under the predicate x % 2 != 0 +(all odd numbers are at the start, all even at the end).

+

If this slice is not partitioned, the returned result is unspecified and meaningless, +as this method performs a kind of binary search.

+

See also binary_search, binary_search_by, and binary_search_by_key.

+
Examples
+
let v = [1, 2, 3, 3, 5, 6, 7];
+let i = v.partition_point(|&x| x < 5);
+
+assert_eq!(i, 4);
+assert!(v[..i].iter().all(|&x| x < 5));
+assert!(v[i..].iter().all(|&x| !(x < 5)));
+

If all elements of the slice match the predicate, including if the slice +is empty, then the length of the slice will be returned:

+ +
let a = [2, 4, 8];
+assert_eq!(a.partition_point(|x| x < &100), a.len());
+let a: [i32; 0] = [];
+assert_eq!(a.partition_point(|x| x < &100), 0);
+

If you want to insert an item to a sorted vector, while maintaining +sort order:

+ +
let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
+let num = 42;
+let idx = s.partition_point(|&x| x < num);
+s.insert(idx, num);
+assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
+
1.0.0 · source

pub fn to_vec(&self) -> Vec<T, Global>where + T: Clone,

Copies self into a new Vec.

+
Examples
+
let s = [10, 40, 30];
+let x = s.to_vec();
+// Here, `s` and `x` can be modified independently.
+
source

pub fn to_vec_in<A>(&self, alloc: A) -> Vec<T, A>where + A: Allocator, + T: Clone,

🔬This is a nightly-only experimental API. (allocator_api)

Copies self into a new Vec with an allocator.

+
Examples
+
#![feature(allocator_api)]
+
+use std::alloc::System;
+
+let s = [10, 40, 30];
+let x = s.to_vec_in(System);
+// Here, `s` and `x` can be modified independently.
+
1.40.0 · source

pub fn repeat(&self, n: usize) -> Vec<T, Global>where + T: Copy,

Creates a vector by copying a slice n times.

+
Panics
+

This function will panic if the capacity would overflow.

+
Examples
+

Basic usage:

+ +
assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
+

A panic upon overflow:

+ +
// this will panic at runtime
+b"0123456789abcdef".repeat(usize::MAX);
+
1.0.0 · source

pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where + [T]: Concat<Item>, + Item: ?Sized,

Flattens a slice of T into a single value Self::Output.

+
Examples
+
assert_eq!(["hello", "world"].concat(), "helloworld");
+assert_eq!([[1, 2], [3, 4]].concat(), [1, 2, 3, 4]);
+
1.3.0 · source

pub fn join<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

+
Examples
+
assert_eq!(["hello", "world"].join(" "), "hello world");
+assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
+assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
+
1.0.0 · source

pub fn connect<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

👎Deprecated since 1.3.0: renamed to join

Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

+
Examples
+
assert_eq!(["hello", "world"].connect(" "), "hello world");
+assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
+
1.23.0 · source

pub fn to_ascii_uppercase(&self) -> Vec<u8, Global>

Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII upper case equivalent.

+

ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, +but non-ASCII letters are unchanged.

+

To uppercase the value in-place, use make_ascii_uppercase.

+
1.23.0 · source

pub fn to_ascii_lowercase(&self) -> Vec<u8, Global>

Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII lower case equivalent.

+

ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, +but non-ASCII letters are unchanged.

+

To lowercase the value in-place, use make_ascii_lowercase.

+

Trait Implementations§

1.0.0 · source§

impl<T, A> Deref for Vec<T, A>where + A: Allocator,

§

type Target = [T]

The resulting type after dereferencing.
source§

fn deref(&self) -> &[T]

Dereferences the value.
\ No newline at end of file diff --git a/docs/algebra/algebra/milnor_algebra/type.PPartEntry.html b/docs/algebra/algebra/milnor_algebra/type.PPartEntry.html index de46b3d81..27e2cfaf0 100644 --- a/docs/algebra/algebra/milnor_algebra/type.PPartEntry.html +++ b/docs/algebra/algebra/milnor_algebra/type.PPartEntry.html @@ -1,4 +1,4 @@ -PPartEntry in algebra::algebra::milnor_algebra - Rust +PPartEntry in algebra::algebra::milnor_algebra - Rust @@ -23,4 +23,1041 @@ }); -

Type Definition algebra::algebra::milnor_algebra::PPartEntry

source ·
pub type PPartEntry = u32;
\ No newline at end of file +
pub type PPartEntry = u32;

Implementations§

source§

impl u32

1.43.0 · source

pub const MIN: u32 = 0u32

The smallest value that can be represented by this integer type.

+
Examples
+

Basic usage:

+ +
assert_eq!(u32::MIN, 0);
+
1.43.0 · source

pub const MAX: u32 = 4_294_967_295u32

The largest value that can be represented by this integer type +(232 − 1).

+
Examples
+

Basic usage:

+ +
assert_eq!(u32::MAX, 4294967295);
+
1.53.0 · source

pub const BITS: u32 = 32u32

The size of this integer type in bits.

+
Examples
+
assert_eq!(u32::BITS, 32);
+
1.0.0 · source

pub fn from_str_radix(src: &str, radix: u32) -> Result<u32, ParseIntError>

Converts a string slice in a given base to an integer.

+

The string is expected to be an optional + sign +followed by digits. +Leading and trailing whitespace represent an error. +Digits are a subset of these characters, depending on radix:

+
    +
  • 0-9
  • +
  • a-z
  • +
  • A-Z
  • +
+
Panics
+

This function panics if radix is not in the range from 2 to 36.

+
Examples
+

Basic usage:

+ +
assert_eq!(u32::from_str_radix("A", 16), Ok(10));
+
1.0.0 (const: 1.32.0) · source

pub const fn count_ones(self) -> u32

Returns the number of ones in the binary representation of self.

+
Examples
+

Basic usage:

+ +
let n = 0b01001100u32;
+
+assert_eq!(n.count_ones(), 3);
+
1.0.0 (const: 1.32.0) · source

pub const fn count_zeros(self) -> u32

Returns the number of zeros in the binary representation of self.

+
Examples
+

Basic usage:

+ +
assert_eq!(u32::MAX.count_zeros(), 0);
+
1.0.0 (const: 1.32.0) · source

pub const fn leading_zeros(self) -> u32

Returns the number of leading zeros in the binary representation of self.

+

Depending on what you’re doing with the value, you might also be interested in the +ilog2 function which returns a consistent number, even if the type widens.

+
Examples
+

Basic usage:

+ +
let n = u32::MAX >> 2;
+
+assert_eq!(n.leading_zeros(), 2);
+
1.0.0 (const: 1.32.0) · source

pub const fn trailing_zeros(self) -> u32

Returns the number of trailing zeros in the binary representation +of self.

+
Examples
+

Basic usage:

+ +
let n = 0b0101000u32;
+
+assert_eq!(n.trailing_zeros(), 3);
+
1.46.0 (const: 1.46.0) · source

pub const fn leading_ones(self) -> u32

Returns the number of leading ones in the binary representation of self.

+
Examples
+

Basic usage:

+ +
let n = !(u32::MAX >> 2);
+
+assert_eq!(n.leading_ones(), 2);
+
1.46.0 (const: 1.46.0) · source

pub const fn trailing_ones(self) -> u32

Returns the number of trailing ones in the binary representation +of self.

+
Examples
+

Basic usage:

+ +
let n = 0b1010111u32;
+
+assert_eq!(n.trailing_ones(), 3);
+
1.0.0 (const: 1.32.0) · source

pub const fn rotate_left(self, n: u32) -> u32

Shifts the bits to the left by a specified amount, n, +wrapping the truncated bits to the end of the resulting integer.

+

Please note this isn’t the same operation as the << shifting operator!

+
Examples
+

Basic usage:

+ +
let n = 0x10000b3u32;
+let m = 0xb301;
+
+assert_eq!(n.rotate_left(8), m);
+
1.0.0 (const: 1.32.0) · source

pub const fn rotate_right(self, n: u32) -> u32

Shifts the bits to the right by a specified amount, n, +wrapping the truncated bits to the beginning of the resulting +integer.

+

Please note this isn’t the same operation as the >> shifting operator!

+
Examples
+

Basic usage:

+ +
let n = 0xb301u32;
+let m = 0x10000b3;
+
+assert_eq!(n.rotate_right(8), m);
+
1.0.0 (const: 1.32.0) · source

pub const fn swap_bytes(self) -> u32

Reverses the byte order of the integer.

+
Examples
+

Basic usage:

+ +
let n = 0x12345678u32;
+let m = n.swap_bytes();
+
+assert_eq!(m, 0x78563412);
+
1.37.0 (const: 1.37.0) · source

pub const fn reverse_bits(self) -> u32

Reverses the order of bits in the integer. The least significant bit becomes the most significant bit, +second least-significant bit becomes second most-significant bit, etc.

+
Examples
+

Basic usage:

+ +
let n = 0x12345678u32;
+let m = n.reverse_bits();
+
+assert_eq!(m, 0x1e6a2c48);
+assert_eq!(0, 0u32.reverse_bits());
+
1.0.0 (const: 1.32.0) · source

pub const fn from_be(x: u32) -> u32

Converts an integer from big endian to the target’s endianness.

+

On big endian this is a no-op. On little endian the bytes are +swapped.

+
Examples
+

Basic usage:

+ +
let n = 0x1Au32;
+
+if cfg!(target_endian = "big") {
+    assert_eq!(u32::from_be(n), n)
+} else {
+    assert_eq!(u32::from_be(n), n.swap_bytes())
+}
+
1.0.0 (const: 1.32.0) · source

pub const fn from_le(x: u32) -> u32

Converts an integer from little endian to the target’s endianness.

+

On little endian this is a no-op. On big endian the bytes are +swapped.

+
Examples
+

Basic usage:

+ +
let n = 0x1Au32;
+
+if cfg!(target_endian = "little") {
+    assert_eq!(u32::from_le(n), n)
+} else {
+    assert_eq!(u32::from_le(n), n.swap_bytes())
+}
+
1.0.0 (const: 1.32.0) · source

pub const fn to_be(self) -> u32

Converts self to big endian from the target’s endianness.

+

On big endian this is a no-op. On little endian the bytes are +swapped.

+
Examples
+

Basic usage:

+ +
let n = 0x1Au32;
+
+if cfg!(target_endian = "big") {
+    assert_eq!(n.to_be(), n)
+} else {
+    assert_eq!(n.to_be(), n.swap_bytes())
+}
+
1.0.0 (const: 1.32.0) · source

pub const fn to_le(self) -> u32

Converts self to little endian from the target’s endianness.

+

On little endian this is a no-op. On big endian the bytes are +swapped.

+
Examples
+

Basic usage:

+ +
let n = 0x1Au32;
+
+if cfg!(target_endian = "little") {
+    assert_eq!(n.to_le(), n)
+} else {
+    assert_eq!(n.to_le(), n.swap_bytes())
+}
+
1.0.0 (const: 1.47.0) · source

pub const fn checked_add(self, rhs: u32) -> Option<u32>

Checked integer addition. Computes self + rhs, returning None +if overflow occurred.

+
Examples
+

Basic usage:

+ +
assert_eq!((u32::MAX - 2).checked_add(1), Some(u32::MAX - 1));
+assert_eq!((u32::MAX - 2).checked_add(3), None);
+
const: unstable · source

pub unsafe fn unchecked_add(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (unchecked_math)

Unchecked integer addition. Computes self + rhs, assuming overflow +cannot occur.

+
Safety
+

This results in undefined behavior when +self + rhs > u32::MAX or self + rhs < u32::MIN, +i.e. when checked_add would return None.

+
1.66.0 (const: 1.66.0) · source

pub const fn checked_add_signed(self, rhs: i32) -> Option<u32>

Checked addition with a signed integer. Computes self + rhs, +returning None if overflow occurred.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.checked_add_signed(2), Some(3));
+assert_eq!(1u32.checked_add_signed(-2), None);
+assert_eq!((u32::MAX - 2).checked_add_signed(3), None);
+
1.0.0 (const: 1.47.0) · source

pub const fn checked_sub(self, rhs: u32) -> Option<u32>

Checked integer subtraction. Computes self - rhs, returning +None if overflow occurred.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.checked_sub(1), Some(0));
+assert_eq!(0u32.checked_sub(1), None);
+
const: unstable · source

pub unsafe fn unchecked_sub(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (unchecked_math)

Unchecked integer subtraction. Computes self - rhs, assuming overflow +cannot occur.

+
Safety
+

This results in undefined behavior when +self - rhs > u32::MAX or self - rhs < u32::MIN, +i.e. when checked_sub would return None.

+
1.0.0 (const: 1.47.0) · source

pub const fn checked_mul(self, rhs: u32) -> Option<u32>

Checked integer multiplication. Computes self * rhs, returning +None if overflow occurred.

+
Examples
+

Basic usage:

+ +
assert_eq!(5u32.checked_mul(1), Some(5));
+assert_eq!(u32::MAX.checked_mul(2), None);
+
const: unstable · source

pub unsafe fn unchecked_mul(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (unchecked_math)

Unchecked integer multiplication. Computes self * rhs, assuming overflow +cannot occur.

+
Safety
+

This results in undefined behavior when +self * rhs > u32::MAX or self * rhs < u32::MIN, +i.e. when checked_mul would return None.

+
1.0.0 (const: 1.52.0) · source

pub const fn checked_div(self, rhs: u32) -> Option<u32>

Checked integer division. Computes self / rhs, returning None +if rhs == 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(128u32.checked_div(2), Some(64));
+assert_eq!(1u32.checked_div(0), None);
+
1.38.0 (const: 1.52.0) · source

pub const fn checked_div_euclid(self, rhs: u32) -> Option<u32>

Checked Euclidean division. Computes self.div_euclid(rhs), returning None +if rhs == 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(128u32.checked_div_euclid(2), Some(64));
+assert_eq!(1u32.checked_div_euclid(0), None);
+
1.7.0 (const: 1.52.0) · source

pub const fn checked_rem(self, rhs: u32) -> Option<u32>

Checked integer remainder. Computes self % rhs, returning None +if rhs == 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(5u32.checked_rem(2), Some(1));
+assert_eq!(5u32.checked_rem(0), None);
+
1.38.0 (const: 1.52.0) · source

pub const fn checked_rem_euclid(self, rhs: u32) -> Option<u32>

Checked Euclidean modulo. Computes self.rem_euclid(rhs), returning None +if rhs == 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(5u32.checked_rem_euclid(2), Some(1));
+assert_eq!(5u32.checked_rem_euclid(0), None);
+
1.67.0 (const: 1.67.0) · source

pub const fn ilog(self, base: u32) -> u32

Returns the logarithm of the number with respect to an arbitrary base, +rounded down.

+

This method might not be optimized owing to implementation details; +ilog2 can produce results more efficiently for base 2, and ilog10 +can produce results more efficiently for base 10.

+
Panics
+

This function will panic if self is zero, or if base is less than 2.

+
Examples
+
assert_eq!(5u32.ilog(5), 1);
+
1.67.0 (const: 1.67.0) · source

pub const fn ilog2(self) -> u32

Returns the base 2 logarithm of the number, rounded down.

+
Panics
+

This function will panic if self is zero.

+
Examples
+
assert_eq!(2u32.ilog2(), 1);
+
1.67.0 (const: 1.67.0) · source

pub const fn ilog10(self) -> u32

Returns the base 10 logarithm of the number, rounded down.

+
Panics
+

This function will panic if self is zero.

+
Example
+
assert_eq!(10u32.ilog10(), 1);
+
1.67.0 (const: 1.67.0) · source

pub const fn checked_ilog(self, base: u32) -> Option<u32>

Returns the logarithm of the number with respect to an arbitrary base, +rounded down.

+

Returns None if the number is zero, or if the base is not at least 2.

+

This method might not be optimized owing to implementation details; +checked_ilog2 can produce results more efficiently for base 2, and +checked_ilog10 can produce results more efficiently for base 10.

+
Examples
+
assert_eq!(5u32.checked_ilog(5), Some(1));
+
1.67.0 (const: 1.67.0) · source

pub const fn checked_ilog2(self) -> Option<u32>

Returns the base 2 logarithm of the number, rounded down.

+

Returns None if the number is zero.

+
Examples
+
assert_eq!(2u32.checked_ilog2(), Some(1));
+
1.67.0 (const: 1.67.0) · source

pub const fn checked_ilog10(self) -> Option<u32>

Returns the base 10 logarithm of the number, rounded down.

+

Returns None if the number is zero.

+
Examples
+
assert_eq!(10u32.checked_ilog10(), Some(1));
+
1.7.0 (const: 1.47.0) · source

pub const fn checked_neg(self) -> Option<u32>

Checked negation. Computes -self, returning None unless self == 0.

+

Note that negating any positive integer will overflow.

+
Examples
+

Basic usage:

+ +
assert_eq!(0u32.checked_neg(), Some(0));
+assert_eq!(1u32.checked_neg(), None);
+
1.7.0 (const: 1.47.0) · source

pub const fn checked_shl(self, rhs: u32) -> Option<u32>

Checked shift left. Computes self << rhs, returning None +if rhs is larger than or equal to the number of bits in self.

+
Examples
+

Basic usage:

+ +
assert_eq!(0x1u32.checked_shl(4), Some(0x10));
+assert_eq!(0x10u32.checked_shl(129), None);
+
const: unstable · source

pub unsafe fn unchecked_shl(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (unchecked_math)

Unchecked shift left. Computes self << rhs, assuming that +rhs is less than the number of bits in self.

+
Safety
+

This results in undefined behavior if rhs is larger than +or equal to the number of bits in self, +i.e. when checked_shl would return None.

+
1.7.0 (const: 1.47.0) · source

pub const fn checked_shr(self, rhs: u32) -> Option<u32>

Checked shift right. Computes self >> rhs, returning None +if rhs is larger than or equal to the number of bits in self.

+
Examples
+

Basic usage:

+ +
assert_eq!(0x10u32.checked_shr(4), Some(0x1));
+assert_eq!(0x10u32.checked_shr(129), None);
+
const: unstable · source

pub unsafe fn unchecked_shr(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (unchecked_math)

Unchecked shift right. Computes self >> rhs, assuming that +rhs is less than the number of bits in self.

+
Safety
+

This results in undefined behavior if rhs is larger than +or equal to the number of bits in self, +i.e. when checked_shr would return None.

+
1.34.0 (const: 1.50.0) · source

pub const fn checked_pow(self, exp: u32) -> Option<u32>

Checked exponentiation. Computes self.pow(exp), returning None if +overflow occurred.

+
Examples
+

Basic usage:

+ +
assert_eq!(2u32.checked_pow(5), Some(32));
+assert_eq!(u32::MAX.checked_pow(2), None);
+
1.0.0 (const: 1.47.0) · source

pub const fn saturating_add(self, rhs: u32) -> u32

Saturating integer addition. Computes self + rhs, saturating at +the numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.saturating_add(1), 101);
+assert_eq!(u32::MAX.saturating_add(127), u32::MAX);
+
1.66.0 (const: 1.66.0) · source

pub const fn saturating_add_signed(self, rhs: i32) -> u32

Saturating addition with a signed integer. Computes self + rhs, +saturating at the numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.saturating_add_signed(2), 3);
+assert_eq!(1u32.saturating_add_signed(-2), 0);
+assert_eq!((u32::MAX - 2).saturating_add_signed(4), u32::MAX);
+
1.0.0 (const: 1.47.0) · source

pub const fn saturating_sub(self, rhs: u32) -> u32

Saturating integer subtraction. Computes self - rhs, saturating +at the numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.saturating_sub(27), 73);
+assert_eq!(13u32.saturating_sub(127), 0);
+
1.7.0 (const: 1.47.0) · source

pub const fn saturating_mul(self, rhs: u32) -> u32

Saturating integer multiplication. Computes self * rhs, +saturating at the numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(2u32.saturating_mul(10), 20);
+assert_eq!((u32::MAX).saturating_mul(10), u32::MAX);
+
1.58.0 (const: 1.58.0) · source

pub const fn saturating_div(self, rhs: u32) -> u32

Saturating integer division. Computes self / rhs, saturating at the +numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(5u32.saturating_div(2), 2);
+
+ +
let _ = 1u32.saturating_div(0);
+
+
1.34.0 (const: 1.50.0) · source

pub const fn saturating_pow(self, exp: u32) -> u32

Saturating integer exponentiation. Computes self.pow(exp), +saturating at the numeric bounds instead of overflowing.

+
Examples
+

Basic usage:

+ +
assert_eq!(4u32.saturating_pow(3), 64);
+assert_eq!(u32::MAX.saturating_pow(2), u32::MAX);
+
1.0.0 (const: 1.32.0) · source

pub const fn wrapping_add(self, rhs: u32) -> u32

Wrapping (modular) addition. Computes self + rhs, +wrapping around at the boundary of the type.

+
Examples
+

Basic usage:

+ +
assert_eq!(200u32.wrapping_add(55), 255);
+assert_eq!(200u32.wrapping_add(u32::MAX), 199);
+
1.66.0 (const: 1.66.0) · source

pub const fn wrapping_add_signed(self, rhs: i32) -> u32

Wrapping (modular) addition with a signed integer. Computes +self + rhs, wrapping around at the boundary of the type.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.wrapping_add_signed(2), 3);
+assert_eq!(1u32.wrapping_add_signed(-2), u32::MAX);
+assert_eq!((u32::MAX - 2).wrapping_add_signed(4), 1);
+
1.0.0 (const: 1.32.0) · source

pub const fn wrapping_sub(self, rhs: u32) -> u32

Wrapping (modular) subtraction. Computes self - rhs, +wrapping around at the boundary of the type.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.wrapping_sub(100), 0);
+assert_eq!(100u32.wrapping_sub(u32::MAX), 101);
+
1.0.0 (const: 1.32.0) · source

pub const fn wrapping_mul(self, rhs: u32) -> u32

Wrapping (modular) multiplication. Computes self * rhs, wrapping around at the boundary of the type.

+
Examples
+

Basic usage:

+

Please note that this example is shared between integer types. +Which explains why u8 is used here.

+ +
assert_eq!(10u8.wrapping_mul(12), 120);
+assert_eq!(25u8.wrapping_mul(12), 44);
+
1.2.0 (const: 1.52.0) · source

pub const fn wrapping_div(self, rhs: u32) -> u32

Wrapping (modular) division. Computes self / rhs. +Wrapped division on unsigned types is just normal division. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.wrapping_div(10), 10);
+
1.38.0 (const: 1.52.0) · source

pub const fn wrapping_div_euclid(self, rhs: u32) -> u32

Wrapping Euclidean division. Computes self.div_euclid(rhs). +Wrapped division on unsigned types is just normal division. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.wrapping_div(rhs).

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.wrapping_div_euclid(10), 10);
+
1.2.0 (const: 1.52.0) · source

pub const fn wrapping_rem(self, rhs: u32) -> u32

Wrapping (modular) remainder. Computes self % rhs. +Wrapped remainder calculation on unsigned types is +just the regular remainder calculation. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.wrapping_rem(10), 0);
+
1.38.0 (const: 1.52.0) · source

pub const fn wrapping_rem_euclid(self, rhs: u32) -> u32

Wrapping Euclidean modulo. Computes self.rem_euclid(rhs). +Wrapped modulo calculation on unsigned types is +just the regular remainder calculation. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.wrapping_rem(rhs).

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.wrapping_rem_euclid(10), 0);
+
1.2.0 (const: 1.32.0) · source

pub const fn wrapping_neg(self) -> u32

Wrapping (modular) negation. Computes -self, +wrapping around at the boundary of the type.

+

Since unsigned types do not have negative equivalents +all applications of this function will wrap (except for -0). +For values smaller than the corresponding signed type’s maximum +the result is the same as casting the corresponding signed value. +Any larger values are equivalent to MAX + 1 - (val - MAX - 1) where +MAX is the corresponding signed type’s maximum.

+
Examples
+

Basic usage:

+ +
assert_eq!(0_u32.wrapping_neg(), 0);
+assert_eq!(u32::MAX.wrapping_neg(), 1);
+assert_eq!(13_u32.wrapping_neg(), (!13) + 1);
+assert_eq!(42_u32.wrapping_neg(), !(42 - 1));
+
1.2.0 (const: 1.32.0) · source

pub const fn wrapping_shl(self, rhs: u32) -> u32

Panic-free bitwise shift-left; yields self << mask(rhs), +where mask removes any high-order bits of rhs that +would cause the shift to exceed the bitwidth of the type.

+

Note that this is not the same as a rotate-left; the +RHS of a wrapping shift-left is restricted to the range +of the type, rather than the bits shifted out of the LHS +being returned to the other end. The primitive integer +types all implement a rotate_left function, +which may be what you want instead.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.wrapping_shl(7), 128);
+assert_eq!(1u32.wrapping_shl(128), 1);
+
1.2.0 (const: 1.32.0) · source

pub const fn wrapping_shr(self, rhs: u32) -> u32

Panic-free bitwise shift-right; yields self >> mask(rhs), +where mask removes any high-order bits of rhs that +would cause the shift to exceed the bitwidth of the type.

+

Note that this is not the same as a rotate-right; the +RHS of a wrapping shift-right is restricted to the range +of the type, rather than the bits shifted out of the LHS +being returned to the other end. The primitive integer +types all implement a rotate_right function, +which may be what you want instead.

+
Examples
+

Basic usage:

+ +
assert_eq!(128u32.wrapping_shr(7), 1);
+assert_eq!(128u32.wrapping_shr(128), 128);
+
1.34.0 (const: 1.50.0) · source

pub const fn wrapping_pow(self, exp: u32) -> u32

Wrapping (modular) exponentiation. Computes self.pow(exp), +wrapping around at the boundary of the type.

+
Examples
+

Basic usage:

+ +
assert_eq!(3u32.wrapping_pow(5), 243);
+assert_eq!(3u8.wrapping_pow(6), 217);
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_add(self, rhs: u32) -> (u32, bool)

Calculates self + rhs

+

Returns a tuple of the addition along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_add(2), (7, false));
+assert_eq!(u32::MAX.overflowing_add(1), (0, true));
+
const: unstable · source

pub fn carrying_add(self, rhs: u32, carry: bool) -> (u32, bool)

🔬This is a nightly-only experimental API. (bigint_helper_methods)

Calculates self + rhs + carry and returns a tuple containing +the sum and the output carry.

+

Performs “ternary addition” of two integer operands and a carry-in +bit, and returns an output integer and a carry-out bit. This allows +chaining together multiple additions to create a wider addition, and +can be useful for bignum addition.

+

This can be thought of as a 32-bit “full adder”, in the electronics sense.

+

If the input carry is false, this method is equivalent to +overflowing_add, and the output carry is +equal to the overflow flag. Note that although carry and overflow +flags are similar for unsigned integers, they are different for +signed integers.

+
Examples
+
#![feature(bigint_helper_methods)]
+
+//    3  MAX    (a = 3 × 2^32 + 2^32 - 1)
+// +  5    7    (b = 5 × 2^32 + 7)
+// ---------
+//    9    6    (sum = 9 × 2^32 + 6)
+
+let (a1, a0): (u32, u32) = (3, u32::MAX);
+let (b1, b0): (u32, u32) = (5, 7);
+let carry0 = false;
+
+let (sum0, carry1) = a0.carrying_add(b0, carry0);
+assert_eq!(carry1, true);
+let (sum1, carry2) = a1.carrying_add(b1, carry1);
+assert_eq!(carry2, false);
+
+assert_eq!((sum1, sum0), (9, 6));
+
1.66.0 (const: 1.66.0) · source

pub const fn overflowing_add_signed(self, rhs: i32) -> (u32, bool)

Calculates self + rhs with a signed rhs

+

Returns a tuple of the addition along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

+
Examples
+

Basic usage:

+ +
assert_eq!(1u32.overflowing_add_signed(2), (3, false));
+assert_eq!(1u32.overflowing_add_signed(-2), (u32::MAX, true));
+assert_eq!((u32::MAX - 2).overflowing_add_signed(4), (1, true));
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_sub(self, rhs: u32) -> (u32, bool)

Calculates self - rhs

+

Returns a tuple of the subtraction along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_sub(2), (3, false));
+assert_eq!(0u32.overflowing_sub(1), (u32::MAX, true));
+
const: unstable · source

pub fn borrowing_sub(self, rhs: u32, borrow: bool) -> (u32, bool)

🔬This is a nightly-only experimental API. (bigint_helper_methods)

Calculates selfrhsborrow and returns a tuple +containing the difference and the output borrow.

+

Performs “ternary subtraction” by subtracting both an integer +operand and a borrow-in bit from self, and returns an output +integer and a borrow-out bit. This allows chaining together multiple +subtractions to create a wider subtraction, and can be useful for +bignum subtraction.

+
Examples
+
#![feature(bigint_helper_methods)]
+
+//    9    6    (a = 9 × 2^32 + 6)
+// -  5    7    (b = 5 × 2^32 + 7)
+// ---------
+//    3  MAX    (diff = 3 × 2^32 + 2^32 - 1)
+
+let (a1, a0): (u32, u32) = (9, 6);
+let (b1, b0): (u32, u32) = (5, 7);
+let borrow0 = false;
+
+let (diff0, borrow1) = a0.borrowing_sub(b0, borrow0);
+assert_eq!(borrow1, true);
+let (diff1, borrow2) = a1.borrowing_sub(b1, borrow1);
+assert_eq!(borrow2, false);
+
+assert_eq!((diff1, diff0), (3, u32::MAX));
+
1.60.0 (const: 1.60.0) · source

pub const fn abs_diff(self, other: u32) -> u32

Computes the absolute difference between self and other.

+
Examples
+

Basic usage:

+ +
assert_eq!(100u32.abs_diff(80), 20u32);
+assert_eq!(100u32.abs_diff(110), 10u32);
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_mul(self, rhs: u32) -> (u32, bool)

Calculates the multiplication of self and rhs.

+

Returns a tuple of the multiplication along with a boolean +indicating whether an arithmetic overflow would occur. If an +overflow would have occurred then the wrapped value is returned.

+
Examples
+

Basic usage:

+

Please note that this example is shared between integer types. +Which explains why u32 is used here.

+ +
assert_eq!(5u32.overflowing_mul(2), (10, false));
+assert_eq!(1_000_000_000u32.overflowing_mul(10), (1410065408, true));
+
1.7.0 (const: 1.52.0) · source

pub const fn overflowing_div(self, rhs: u32) -> (u32, bool)

Calculates the divisor when self is divided by rhs.

+

Returns a tuple of the divisor along with a boolean indicating +whether an arithmetic overflow would occur. Note that for unsigned +integers overflow never occurs, so the second value is always +false.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_div(2), (2, false));
+
1.38.0 (const: 1.52.0) · source

pub const fn overflowing_div_euclid(self, rhs: u32) -> (u32, bool)

Calculates the quotient of Euclidean division self.div_euclid(rhs).

+

Returns a tuple of the divisor along with a boolean indicating +whether an arithmetic overflow would occur. Note that for unsigned +integers overflow never occurs, so the second value is always +false. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.overflowing_div(rhs).

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_div_euclid(2), (2, false));
+
1.7.0 (const: 1.52.0) · source

pub const fn overflowing_rem(self, rhs: u32) -> (u32, bool)

Calculates the remainder when self is divided by rhs.

+

Returns a tuple of the remainder after dividing along with a boolean +indicating whether an arithmetic overflow would occur. Note that for +unsigned integers overflow never occurs, so the second value is +always false.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_rem(2), (1, false));
+
1.38.0 (const: 1.52.0) · source

pub const fn overflowing_rem_euclid(self, rhs: u32) -> (u32, bool)

Calculates the remainder self.rem_euclid(rhs) as if by Euclidean division.

+

Returns a tuple of the modulo after dividing along with a boolean +indicating whether an arithmetic overflow would occur. Note that for +unsigned integers overflow never occurs, so the second value is +always false. +Since, for the positive integers, all common +definitions of division are equal, this operation +is exactly equal to self.overflowing_rem(rhs).

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage

+ +
assert_eq!(5u32.overflowing_rem_euclid(2), (1, false));
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_neg(self) -> (u32, bool)

Negates self in an overflowing fashion.

+

Returns !self + 1 using wrapping operations to return the value +that represents the negation of this unsigned value. Note that for +positive unsigned values overflow always occurs, but negating 0 does +not overflow.

+
Examples
+

Basic usage

+ +
assert_eq!(0u32.overflowing_neg(), (0, false));
+assert_eq!(2u32.overflowing_neg(), (-2i32 as u32, true));
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_shl(self, rhs: u32) -> (u32, bool)

Shifts self left by rhs bits.

+

Returns a tuple of the shifted version of self along with a boolean +indicating whether the shift value was larger than or equal to the +number of bits. If the shift value is too large, then value is +masked (N-1) where N is the number of bits, and this value is then +used to perform the shift.

+
Examples
+

Basic usage

+ +
assert_eq!(0x1u32.overflowing_shl(4), (0x10, false));
+assert_eq!(0x1u32.overflowing_shl(132), (0x10, true));
+
1.7.0 (const: 1.32.0) · source

pub const fn overflowing_shr(self, rhs: u32) -> (u32, bool)

Shifts self right by rhs bits.

+

Returns a tuple of the shifted version of self along with a boolean +indicating whether the shift value was larger than or equal to the +number of bits. If the shift value is too large, then value is +masked (N-1) where N is the number of bits, and this value is then +used to perform the shift.

+
Examples
+

Basic usage

+ +
assert_eq!(0x10u32.overflowing_shr(4), (0x1, false));
+assert_eq!(0x10u32.overflowing_shr(132), (0x1, true));
+
1.34.0 (const: 1.50.0) · source

pub const fn overflowing_pow(self, exp: u32) -> (u32, bool)

Raises self to the power of exp, using exponentiation by squaring.

+

Returns a tuple of the exponentiation along with a bool indicating +whether an overflow happened.

+
Examples
+

Basic usage:

+ +
assert_eq!(3u32.overflowing_pow(5), (243, false));
+assert_eq!(3u8.overflowing_pow(6), (217, true));
+
1.0.0 (const: 1.50.0) · source

pub const fn pow(self, exp: u32) -> u32

Raises self to the power of exp, using exponentiation by squaring.

+
Examples
+

Basic usage:

+ +
assert_eq!(2u32.pow(5), 32);
+
const: unstable · source

pub fn isqrt(self) -> u32

🔬This is a nightly-only experimental API. (isqrt)

Returns the square root of the number, rounded down.

+
Examples
+

Basic usage:

+ +
#![feature(isqrt)]
+assert_eq!(10u32.isqrt(), 3);
+
1.38.0 (const: 1.52.0) · source

pub const fn div_euclid(self, rhs: u32) -> u32

Performs Euclidean division.

+

Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self / rhs.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(7u32.div_euclid(4), 1); // or any other integer type
+
1.38.0 (const: 1.52.0) · source

pub const fn rem_euclid(self, rhs: u32) -> u32

Calculates the least remainder of self (mod rhs).

+

Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self % rhs.

+
Panics
+

This function will panic if rhs is 0.

+
Examples
+

Basic usage:

+ +
assert_eq!(7u32.rem_euclid(4), 3); // or any other integer type
+
source

pub const fn div_floor(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (int_roundings)

Calculates the quotient of self and rhs, rounding the result towards negative infinity.

+

This is the same as performing self / rhs for all unsigned integers.

+
Panics
+

This function will panic if rhs is zero.

+
Examples
+

Basic usage:

+ +
#![feature(int_roundings)]
+assert_eq!(7_u32.div_floor(4), 1);
+
1.73.0 (const: 1.73.0) · source

pub const fn div_ceil(self, rhs: u32) -> u32

Calculates the quotient of self and rhs, rounding the result towards positive infinity.

+
Panics
+

This function will panic if rhs is zero.

+
Overflow behavior
+

On overflow, this function will panic if overflow checks are enabled (default in debug +mode) and wrap if overflow checks are disabled (default in release mode).

+
Examples
+

Basic usage:

+ +
assert_eq!(7_u32.div_ceil(4), 2);
+
1.73.0 (const: 1.73.0) · source

pub const fn next_multiple_of(self, rhs: u32) -> u32

Calculates the smallest value greater than or equal to self that +is a multiple of rhs.

+
Panics
+

This function will panic if rhs is zero.

+
Overflow behavior
+

On overflow, this function will panic if overflow checks are enabled (default in debug +mode) and wrap if overflow checks are disabled (default in release mode).

+
Examples
+

Basic usage:

+ +
assert_eq!(16_u32.next_multiple_of(8), 16);
+assert_eq!(23_u32.next_multiple_of(8), 24);
+
1.73.0 (const: 1.73.0) · source

pub const fn checked_next_multiple_of(self, rhs: u32) -> Option<u32>

Calculates the smallest value greater than or equal to self that +is a multiple of rhs. Returns None if rhs is zero or the +operation would result in overflow.

+
Examples
+

Basic usage:

+ +
assert_eq!(16_u32.checked_next_multiple_of(8), Some(16));
+assert_eq!(23_u32.checked_next_multiple_of(8), Some(24));
+assert_eq!(1_u32.checked_next_multiple_of(0), None);
+assert_eq!(u32::MAX.checked_next_multiple_of(2), None);
+
1.0.0 (const: 1.32.0) · source

pub const fn is_power_of_two(self) -> bool

Returns true if and only if self == 2^k for some k.

+
Examples
+

Basic usage:

+ +
assert!(16u32.is_power_of_two());
+assert!(!10u32.is_power_of_two());
+
1.0.0 (const: 1.50.0) · source

pub const fn next_power_of_two(self) -> u32

Returns the smallest power of two greater than or equal to self.

+

When return value overflows (i.e., self > (1 << (N-1)) for type +uN), it panics in debug mode and the return value is wrapped to 0 in +release mode (the only situation in which method can return 0).

+
Examples
+

Basic usage:

+ +
assert_eq!(2u32.next_power_of_two(), 2);
+assert_eq!(3u32.next_power_of_two(), 4);
+
1.0.0 (const: 1.50.0) · source

pub const fn checked_next_power_of_two(self) -> Option<u32>

Returns the smallest power of two greater than or equal to n. If +the next power of two is greater than the type’s maximum value, +None is returned, otherwise the power of two is wrapped in Some.

+
Examples
+

Basic usage:

+ +
assert_eq!(2u32.checked_next_power_of_two(), Some(2));
+assert_eq!(3u32.checked_next_power_of_two(), Some(4));
+assert_eq!(u32::MAX.checked_next_power_of_two(), None);
+
const: unstable · source

pub fn wrapping_next_power_of_two(self) -> u32

🔬This is a nightly-only experimental API. (wrapping_next_power_of_two)

Returns the smallest power of two greater than or equal to n. If +the next power of two is greater than the type’s maximum value, +the return value is wrapped to 0.

+
Examples
+

Basic usage:

+ +
#![feature(wrapping_next_power_of_two)]
+
+assert_eq!(2u32.wrapping_next_power_of_two(), 2);
+assert_eq!(3u32.wrapping_next_power_of_two(), 4);
+assert_eq!(u32::MAX.wrapping_next_power_of_two(), 0);
+
1.32.0 (const: 1.44.0) · source

pub const fn to_be_bytes(self) -> [u8; 4]

Return the memory representation of this integer as a byte array in +big-endian (network) byte order.

+
Examples
+
let bytes = 0x12345678u32.to_be_bytes();
+assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);
+
1.32.0 (const: 1.44.0) · source

pub const fn to_le_bytes(self) -> [u8; 4]

Return the memory representation of this integer as a byte array in +little-endian byte order.

+
Examples
+
let bytes = 0x12345678u32.to_le_bytes();
+assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);
+
1.32.0 (const: 1.44.0) · source

pub const fn to_ne_bytes(self) -> [u8; 4]

Return the memory representation of this integer as a byte array in +native byte order.

+

As the target platform’s native endianness is used, portable code +should use to_be_bytes or to_le_bytes, as appropriate, +instead.

+
Examples
+
let bytes = 0x12345678u32.to_ne_bytes();
+assert_eq!(
+    bytes,
+    if cfg!(target_endian = "big") {
+        [0x12, 0x34, 0x56, 0x78]
+    } else {
+        [0x78, 0x56, 0x34, 0x12]
+    }
+);
+
1.32.0 (const: 1.44.0) · source

pub const fn from_be_bytes(bytes: [u8; 4]) -> u32

Create a native endian integer value from its representation +as a byte array in big endian.

+
Examples
+
let value = u32::from_be_bytes([0x12, 0x34, 0x56, 0x78]);
+assert_eq!(value, 0x12345678);
+

When starting from a slice rather than an array, fallible conversion APIs can be used:

+ +
fn read_be_u32(input: &mut &[u8]) -> u32 {
+    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
+    *input = rest;
+    u32::from_be_bytes(int_bytes.try_into().unwrap())
+}
+
1.32.0 (const: 1.44.0) · source

pub const fn from_le_bytes(bytes: [u8; 4]) -> u32

Create a native endian integer value from its representation +as a byte array in little endian.

+
Examples
+
let value = u32::from_le_bytes([0x78, 0x56, 0x34, 0x12]);
+assert_eq!(value, 0x12345678);
+

When starting from a slice rather than an array, fallible conversion APIs can be used:

+ +
fn read_le_u32(input: &mut &[u8]) -> u32 {
+    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
+    *input = rest;
+    u32::from_le_bytes(int_bytes.try_into().unwrap())
+}
+
1.32.0 (const: 1.44.0) · source

pub const fn from_ne_bytes(bytes: [u8; 4]) -> u32

Create a native endian integer value from its memory representation +as a byte array in native endianness.

+

As the target platform’s native endianness is used, portable code +likely wants to use from_be_bytes or from_le_bytes, as +appropriate instead.

+
Examples
+
let value = u32::from_ne_bytes(if cfg!(target_endian = "big") {
+    [0x12, 0x34, 0x56, 0x78]
+} else {
+    [0x78, 0x56, 0x34, 0x12]
+});
+assert_eq!(value, 0x12345678);
+

When starting from a slice rather than an array, fallible conversion APIs can be used:

+ +
fn read_ne_u32(input: &mut &[u8]) -> u32 {
+    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
+    *input = rest;
+    u32::from_ne_bytes(int_bytes.try_into().unwrap())
+}
+
1.0.0 (const: 1.32.0) · source

pub const fn min_value() -> u32

👎Deprecating in a future Rust version: replaced by the MIN associated constant on this type

New code should prefer to use +u32::MIN instead.

+

Returns the smallest value that can be represented by this integer type.

+
1.0.0 (const: 1.32.0) · source

pub const fn max_value() -> u32

👎Deprecating in a future Rust version: replaced by the MAX associated constant on this type

New code should prefer to use +u32::MAX instead.

+

Returns the largest value that can be represented by this integer type.

+
const: unstable · source

pub fn widening_mul(self, rhs: u32) -> (u32, u32)

🔬This is a nightly-only experimental API. (bigint_helper_methods)

Calculates the complete product self * rhs without the possibility to overflow.

+

This returns the low-order (wrapping) bits and the high-order (overflow) bits +of the result as two separate values, in that order.

+

If you also need to add a carry to the wide result, then you want +Self::carrying_mul instead.

+
Examples
+

Basic usage:

+

Please note that this example is shared between integer types. +Which explains why u32 is used here.

+ +
#![feature(bigint_helper_methods)]
+assert_eq!(5u32.widening_mul(2), (10, 0));
+assert_eq!(1_000_000_000u32.widening_mul(10), (1410065408, 2));
+
const: unstable · source

pub fn carrying_mul(self, rhs: u32, carry: u32) -> (u32, u32)

🔬This is a nightly-only experimental API. (bigint_helper_methods)

Calculates the “full multiplication” self * rhs + carry +without the possibility to overflow.

+

This returns the low-order (wrapping) bits and the high-order (overflow) bits +of the result as two separate values, in that order.

+

Performs “long multiplication” which takes in an extra amount to add, and may return an +additional amount of overflow. This allows for chaining together multiple +multiplications to create “big integers” which represent larger values.

+

If you don’t need the carry, then you can use Self::widening_mul instead.

+
Examples
+

Basic usage:

+

Please note that this example is shared between integer types. +Which explains why u32 is used here.

+ +
#![feature(bigint_helper_methods)]
+assert_eq!(5u32.carrying_mul(2, 0), (10, 0));
+assert_eq!(5u32.carrying_mul(2, 10), (20, 0));
+assert_eq!(1_000_000_000u32.carrying_mul(10, 0), (1410065408, 2));
+assert_eq!(1_000_000_000u32.carrying_mul(10, 10), (1410065418, 2));
+assert_eq!(u32::MAX.carrying_mul(u32::MAX, u32::MAX), (0, u32::MAX));
+

This is the core operation needed for scalar multiplication when +implementing it for wider-than-native types.

+ +
#![feature(bigint_helper_methods)]
+fn scalar_mul_eq(little_endian_digits: &mut Vec<u16>, multiplicand: u16) {
+    let mut carry = 0;
+    for d in little_endian_digits.iter_mut() {
+        (*d, carry) = d.carrying_mul(multiplicand, carry);
+    }
+    if carry != 0 {
+        little_endian_digits.push(carry);
+    }
+}
+
+let mut v = vec![10, 20];
+scalar_mul_eq(&mut v, 3);
+assert_eq!(v, [30, 60]);
+
+assert_eq!(0x87654321_u64 * 0xFEED, 0x86D3D159E38D);
+let mut v = vec![0x4321, 0x8765];
+scalar_mul_eq(&mut v, 0xFEED);
+assert_eq!(v, [0xE38D, 0xD159, 0x86D3]);
+

If carry is zero, this is similar to overflowing_mul, +except that it gives the value of the overflow instead of just whether one happened:

+ +
#![feature(bigint_helper_methods)]
+let r = u8::carrying_mul(7, 13, 0);
+assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(7, 13));
+let r = u8::carrying_mul(13, 42, 0);
+assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(13, 42));
+

The value of the first field in the returned tuple matches what you’d get +by combining the wrapping_mul and +wrapping_add methods:

+ +
#![feature(bigint_helper_methods)]
+assert_eq!(
+    789_u16.carrying_mul(456, 123).0,
+    789_u16.wrapping_mul(456).wrapping_add(123),
+);
+
const: unstable · source

pub fn midpoint(self, rhs: u32) -> u32

🔬This is a nightly-only experimental API. (num_midpoint)

Calculates the middle point of self and rhs.

+

midpoint(a, b) is (a + b) >> 1 as if it were performed in a +sufficiently-large signed integral type. This implies that the result is +always rounded towards negative infinity and that no overflow will ever occur.

+
Examples
+
#![feature(num_midpoint)]
+assert_eq!(0u32.midpoint(4), 2);
+assert_eq!(1u32.midpoint(4), 2);
+

Trait Implementations§

1.0.0 · source§

impl Add<&u32> for u32

§

type Output = <u32 as Add<u32>>::Output

The resulting type after applying the + operator.
source§

fn add(self, other: &u32) -> <u32 as Add<u32>>::Output

Performs the + operation. Read more
1.0.0 · source§

impl Add<u32> for u32

§

type Output = u32

The resulting type after applying the + operator.
source§

fn add(self, other: u32) -> u32

Performs the + operation. Read more
1.22.0 · source§

impl AddAssign<&u32> for u32

source§

fn add_assign(&mut self, other: &u32)

Performs the += operation. Read more
1.8.0 · source§

impl AddAssign<u32> for u32

source§

fn add_assign(&mut self, other: u32)

Performs the += operation. Read more
1.0.0 · source§

impl Binary for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
source§

impl Binomial for u32

source§

fn multinomial2(l: &[u32]) -> u32

mod 2 multinomial coefficient
source§

fn binomial2(n: u32, k: u32) -> u32

mod 2 binomial coefficient n choose k
source§

fn multinomial_odd(p_: ValidPrime, l: &mut [u32]) -> u32

Computes the multinomial coefficient mod p using Lucas’ theorem. This modifies the +underlying list. For p = 2 it is more efficient to use multinomial2
source§

fn binomial_odd(p_: ValidPrime, n: u32, k: u32) -> u32

Compute odd binomial coefficients mod p, where p is odd. For p = 2 it is more efficient to +use binomial2
source§

fn binomial_odd_is_zero(p: ValidPrime, n: u32, k: u32) -> bool

Checks whether n choose k is zero mod p. Since we don’t have to compute the value, this is +faster than binomial_odd.
source§

fn binomial4(n: u32, j: u32) -> u32

Binomial coefficients mod 4. We pre-compute the coefficients for small values of n. For large +n, we recursively use the fact that if n = 2^k + l, l < 2^k, then Read more
source§

fn binomial4_rec(n: u32, j: u32) -> u32

Compute binomial coefficients mod 4 using the recursion relation in the documentation of +Binomial::binomial4. This calls into binomial4 instead of binomial4_rec. The main purpose +of this is to separate out the logic for testing.
source§

fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self

Multinomial coefficient of the list l
source§

fn binomial(p: ValidPrime, n: Self, k: Self) -> Self

Binomial coefficient n choose k.
1.0.0 · source§

impl BitAnd<&u32> for u32

§

type Output = <u32 as BitAnd<u32>>::Output

The resulting type after applying the & operator.
source§

fn bitand(self, other: &u32) -> <u32 as BitAnd<u32>>::Output

Performs the & operation. Read more
1.0.0 · source§

impl BitAnd<u32> for u32

§

type Output = u32

The resulting type after applying the & operator.
source§

fn bitand(self, rhs: u32) -> u32

Performs the & operation. Read more
1.22.0 · source§

impl BitAndAssign<&u32> for u32

source§

fn bitand_assign(&mut self, other: &u32)

Performs the &= operation. Read more
1.8.0 · source§

impl BitAndAssign<u32> for u32

source§

fn bitand_assign(&mut self, other: u32)

Performs the &= operation. Read more
1.0.0 · source§

impl BitOr<&u32> for u32

§

type Output = <u32 as BitOr<u32>>::Output

The resulting type after applying the | operator.
source§

fn bitor(self, other: &u32) -> <u32 as BitOr<u32>>::Output

Performs the | operation. Read more
1.45.0 · source§

impl BitOr<NonZeroU32> for u32

§

type Output = NonZeroU32

The resulting type after applying the | operator.
source§

fn bitor(self, rhs: NonZeroU32) -> <u32 as BitOr<NonZeroU32>>::Output

Performs the | operation. Read more
1.0.0 · source§

impl BitOr<u32> for u32

§

type Output = u32

The resulting type after applying the | operator.
source§

fn bitor(self, rhs: u32) -> u32

Performs the | operation. Read more
1.22.0 · source§

impl BitOrAssign<&u32> for u32

source§

fn bitor_assign(&mut self, other: &u32)

Performs the |= operation. Read more
1.8.0 · source§

impl BitOrAssign<u32> for u32

source§

fn bitor_assign(&mut self, other: u32)

Performs the |= operation. Read more
1.0.0 · source§

impl BitXor<&u32> for u32

§

type Output = <u32 as BitXor<u32>>::Output

The resulting type after applying the ^ operator.
source§

fn bitxor(self, other: &u32) -> <u32 as BitXor<u32>>::Output

Performs the ^ operation. Read more
1.0.0 · source§

impl BitXor<u32> for u32

§

type Output = u32

The resulting type after applying the ^ operator.
source§

fn bitxor(self, other: u32) -> u32

Performs the ^ operation. Read more
1.22.0 · source§

impl BitXorAssign<&u32> for u32

source§

fn bitxor_assign(&mut self, other: &u32)

Performs the ^= operation. Read more
1.8.0 · source§

impl BitXorAssign<u32> for u32

source§

fn bitxor_assign(&mut self, other: u32)

Performs the ^= operation. Read more
1.0.0 · source§

impl Clone for u32

source§

fn clone(&self) -> u32

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
1.0.0 · source§

impl Debug for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
1.0.0 · source§

impl Default for u32

source§

fn default() -> u32

Returns the default value of 0

+
source§

impl<'de> Deserialize<'de> for u32

source§

fn deserialize<D>( + deserializer: D +) -> Result<u32, <D as Deserializer<'de>>::Error>where + D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
1.0.0 · source§

impl Display for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
1.0.0 · source§

impl Div<&u32> for u32

§

type Output = <u32 as Div<u32>>::Output

The resulting type after applying the / operator.
source§

fn div(self, other: &u32) -> <u32 as Div<u32>>::Output

Performs the / operation. Read more
1.51.0 · source§

impl Div<NonZeroU32> for u32

source§

fn div(self, other: NonZeroU32) -> u32

This operation rounds towards zero, +truncating any fractional part of the exact result, and cannot panic.

+
§

type Output = u32

The resulting type after applying the / operator.
1.0.0 · source§

impl Div<u32> for u32

This operation rounds towards zero, truncating any +fractional part of the exact result.

+

Panics

+

This operation will panic if other == 0.

+
§

type Output = u32

The resulting type after applying the / operator.
source§

fn div(self, other: u32) -> u32

Performs the / operation. Read more
1.22.0 · source§

impl DivAssign<&u32> for u32

source§

fn div_assign(&mut self, other: &u32)

Performs the /= operation. Read more
1.8.0 · source§

impl DivAssign<u32> for u32

source§

fn div_assign(&mut self, other: u32)

Performs the /= operation. Read more
1.1.0 · source§

impl From<Ipv4Addr> for u32

source§

fn from(ip: Ipv4Addr) -> u32

Uses Ipv4Addr::to_bits to convert an IPv4 address to a host byte order u32.

+
1.31.0 · source§

impl From<NonZeroU32> for u32

source§

fn from(nonzero: NonZeroU32) -> u32

Converts a NonZeroU32 into an u32

+
source§

impl From<ValidPrime> for u32

source§

fn from(p: ValidPrime) -> u32

Converts to this type from the input type.
1.28.0 · source§

impl From<bool> for u32

source§

fn from(small: bool) -> u32

Converts a bool to a u32. The resulting value is 0 for false and 1 for true +values.

+
Examples
+
assert_eq!(u32::from(true), 1);
+assert_eq!(u32::from(false), 0);
+
1.13.0 · source§

impl From<char> for u32

source§

fn from(c: char) -> u32

Converts a char into a u32.

+
Examples
+
use std::mem;
+
+let c = 'c';
+let u = u32::from(c);
+assert!(4 == mem::size_of_val(&u))
+
1.5.0 · source§

impl From<u16> for u32

source§

fn from(small: u16) -> u32

Converts u16 to u32 losslessly.

+
1.5.0 · source§

impl From<u8> for u32

source§

fn from(small: u8) -> u32

Converts u8 to u32 losslessly.

+
1.0.0 · source§

impl FromStr for u32

§

type Err = ParseIntError

The associated error which can be returned from parsing.
source§

fn from_str(src: &str) -> Result<u32, ParseIntError>

Parses a string s to return a value of this type. Read more
1.0.0 · source§

impl Hash for u32

source§

fn hash<H>(&self, state: &mut H)where + H: Hasher,

Feeds this value into the given Hasher. Read more
source§

fn hash_slice<H>(data: &[u32], state: &mut H)where + H: Hasher,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<'de, E> IntoDeserializer<'de, E> for u32where + E: Error,

§

type Deserializer = U32Deserializer<E>

The type of the deserializer being converted into.
source§

fn into_deserializer(self) -> U32Deserializer<E>

Convert this value into a deserializer.
1.42.0 · source§

impl LowerExp for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
1.0.0 · source§

impl LowerHex for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
1.0.0 · source§

impl Mul<&u32> for u32

§

type Output = <u32 as Mul<u32>>::Output

The resulting type after applying the * operator.
source§

fn mul(self, other: &u32) -> <u32 as Mul<u32>>::Output

Performs the * operation. Read more
1.31.0 · source§

impl Mul<Duration> for u32

§

type Output = Duration

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Duration) -> Duration

Performs the * operation. Read more
1.0.0 · source§

impl Mul<u32> for u32

§

type Output = u32

The resulting type after applying the * operator.
source§

fn mul(self, other: u32) -> u32

Performs the * operation. Read more
1.22.0 · source§

impl MulAssign<&u32> for u32

source§

fn mul_assign(&mut self, other: &u32)

Performs the *= operation. Read more
1.8.0 · source§

impl MulAssign<u32> for u32

source§

fn mul_assign(&mut self, other: u32)

Performs the *= operation. Read more
1.0.0 · source§

impl Not for u32

§

type Output = u32

The resulting type after applying the ! operator.
source§

fn not(self) -> u32

Performs the unary ! operation. Read more
1.0.0 · source§

impl Octal for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
1.0.0 · source§

impl Ord for u32

source§

fn cmp(&self, other: &u32) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<Value> for u32

source§

fn eq(&self, other: &Value) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
1.0.0 · source§

impl PartialEq<u32> for u32

source§

fn eq(&self, other: &u32) -> bool

This method tests for self and other values to be equal, and is used +by ==.
source§

fn ne(&self, other: &u32) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
1.0.0 · source§

impl PartialOrd<u32> for u32

source§

fn partial_cmp(&self, other: &u32) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
source§

fn lt(&self, other: &u32) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
source§

fn le(&self, other: &u32) -> bool

This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
source§

fn ge(&self, other: &u32) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
source§

fn gt(&self, other: &u32) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.12.0 · source§

impl<'a> Product<&'a u32> for u32

source§

fn product<I>(iter: I) -> u32where + I: Iterator<Item = &'a u32>,

Method which takes an iterator and generates Self from the elements by +multiplying the items.
1.12.0 · source§

impl Product<u32> for u32

source§

fn product<I>(iter: I) -> u32where + I: Iterator<Item = u32>,

Method which takes an iterator and generates Self from the elements by +multiplying the items.
1.0.0 · source§

impl Rem<&u32> for u32

§

type Output = <u32 as Rem<u32>>::Output

The resulting type after applying the % operator.
source§

fn rem(self, other: &u32) -> <u32 as Rem<u32>>::Output

Performs the % operation. Read more
1.51.0 · source§

impl Rem<NonZeroU32> for u32

source§

fn rem(self, other: NonZeroU32) -> u32

This operation satisfies n % d == n - (n / d) * d, and cannot panic.

+
§

type Output = u32

The resulting type after applying the % operator.
1.0.0 · source§

impl Rem<u32> for u32

This operation satisfies n % d == n - (n / d) * d. The +result has the same sign as the left operand.

+

Panics

+

This operation will panic if other == 0.

+
§

type Output = u32

The resulting type after applying the % operator.
source§

fn rem(self, other: u32) -> u32

Performs the % operation. Read more
1.22.0 · source§

impl RemAssign<&u32> for u32

source§

fn rem_assign(&mut self, other: &u32)

Performs the %= operation. Read more
1.8.0 · source§

impl RemAssign<u32> for u32

source§

fn rem_assign(&mut self, other: u32)

Performs the %= operation. Read more
source§

impl Serialize for u32

source§

fn serialize<S>( + &self, + serializer: S +) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where + S: Serializer,

Serialize this value into the given Serde serializer. Read more
1.0.0 · source§

impl Shl<&i128> for u32

§

type Output = <u32 as Shl<i128>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &i128) -> <u32 as Shl<i128>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&i16> for u32

§

type Output = <u32 as Shl<i16>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &i16) -> <u32 as Shl<i16>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&i32> for u32

§

type Output = <u32 as Shl<i32>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &i32) -> <u32 as Shl<i32>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&i64> for u32

§

type Output = <u32 as Shl<i64>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &i64) -> <u32 as Shl<i64>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&i8> for u32

§

type Output = <u32 as Shl<i8>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &i8) -> <u32 as Shl<i8>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&isize> for u32

§

type Output = <u32 as Shl<isize>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &isize) -> <u32 as Shl<isize>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&u128> for u32

§

type Output = <u32 as Shl<u128>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &u128) -> <u32 as Shl<u128>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&u16> for u32

§

type Output = <u32 as Shl<u16>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &u16) -> <u32 as Shl<u16>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&u32> for u32

§

type Output = <u32 as Shl<u32>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &u32) -> <u32 as Shl<u32>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&u64> for u32

§

type Output = <u32 as Shl<u64>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &u64) -> <u32 as Shl<u64>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&u8> for u32

§

type Output = <u32 as Shl<u8>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &u8) -> <u32 as Shl<u8>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<&usize> for u32

§

type Output = <u32 as Shl<usize>>::Output

The resulting type after applying the << operator.
source§

fn shl(self, other: &usize) -> <u32 as Shl<usize>>::Output

Performs the << operation. Read more
1.0.0 · source§

impl Shl<i128> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: i128) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<i16> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: i16) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<i32> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: i32) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<i64> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: i64) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<i8> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: i8) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<isize> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: isize) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<u128> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: u128) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<u16> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: u16) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<u32> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: u32) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<u64> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: u64) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<u8> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: u8) -> u32

Performs the << operation. Read more
1.0.0 · source§

impl Shl<usize> for u32

§

type Output = u32

The resulting type after applying the << operator.
source§

fn shl(self, other: usize) -> u32

Performs the << operation. Read more
1.22.0 · source§

impl ShlAssign<&i128> for u32

source§

fn shl_assign(&mut self, other: &i128)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&i16> for u32

source§

fn shl_assign(&mut self, other: &i16)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&i32> for u32

source§

fn shl_assign(&mut self, other: &i32)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&i64> for u32

source§

fn shl_assign(&mut self, other: &i64)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&i8> for u32

source§

fn shl_assign(&mut self, other: &i8)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&isize> for u32

source§

fn shl_assign(&mut self, other: &isize)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&u128> for u32

source§

fn shl_assign(&mut self, other: &u128)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&u16> for u32

source§

fn shl_assign(&mut self, other: &u16)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&u32> for u32

source§

fn shl_assign(&mut self, other: &u32)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&u64> for u32

source§

fn shl_assign(&mut self, other: &u64)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&u8> for u32

source§

fn shl_assign(&mut self, other: &u8)

Performs the <<= operation. Read more
1.22.0 · source§

impl ShlAssign<&usize> for u32

source§

fn shl_assign(&mut self, other: &usize)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<i128> for u32

source§

fn shl_assign(&mut self, other: i128)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<i16> for u32

source§

fn shl_assign(&mut self, other: i16)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<i32> for u32

source§

fn shl_assign(&mut self, other: i32)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<i64> for u32

source§

fn shl_assign(&mut self, other: i64)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<i8> for u32

source§

fn shl_assign(&mut self, other: i8)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<isize> for u32

source§

fn shl_assign(&mut self, other: isize)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<u128> for u32

source§

fn shl_assign(&mut self, other: u128)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<u16> for u32

source§

fn shl_assign(&mut self, other: u16)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<u32> for u32

source§

fn shl_assign(&mut self, other: u32)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<u64> for u32

source§

fn shl_assign(&mut self, other: u64)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<u8> for u32

source§

fn shl_assign(&mut self, other: u8)

Performs the <<= operation. Read more
1.8.0 · source§

impl ShlAssign<usize> for u32

source§

fn shl_assign(&mut self, other: usize)

Performs the <<= operation. Read more
1.0.0 · source§

impl Shr<&i128> for u32

§

type Output = <u32 as Shr<i128>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &i128) -> <u32 as Shr<i128>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&i16> for u32

§

type Output = <u32 as Shr<i16>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &i16) -> <u32 as Shr<i16>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&i32> for u32

§

type Output = <u32 as Shr<i32>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &i32) -> <u32 as Shr<i32>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&i64> for u32

§

type Output = <u32 as Shr<i64>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &i64) -> <u32 as Shr<i64>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&i8> for u32

§

type Output = <u32 as Shr<i8>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &i8) -> <u32 as Shr<i8>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&isize> for u32

§

type Output = <u32 as Shr<isize>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &isize) -> <u32 as Shr<isize>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&u128> for u32

§

type Output = <u32 as Shr<u128>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &u128) -> <u32 as Shr<u128>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&u16> for u32

§

type Output = <u32 as Shr<u16>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &u16) -> <u32 as Shr<u16>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&u32> for u32

§

type Output = <u32 as Shr<u32>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &u32) -> <u32 as Shr<u32>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&u64> for u32

§

type Output = <u32 as Shr<u64>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &u64) -> <u32 as Shr<u64>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&u8> for u32

§

type Output = <u32 as Shr<u8>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &u8) -> <u32 as Shr<u8>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<&usize> for u32

§

type Output = <u32 as Shr<usize>>::Output

The resulting type after applying the >> operator.
source§

fn shr(self, other: &usize) -> <u32 as Shr<usize>>::Output

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<i128> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: i128) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<i16> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: i16) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<i32> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: i32) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<i64> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: i64) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<i8> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: i8) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<isize> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: isize) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<u128> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: u128) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<u16> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: u16) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<u32> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: u32) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<u64> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: u64) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<u8> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: u8) -> u32

Performs the >> operation. Read more
1.0.0 · source§

impl Shr<usize> for u32

§

type Output = u32

The resulting type after applying the >> operator.
source§

fn shr(self, other: usize) -> u32

Performs the >> operation. Read more
1.22.0 · source§

impl ShrAssign<&i128> for u32

source§

fn shr_assign(&mut self, other: &i128)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&i16> for u32

source§

fn shr_assign(&mut self, other: &i16)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&i32> for u32

source§

fn shr_assign(&mut self, other: &i32)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&i64> for u32

source§

fn shr_assign(&mut self, other: &i64)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&i8> for u32

source§

fn shr_assign(&mut self, other: &i8)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&isize> for u32

source§

fn shr_assign(&mut self, other: &isize)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&u128> for u32

source§

fn shr_assign(&mut self, other: &u128)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&u16> for u32

source§

fn shr_assign(&mut self, other: &u16)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&u32> for u32

source§

fn shr_assign(&mut self, other: &u32)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&u64> for u32

source§

fn shr_assign(&mut self, other: &u64)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&u8> for u32

source§

fn shr_assign(&mut self, other: &u8)

Performs the >>= operation. Read more
1.22.0 · source§

impl ShrAssign<&usize> for u32

source§

fn shr_assign(&mut self, other: &usize)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<i128> for u32

source§

fn shr_assign(&mut self, other: i128)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<i16> for u32

source§

fn shr_assign(&mut self, other: i16)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<i32> for u32

source§

fn shr_assign(&mut self, other: i32)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<i64> for u32

source§

fn shr_assign(&mut self, other: i64)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<i8> for u32

source§

fn shr_assign(&mut self, other: i8)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<isize> for u32

source§

fn shr_assign(&mut self, other: isize)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<u128> for u32

source§

fn shr_assign(&mut self, other: u128)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<u16> for u32

source§

fn shr_assign(&mut self, other: u16)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<u32> for u32

source§

fn shr_assign(&mut self, other: u32)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<u64> for u32

source§

fn shr_assign(&mut self, other: u64)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<u8> for u32

source§

fn shr_assign(&mut self, other: u8)

Performs the >>= operation. Read more
1.8.0 · source§

impl ShrAssign<usize> for u32

source§

fn shr_assign(&mut self, other: usize)

Performs the >>= operation. Read more
source§

impl SimdElement for u32

§

type Mask = i32

🔬This is a nightly-only experimental API. (portable_simd)
The mask element type corresponding to this element type.
source§

impl Step for u32

source§

unsafe fn forward_unchecked(start: u32, n: usize) -> u32

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor +of self count times. Read more
source§

unsafe fn backward_unchecked(start: u32, n: usize) -> u32

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor +of self count times. Read more
source§

fn forward(start: u32, n: usize) -> u32

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor +of self count times. Read more
source§

fn backward(start: u32, n: usize) -> u32

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor +of self count times. Read more
source§

fn steps_between(start: &u32, end: &u32) -> Option<usize>

🔬This is a nightly-only experimental API. (step_trait)
Returns the number of successor steps required to get from start to end. Read more
source§

fn forward_checked(start: u32, n: usize) -> Option<u32>

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the successor +of self count times. Read more
source§

fn backward_checked(start: u32, n: usize) -> Option<u32>

🔬This is a nightly-only experimental API. (step_trait)
Returns the value that would be obtained by taking the predecessor +of self count times. Read more
1.0.0 · source§

impl Sub<&u32> for u32

§

type Output = <u32 as Sub<u32>>::Output

The resulting type after applying the - operator.
source§

fn sub(self, other: &u32) -> <u32 as Sub<u32>>::Output

Performs the - operation. Read more
1.0.0 · source§

impl Sub<u32> for u32

§

type Output = u32

The resulting type after applying the - operator.
source§

fn sub(self, other: u32) -> u32

Performs the - operation. Read more
1.22.0 · source§

impl SubAssign<&u32> for u32

source§

fn sub_assign(&mut self, other: &u32)

Performs the -= operation. Read more
1.8.0 · source§

impl SubAssign<u32> for u32

source§

fn sub_assign(&mut self, other: u32)

Performs the -= operation. Read more
1.12.0 · source§

impl<'a> Sum<&'a u32> for u32

source§

fn sum<I>(iter: I) -> u32where + I: Iterator<Item = &'a u32>,

Method which takes an iterator and generates Self from the elements by +“summing up” the items.
1.12.0 · source§

impl Sum<u32> for u32

source§

fn sum<I>(iter: I) -> u32where + I: Iterator<Item = u32>,

Method which takes an iterator and generates Self from the elements by +“summing up” the items.
§

impl ToUsize for u32

§

fn to_usize(&self) -> usize

converts self to usize
1.34.0 · source§

impl TryFrom<i128> for u32

source§

fn try_from(u: i128) -> Result<u32, <u32 as TryFrom<i128>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<i16> for u32

source§

fn try_from(u: i16) -> Result<u32, <u32 as TryFrom<i16>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<i32> for u32

source§

fn try_from(u: i32) -> Result<u32, <u32 as TryFrom<i32>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<i64> for u32

source§

fn try_from(u: i64) -> Result<u32, <u32 as TryFrom<i64>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<i8> for u32

source§

fn try_from(u: i8) -> Result<u32, <u32 as TryFrom<i8>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<isize> for u32

source§

fn try_from(u: isize) -> Result<u32, <u32 as TryFrom<isize>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<u128> for u32

source§

fn try_from(u: u128) -> Result<u32, <u32 as TryFrom<u128>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<u64> for u32

source§

fn try_from(u: u64) -> Result<u32, <u32 as TryFrom<u64>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.34.0 · source§

impl TryFrom<usize> for u32

source§

fn try_from(u: usize) -> Result<u32, <u32 as TryFrom<usize>>::Error>

Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

+
§

type Error = TryFromIntError

The type returned in the event of a conversion error.
1.42.0 · source§

impl UpperExp for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
1.0.0 · source§

impl UpperHex for u32

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
source§

impl ConstParamTy for u32

1.0.0 · source§

impl Copy for u32

1.0.0 · source§

impl Eq for u32

source§

impl Integer for u32

source§

impl SimdCast for u32

source§

impl StructuralEq for u32

source§

impl StructuralPartialEq for u32

source§

impl TrustedStep for u32

\ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/constant.AY_CACHE.html b/docs/algebra/algebra/pair_algebra/constant.AY_CACHE.html index edb63cd3d..505a77c2f 100644 --- a/docs/algebra/algebra/pair_algebra/constant.AY_CACHE.html +++ b/docs/algebra/algebra/pair_algebra/constant.AY_CACHE.html @@ -1,4 +1,4 @@ -AY_CACHE in algebra::algebra::pair_algebra - Rust +AY_CACHE in algebra::algebra::pair_algebra - Rust @@ -23,4 +23,4 @@ }); -
const AY_CACHE: LocalKey<RefCell<HashMap<(MilnorBasisElement, (usize, usize)), FpVector, BuildHasherDefault<FxHasher>>>>;
\ No newline at end of file +
const AY_CACHE: LocalKey<RefCell<HashMap<(MilnorBasisElement, (usize, usize)), FpVector, BuildHasherDefault<FxHasher>>>>;
\ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/fn.a_y_cached.html b/docs/algebra/algebra/pair_algebra/fn.a_y_cached.html index 90ba36bb3..e57524421 100644 --- a/docs/algebra/algebra/pair_algebra/fn.a_y_cached.html +++ b/docs/algebra/algebra/pair_algebra/fn.a_y_cached.html @@ -1,4 +1,4 @@ -a_y_cached in algebra::algebra::pair_algebra - Rust +a_y_cached in algebra::algebra::pair_algebra - Rust @@ -23,12 +23,12 @@ }); -
fn a_y_cached(
+
fn a_y_cached(
     algebra: &MilnorAlgebra,
     a: &MilnorBasisElement,
-    k: usize,
-    l: usize,
-    f: impl FnOnce(&FpVector)
+    k: usize,
+    l: usize,
+    f: impl FnOnce(&FpVector)
 )
Expand description

Compute $A(Sq(R), Y_{k, l})$ where $a = Sq(R)$. This queries the cache and computes it using a_y_inner if not available.

\ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/fn.a_y_inner.html b/docs/algebra/algebra/pair_algebra/fn.a_y_inner.html index e61ab2df4..49845e7b9 100644 --- a/docs/algebra/algebra/pair_algebra/fn.a_y_inner.html +++ b/docs/algebra/algebra/pair_algebra/fn.a_y_inner.html @@ -1,4 +1,4 @@ -a_y_inner in algebra::algebra::pair_algebra - Rust +a_y_inner in algebra::algebra::pair_algebra - Rust @@ -23,10 +23,10 @@ }); -
fn a_y_inner(
+
fn a_y_inner(
     algebra: &MilnorAlgebra,
     a: &MilnorBasisElement,
-    k: usize,
-    l: usize
-) -> FpVector
Expand description

Actually computes $A(a, Y_{k, l})$ and returns the result.

+ k: usize, + l: usize +) -> FpVector
Expand description

Actually computes $A(a, Y_{k, l})$ and returns the result.

\ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/index.html b/docs/algebra/algebra/pair_algebra/index.html index 069ce9001..29e87e541 100644 --- a/docs/algebra/algebra/pair_algebra/index.html +++ b/docs/algebra/algebra/pair_algebra/index.html @@ -1,4 +1,4 @@ -algebra::algebra::pair_algebra - Rust +algebra::algebra::pair_algebra - Rust @@ -23,11 +23,11 @@ }); -
Expand description

This implements the notion of a split pair algebra in the sense of +

Expand description

This implements the notion of a split pair algebra in the sense of https://arxiv.org/abs/2105.07628, whose notation we will use throughout. The Steenrod algebra admits a lift to a split pair algebra, which can be used to compute d2 differentials algorithmically.

To keep the pair algebra business contained, we put the implementation of the Milnor algebra as a pair algebra in this file instead of milnor_algebra.rs.

Macros

Structs

Constants

Traits

  • A lift of an algebra to a split pair algebra. See module introduction for more.

Functions

  • a_y_cached 🔒
    Compute $A(Sq(R), Y_{k, l})$ where $a = Sq(R)$. This queries the cache and computes it using -a_y_inner if not available.
  • a_y_inner 🔒
    Actually computes $A(a, Y_{k, l})$ and returns the result.

Type Definitions

\ No newline at end of file +a_y_inner if not available.
  • a_y_inner 🔒
    Actually computes $A(a, Y_{k, l})$ and returns the result.
  • Type Aliases

    \ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/macro.sub.html b/docs/algebra/algebra/pair_algebra/macro.sub.html index 35b3ca905..14f71b69e 100644 --- a/docs/algebra/algebra/pair_algebra/macro.sub.html +++ b/docs/algebra/algebra/pair_algebra/macro.sub.html @@ -1,4 +1,4 @@ -sub in algebra::algebra::pair_algebra - Rust +sub in algebra::algebra::pair_algebra - Rust @@ -23,6 +23,6 @@ }); -
    macro_rules! sub {
    +
    macro_rules! sub {
         ($elt:ident, $k:expr, $n:expr) => { ... };
     }
    \ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/macro.unsub.html b/docs/algebra/algebra/pair_algebra/macro.unsub.html index a3607faa8..6d57d6c15 100644 --- a/docs/algebra/algebra/pair_algebra/macro.unsub.html +++ b/docs/algebra/algebra/pair_algebra/macro.unsub.html @@ -1,4 +1,4 @@ -unsub in algebra::algebra::pair_algebra - Rust +unsub in algebra::algebra::pair_algebra - Rust @@ -23,6 +23,6 @@ }); -
    macro_rules! unsub {
    +
    macro_rules! unsub {
         ($elt:ident, $k:expr, $n:expr) => { ... };
     }
    \ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/struct.MilnorPairElement.html b/docs/algebra/algebra/pair_algebra/struct.MilnorPairElement.html index 59f8bc006..f8382121c 100644 --- a/docs/algebra/algebra/pair_algebra/struct.MilnorPairElement.html +++ b/docs/algebra/algebra/pair_algebra/struct.MilnorPairElement.html @@ -1,4 +1,4 @@ -MilnorPairElement in algebra::algebra::pair_algebra - Rust +MilnorPairElement in algebra::algebra::pair_algebra - Rust @@ -23,19 +23,19 @@ }); -
    pub struct MilnorPairElement {
    -    ones: FpVector,
    -    twos: FpVector,
    -    degree: i32,
    -    ys: Vec<Vec<FpVector>>,
    -}

    Fields§

    §ones: FpVector§twos: FpVector§degree: i32§ys: Vec<Vec<FpVector>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct MilnorPairElement {
    +    ones: FpVector,
    +    twos: FpVector,
    +    degree: i32,
    +    ys: Vec<Vec<FpVector>>,
    +}

    Fields§

    §ones: FpVector§twos: FpVector§degree: i32§ys: Vec<Vec<FpVector>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/trait.PairAlgebra.html b/docs/algebra/algebra/pair_algebra/trait.PairAlgebra.html index 9ae263cca..864c78a02 100644 --- a/docs/algebra/algebra/pair_algebra/trait.PairAlgebra.html +++ b/docs/algebra/algebra/pair_algebra/trait.PairAlgebra.html @@ -1,4 +1,4 @@ -PairAlgebra in algebra::algebra::pair_algebra - Rust +PairAlgebra in algebra::algebra::pair_algebra - Rust @@ -23,96 +23,96 @@ }); -
    pub trait PairAlgebra: Algebra {
    -    type Element: Send + Sync;
    +
    pub trait PairAlgebra: Algebra {
    +    type Element: Send + Sync;
     
         // Required methods
    -    fn element_is_zero(elt: &Self::Element) -> bool;
    -    fn new_pair_element(&self, degree: i32) -> Self::Element;
    +    fn element_is_zero(elt: &Self::Element) -> bool;
    +    fn new_pair_element(&self, degree: i32) -> Self::Element;
         fn sigma_multiply_basis(
             &self,
             result: &mut Self::Element,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_idx: usize,
    -        s_degree: i32,
    -        s_idx: usize
    +        coeff: u32,
    +        r_degree: i32,
    +        r_idx: usize,
    +        s_degree: i32,
    +        s_idx: usize
         );
         fn a_multiply(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
             s: &Self::Element
         );
    -    fn p_tilde(&self) -> usize;
    +    fn p_tilde(&self) -> usize;
         fn element_to_bytes(
             &self,
             elt: &Self::Element,
    -        buffer: &mut impl Write
    -    ) -> Result<()>;
    +        buffer: &mut impl Write
    +    ) -> Result<()>;
         fn element_from_bytes(
             &self,
    -        degree: i32,
    -        buffer: &mut impl Read
    -    ) -> Result<Self::Element>;
    +        degree: i32,
    +        buffer: &mut impl Read
    +    ) -> Result<Self::Element>;
     
         // Provided methods
         fn finalize_element(_elt: &mut Self::Element) { ... }
         fn sigma_multiply(
             &self,
             result: &mut Self::Element,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s: Slice<'_>
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s: Slice<'_>
         ) { ... }
     }
    Expand description

    A lift of an algebra to a split pair algebra. See module introduction for more.

    -

    Required Associated Types§

    source

    type Element: Send + Sync

    An element in the cohomological degree zero part of the pair algebra. This tends to not be +

    Required Associated Types§

    source

    type Element: Send + Sync

    An element in the cohomological degree zero part of the pair algebra. This tends to not be a ring over Fp, so we let the algebra specify how it wants to represent the elements.

    -

    Required Methods§

    source

    fn element_is_zero(elt: &Self::Element) -> bool

    source

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.

    +

    Required Methods§

    source

    fn element_is_zero(elt: &Self::Element) -> bool

    source

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.

    source

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.

    source

    fn a_multiply( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element )

    Compute $A(r, s)$ and write the result to result.

    -
    source

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, +

    source

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.

    source

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source

    fn element_from_bytes( + buffer: &mut impl Write +) -> Result<()>

    source

    fn element_from_bytes( &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    Provided Methods§

    source

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    Provided Methods§

    source

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the complement of the image of the differential.

    source

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/algebra/pair_algebra/type.HashMap.html b/docs/algebra/algebra/pair_algebra/type.HashMap.html index d16e8ab64..e43ae2b9f 100644 --- a/docs/algebra/algebra/pair_algebra/type.HashMap.html +++ b/docs/algebra/algebra/pair_algebra/type.HashMap.html @@ -1,4 +1,4 @@ -HashMap in algebra::algebra::pair_algebra - Rust +HashMap in algebra::algebra::pair_algebra - Rust @@ -23,4 +23,7 @@ }); -

    Type Definition algebra::algebra::pair_algebra::HashMap

    source ·
    type HashMap<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher>>;
    \ No newline at end of file +

    Type Alias algebra::algebra::pair_algebra::HashMap

    source ·
    type HashMap<K, V> = HashMap<K, V, BuildHasherDefault<FxHasher>>;

    Aliased Type§

    struct HashMap<K, V> {
    +    pub(crate) hash_builder: BuildHasherDefault<FxHasher>,
    +    pub(crate) table: RawTable<(K, V), Global>,
    +}

    Fields§

    §hash_builder: BuildHasherDefault<FxHasher>§table: RawTable<(K, V), Global>
    \ No newline at end of file diff --git a/docs/algebra/algebra/polynomial_algebra/index.html b/docs/algebra/algebra/polynomial_algebra/index.html index 9e49618c1..c85e3a3cd 100644 --- a/docs/algebra/algebra/polynomial_algebra/index.html +++ b/docs/algebra/algebra/polynomial_algebra/index.html @@ -1,4 +1,4 @@ -algebra::algebra::polynomial_algebra - Rust +algebra::algebra::polynomial_algebra - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraMonomial.html b/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraMonomial.html index c833f3b3e..eb056676c 100644 --- a/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraMonomial.html +++ b/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraMonomial.html @@ -1,4 +1,4 @@ -PolynomialAlgebraMonomial in algebra::algebra::polynomial_algebra - Rust +PolynomialAlgebraMonomial in algebra::algebra::polynomial_algebra - Rust @@ -23,32 +23,32 @@ }); -
    pub struct PolynomialAlgebraMonomial {
    -    pub degree: i32,
    -    pub poly: FpVector,
    -    pub ext: FpVector,
    -    pub valid: bool,
    -}

    Fields§

    §degree: i32§poly: FpVector§ext: FpVector§valid: bool

    Implementations§

    source§

    impl PolynomialAlgebraMonomial

    source

    pub fn new(p: ValidPrime) -> Self

    Trait Implementations§

    source§

    impl Clone for PolynomialAlgebraMonomial

    source§

    fn clone(&self) -> PolynomialAlgebraMonomial

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PolynomialAlgebraMonomial

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial

    source§

    fn eq(&self, other: &PolynomialAlgebraMonomial) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolynomialAlgebraMonomial

    source§

    impl StructuralEq for PolynomialAlgebraMonomial

    source§

    impl StructuralPartialEq for PolynomialAlgebraMonomial

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere - T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct PolynomialAlgebraMonomial {
    +    pub degree: i32,
    +    pub poly: FpVector,
    +    pub ext: FpVector,
    +    pub valid: bool,
    +}

    Fields§

    §degree: i32§poly: FpVector§ext: FpVector§valid: bool

    Implementations§

    Trait Implementations§

    source§

    impl Clone for PolynomialAlgebraMonomial

    source§

    fn clone(&self) -> PolynomialAlgebraMonomial

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PolynomialAlgebraMonomial

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial

    source§

    fn eq(&self, other: &PolynomialAlgebraMonomial) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolynomialAlgebraMonomial

    source§

    impl StructuralEq for PolynomialAlgebraMonomial

    source§

    impl StructuralPartialEq for PolynomialAlgebraMonomial

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere + T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraTableEntry.html b/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraTableEntry.html index 8c1a14f3f..4e7e05606 100644 --- a/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraTableEntry.html +++ b/docs/algebra/algebra/polynomial_algebra/struct.PolynomialAlgebraTableEntry.html @@ -1,4 +1,4 @@ -PolynomialAlgebraTableEntry in algebra::algebra::polynomial_algebra - Rust +PolynomialAlgebraTableEntry in algebra::algebra::polynomial_algebra - Rust @@ -23,17 +23,17 @@ }); -
    pub struct PolynomialAlgebraTableEntry {
    -    pub index_to_monomial: Vec<PolynomialAlgebraMonomial>,
    -    pub monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>,
    -}

    Fields§

    §index_to_monomial: Vec<PolynomialAlgebraMonomial>§monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>

    Implementations§

    Trait Implementations§

    source§

    impl Default for PolynomialAlgebraTableEntry

    source§

    fn default() -> PolynomialAlgebraTableEntry

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct PolynomialAlgebraTableEntry {
    +    pub index_to_monomial: Vec<PolynomialAlgebraMonomial>,
    +    pub monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>,
    +}

    Fields§

    §index_to_monomial: Vec<PolynomialAlgebraMonomial>§monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>

    Implementations§

    Trait Implementations§

    source§

    impl Default for PolynomialAlgebraTableEntry

    source§

    fn default() -> PolynomialAlgebraTableEntry

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/polynomial_algebra/trait.PolynomialAlgebra.html b/docs/algebra/algebra/polynomial_algebra/trait.PolynomialAlgebra.html index c3c96addc..00b671ba5 100644 --- a/docs/algebra/algebra/polynomial_algebra/trait.PolynomialAlgebra.html +++ b/docs/algebra/algebra/polynomial_algebra/trait.PolynomialAlgebra.html @@ -1,4 +1,4 @@ -PolynomialAlgebra in algebra::algebra::polynomial_algebra - Rust +PolynomialAlgebra in algebra::algebra::polynomial_algebra - Rust @@ -23,93 +23,93 @@ }); -
    pub trait PolynomialAlgebra: Display + Sized + Send + Sync + 'static {
    +
    pub trait PolynomialAlgebra: Display + Sized + Send + Sync + 'static {
     
    Show 21 methods // Required methods - fn prime(&self) -> ValidPrime; + fn prime(&self) -> ValidPrime; fn polynomial_monomials(&self) -> &TruncatedPolynomialMonomialBasis; fn exterior_monomials(&self) -> &TruncatedPolynomialMonomialBasis; - fn polynomial_generators_in_degree(&self, degree: i32) -> usize; - fn exterior_generators_in_degree(&self, degree: i32) -> usize; - fn repr_poly_generator(&self, degree: i32, _index: usize) -> (String, u32); - fn repr_ext_generator(&self, degree: i32, _index: usize) -> String; - fn basis_table(&self) -> &OnceVec<PolynomialAlgebraTableEntry>; - fn frobenius_on_generator(&self, degree: i32, index: usize) -> Option<usize>; - fn compute_generating_set(&self, degree: i32); + fn polynomial_generators_in_degree(&self, degree: i32) -> usize; + fn exterior_generators_in_degree(&self, degree: i32) -> usize; + fn repr_poly_generator(&self, degree: i32, _index: usize) -> (String, u32); + fn repr_ext_generator(&self, degree: i32, _index: usize) -> String; + fn basis_table(&self) -> &OnceVec<PolynomialAlgebraTableEntry>; + fn frobenius_on_generator(&self, degree: i32, index: usize) -> Option<usize>; + fn compute_generating_set(&self, degree: i32); // Provided methods - fn min_degree(&self) -> i32 { ... } - fn compute_basis_step(&self, degree: i32) { ... } - fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize { ... } + fn min_degree(&self) -> i32 { ... } + fn compute_basis_step(&self, degree: i32) { ... } + fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize { ... } fn index_to_monomial( &self, - degree: i32, - index: usize + degree: i32, + index: usize ) -> &PolynomialAlgebraMonomial { ... } - fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector) { ... } + fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector) { ... } fn multiply_monomials( &self, target: &mut PolynomialAlgebraMonomial, source: &PolynomialAlgebraMonomial - ) -> Option<u32> { ... } + ) -> Option<u32> { ... } fn multiply_polynomials( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, - right_degree: i32, - right: &FpVector + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, + right_degree: i32, + right: &FpVector ) { ... } fn multiply_polynomial_by_monomial( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, right_mono: &PolynomialAlgebraMonomial ) { ... } fn multiply_monomial_by_polynomial( &self, - target: &mut FpVector, - coeff: u32, + target: &mut FpVector, + coeff: u32, left_mono: &PolynomialAlgebraMonomial, - right_degree: i32, - right: &FpVector + right_degree: i32, + right: &FpVector ) { ... } fn set_monomial_degree( &self, mono: &mut PolynomialAlgebraMonomial, - degree: i32 + degree: i32 ) { ... } - fn max_computed_degree(&self) -> i32 { ... } -
    }

    Required Methods§

    Provided Methods§

    Required Methods§

    Provided Methods§

    source

    fn min_degree(&self) -> i32

    source

    fn compute_basis_step(&self, degree: i32)

    source

    fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize

    source

    fn index_to_monomial( &self, - degree: i32, - index: usize -) -> &PolynomialAlgebraMonomial

    source

    fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector)

    source

    fn multiply_monomials( + degree: i32, + index: usize +) -> &PolynomialAlgebraMonomial

    source

    fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector)

    source

    fn multiply_monomials( &self, target: &mut PolynomialAlgebraMonomial, source: &PolynomialAlgebraMonomial -) -> Option<u32>

    source

    fn multiply_polynomials( +) -> Option<u32>

    source

    fn multiply_polynomials( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, - right_degree: i32, - right: &FpVector + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, + right_degree: i32, + right: &FpVector )

    source

    fn multiply_polynomial_by_monomial( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, right_mono: &PolynomialAlgebraMonomial )

    source

    fn multiply_monomial_by_polynomial( &self, - target: &mut FpVector, - coeff: u32, + target: &mut FpVector, + coeff: u32, left_mono: &PolynomialAlgebraMonomial, - right_degree: i32, - right: &FpVector -)

    source

    fn set_monomial_degree(&self, mono: &mut PolynomialAlgebraMonomial, degree: i32)

    source

    fn max_computed_degree(&self) -> i32

    Implementors§

    \ No newline at end of file + right_degree: i32, + right: &FpVector +)
    source

    fn set_monomial_degree(&self, mono: &mut PolynomialAlgebraMonomial, degree: i32)

    source

    fn max_computed_degree(&self) -> i32

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/enum.AlgebraType.html b/docs/algebra/algebra/steenrod_algebra/enum.AlgebraType.html index 6107fb3f7..49de3ed61 100644 --- a/docs/algebra/algebra/steenrod_algebra/enum.AlgebraType.html +++ b/docs/algebra/algebra/steenrod_algebra/enum.AlgebraType.html @@ -1,4 +1,4 @@ -AlgebraType in algebra::algebra::steenrod_algebra - Rust +AlgebraType in algebra::algebra::steenrod_algebra - Rust @@ -23,25 +23,25 @@ }); -
    pub enum AlgebraType {
    +
    pub enum AlgebraType {
         Adem,
         Milnor,
    -}

    Variants§

    §

    Adem

    §

    Milnor

    Trait Implementations§

    source§

    impl Clone for AlgebraType

    source§

    fn clone(&self) -> AlgebraType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromStr for AlgebraType

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<AlgebraType> for AlgebraType

    source§

    fn eq(&self, other: &AlgebraType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl TryFrom<&str> for AlgebraType

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(s: &str) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl Copy for AlgebraType

    source§

    impl Eq for AlgebraType

    source§

    impl StructuralEq for AlgebraType

    source§

    impl StructuralPartialEq for AlgebraType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +}

    Variants§

    §

    Adem

    §

    Milnor

    Trait Implementations§

    source§

    impl Clone for AlgebraType

    source§

    fn clone(&self) -> AlgebraType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromStr for AlgebraType

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<AlgebraType> for AlgebraType

    source§

    fn eq(&self, other: &AlgebraType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl TryFrom<&str> for AlgebraType

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(s: &str) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl Copy for AlgebraType

    source§

    impl Eq for AlgebraType

    source§

    impl StructuralEq for AlgebraType

    source§

    impl StructuralPartialEq for AlgebraType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebra.html b/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebra.html index 90f7233e8..84f09700f 100644 --- a/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebra.html +++ b/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebra.html @@ -1,4 +1,4 @@ -SteenrodAlgebra in algebra::algebra::steenrod_algebra - Rust +SteenrodAlgebra in algebra::algebra::steenrod_algebra - Rust @@ -23,230 +23,230 @@ }); -
    pub enum SteenrodAlgebra {
    +
    pub enum SteenrodAlgebra {
         AdemAlgebra(AdemAlgebra),
         MilnorAlgebra(MilnorAlgebra),
    -}

    Variants§

    §

    AdemAlgebra(AdemAlgebra)

    §

    MilnorAlgebra(MilnorAlgebra)

    Implementations§

    Variants§

    §

    AdemAlgebra(AdemAlgebra)

    §

    MilnorAlgebra(MilnorAlgebra)

    Implementations§

    source§

    impl SteenrodAlgebra

    source

    pub fn from_json( + json: &Value, algebra_type: AlgebraType, - unstable: bool -) -> Result<SteenrodAlgebra>

    Trait Implementations§

    source§

    impl Algebra for SteenrodAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the + unstable: bool +) -> Result<SteenrodAlgebra>

    Trait Implementations§

    source§

    impl Algebra for SteenrodAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize +disasterous consequences. So we store the magic in the save files. Read more

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn multiply_basis_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_basis_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_basis_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize +result to result. Read more

    source§

    fn multiply_element_by_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is -implemented). Read more
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for SteenrodAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for SteenrodAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used +implemented). Read more

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for SteenrodAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for SteenrodAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used to specify modules by specifying the actions of the generators.

    -
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn decompose_basis_element( +

    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl PairAlgebra for SteenrodAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the -complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl PairAlgebra for SteenrodAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the +complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said -indecomposable.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( +indecomposable.

    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to -result.
    source§

    fn sigma_multiply( +result.

    source§

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    fn a_multiply( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    fn a_multiply( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element -)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( +)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source§

    fn element_from_bytes( - &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    source§

    impl SteenrodAlgebraT for SteenrodAlgebra

    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for SteenrodAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 -)

    source§

    fn multiply_basis_element_by_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + buffer: &mut impl Write +) -> Result<()>

    source§

    fn element_from_bytes( + &self, + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    source§

    impl SteenrodAlgebraT for SteenrodAlgebra

    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for SteenrodAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 +)

    source§

    fn multiply_basis_element_by_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_basis_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 +result to result. Read more

    source§

    fn multiply_element_by_basis_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 +result to result. Read more

    source§

    fn multiply_element_by_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<A> AdemAlgebraT for Awhere - A: SteenrodAlgebraT,

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<A> AdemAlgebraT for Awhere + A: SteenrodAlgebraT,

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<A> MilnorAlgebraT for Awhere - A: SteenrodAlgebraT,

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 +From<T> for U chooses to do.

    +

    source§

    impl<A> MilnorAlgebraT for Awhere + A: SteenrodAlgebraT,

    source§

    impl<A> MuAlgebra<false> for Awhere + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebraBorrow.html b/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebraBorrow.html index 3287a2b4e..be54f0a94 100644 --- a/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebraBorrow.html +++ b/docs/algebra/algebra/steenrod_algebra/enum.SteenrodAlgebraBorrow.html @@ -1,4 +1,4 @@ -SteenrodAlgebraBorrow in algebra::algebra::steenrod_algebra - Rust +SteenrodAlgebraBorrow in algebra::algebra::steenrod_algebra - Rust @@ -23,17 +23,17 @@ }); -
    pub enum SteenrodAlgebraBorrow<'a> {
    +
    pub enum SteenrodAlgebraBorrow<'a> {
         BorrowAdem(&'a AdemAlgebra),
         BorrowMilnor(&'a MilnorAlgebra),
    -}

    Variants§

    §

    BorrowAdem(&'a AdemAlgebra)

    §

    BorrowMilnor(&'a MilnorAlgebra)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +}

    Variants§

    §

    BorrowAdem(&'a AdemAlgebra)

    §

    BorrowMilnor(&'a MilnorAlgebra)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/index.html b/docs/algebra/algebra/steenrod_algebra/index.html index 136806414..a7caea4b0 100644 --- a/docs/algebra/algebra/steenrod_algebra/index.html +++ b/docs/algebra/algebra/steenrod_algebra/index.html @@ -1,4 +1,4 @@ -algebra::algebra::steenrod_algebra - Rust +algebra::algebra::steenrod_algebra - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/macro.dispatch_steenrod.html b/docs/algebra/algebra/steenrod_algebra/macro.dispatch_steenrod.html index 5b0e08bda..ba8b4df7c 100644 --- a/docs/algebra/algebra/steenrod_algebra/macro.dispatch_steenrod.html +++ b/docs/algebra/algebra/steenrod_algebra/macro.dispatch_steenrod.html @@ -1,4 +1,4 @@ -dispatch_steenrod in algebra::algebra::steenrod_algebra - Rust +dispatch_steenrod in algebra::algebra::steenrod_algebra - Rust @@ -23,7 +23,7 @@ }); -
    macro_rules! dispatch_steenrod {
    +
    macro_rules! dispatch_steenrod {
         () => { ... };
         ($vis:vis fn $method:ident$(<$($lt:lifetime),+>)?(&$($lt2:lifetime)?self$(, $arg:ident: $ty:ty )*$(,)?) $(-> $ret:ty)?; $($tail:tt)*) => { ... };
     }
    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/struct.AlgebraSpec.html b/docs/algebra/algebra/steenrod_algebra/struct.AlgebraSpec.html index 349dd15a1..c4a41abde 100644 --- a/docs/algebra/algebra/steenrod_algebra/struct.AlgebraSpec.html +++ b/docs/algebra/algebra/steenrod_algebra/struct.AlgebraSpec.html @@ -1,4 +1,4 @@ -AlgebraSpec in algebra::algebra::steenrod_algebra - Rust +AlgebraSpec in algebra::algebra::steenrod_algebra - Rust @@ -23,20 +23,20 @@ }); -
    struct AlgebraSpec {
    -    p: ValidPrime,
    -    algebra: Option<Vec<String>>,
    -    profile: Option<MilnorProfile>,
    -}

    Fields§

    §p: ValidPrime§algebra: Option<Vec<String>>§profile: Option<MilnorProfile>

    Trait Implementations§

    source§

    impl Debug for AlgebraSpec

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for AlgebraSpec

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    struct AlgebraSpec {
    +    p: ValidPrime,
    +    algebra: Option<Vec<String>>,
    +    profile: Option<MilnorProfile>,
    +}

    Fields§

    §p: ValidPrime§algebra: Option<Vec<String>>§profile: Option<MilnorProfile>

    Trait Implementations§

    source§

    impl Debug for AlgebraSpec

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for AlgebraSpec

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/algebra/algebra/steenrod_algebra/trait.SteenrodAlgebraT.html b/docs/algebra/algebra/steenrod_algebra/trait.SteenrodAlgebraT.html index c211d16e6..86113b52e 100644 --- a/docs/algebra/algebra/steenrod_algebra/trait.SteenrodAlgebraT.html +++ b/docs/algebra/algebra/steenrod_algebra/trait.SteenrodAlgebraT.html @@ -1,4 +1,4 @@ -SteenrodAlgebraT in algebra::algebra::steenrod_algebra - Rust +SteenrodAlgebraT in algebra::algebra::steenrod_algebra - Rust @@ -23,7 +23,7 @@ }); -
    pub trait SteenrodAlgebraT: Send + Sync + Algebra {
    +
    pub trait SteenrodAlgebraT: Send + Sync + Algebra {
         // Required method
         fn steenrod_algebra(&self) -> SteenrodAlgebraBorrow<'_>;
    -}

    Required Methods§

    Implementors§

    \ No newline at end of file +}

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/all.html b/docs/algebra/all.html index 4a0866b2f..b9571984d 100644 --- a/docs/algebra/all.html +++ b/docs/algebra/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    Structs

    Enums

    Traits

    Macros

    Functions

    Type Definitions

    Constants

    \ No newline at end of file +

    List of all items

    Structs

    Enums

    Traits

    Macros

    Functions

    Type Aliases

    Constants

    \ No newline at end of file diff --git a/docs/algebra/combinatorics/constant.MAX_XI_TAU.html b/docs/algebra/combinatorics/constant.MAX_XI_TAU.html index 8b7231dc5..952bf6c84 100644 --- a/docs/algebra/combinatorics/constant.MAX_XI_TAU.html +++ b/docs/algebra/combinatorics/constant.MAX_XI_TAU.html @@ -1,4 +1,4 @@ -MAX_XI_TAU in algebra::combinatorics - Rust +MAX_XI_TAU in algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
    pub const MAX_XI_TAU: usize = MAX_MULTINOMIAL_LEN; // 10usize
    \ No newline at end of file +
    pub const MAX_XI_TAU: usize = MAX_MULTINOMIAL_LEN; // 10usize
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/fn.adem_relation_coefficient.html b/docs/algebra/combinatorics/fn.adem_relation_coefficient.html index fc9a951d8..7ca449020 100644 --- a/docs/algebra/combinatorics/fn.adem_relation_coefficient.html +++ b/docs/algebra/combinatorics/fn.adem_relation_coefficient.html @@ -1,4 +1,4 @@ -adem_relation_coefficient in algebra::combinatorics - Rust +adem_relation_coefficient in algebra::combinatorics - Rust @@ -23,11 +23,11 @@ }); -
    pub fn adem_relation_coefficient(
    -    p: ValidPrime,
    -    x: u32,
    -    y: u32,
    -    j: u32,
    -    e1: u32,
    -    e2: u32
    -) -> u32
    \ No newline at end of file +
    pub fn adem_relation_coefficient(
    +    p: ValidPrime,
    +    x: u32,
    +    y: u32,
    +    j: u32,
    +    e1: u32,
    +    e2: u32
    +) -> u32
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/fn.inadmissible_pairs.html b/docs/algebra/combinatorics/fn.inadmissible_pairs.html index 321c6f255..32ff73653 100644 --- a/docs/algebra/combinatorics/fn.inadmissible_pairs.html +++ b/docs/algebra/combinatorics/fn.inadmissible_pairs.html @@ -1,4 +1,4 @@ -inadmissible_pairs in algebra::combinatorics - Rust +inadmissible_pairs in algebra::combinatorics - Rust @@ -23,8 +23,8 @@ }); -
    pub fn inadmissible_pairs(
    -    p: ValidPrime,
    -    generic: bool,
    -    degree: i32
    -) -> Vec<(u32, u32, u32)>
    \ No newline at end of file +
    pub fn inadmissible_pairs(
    +    p: ValidPrime,
    +    generic: bool,
    +    degree: i32
    +) -> Vec<(u32, u32, u32)>
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/fn.tau_degrees.html b/docs/algebra/combinatorics/fn.tau_degrees.html index 24e451229..713b2aadc 100644 --- a/docs/algebra/combinatorics/fn.tau_degrees.html +++ b/docs/algebra/combinatorics/fn.tau_degrees.html @@ -1,4 +1,4 @@ -tau_degrees in algebra::combinatorics - Rust +tau_degrees in algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
    pub fn tau_degrees(p: ValidPrime) -> &'static [i32]
    \ No newline at end of file +
    pub fn tau_degrees(p: ValidPrime) -> &'static [i32]
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/fn.xi_degrees.html b/docs/algebra/combinatorics/fn.xi_degrees.html index 6cf681759..e403fa3a8 100644 --- a/docs/algebra/combinatorics/fn.xi_degrees.html +++ b/docs/algebra/combinatorics/fn.xi_degrees.html @@ -1,4 +1,4 @@ -xi_degrees in algebra::combinatorics - Rust +xi_degrees in algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
    pub fn xi_degrees(p: ValidPrime) -> &'static [i32]
    \ No newline at end of file +
    pub fn xi_degrees(p: ValidPrime) -> &'static [i32]
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/index.html b/docs/algebra/combinatorics/index.html index b2f733a2b..e90207d66 100644 --- a/docs/algebra/combinatorics/index.html +++ b/docs/algebra/combinatorics/index.html @@ -1,4 +1,4 @@ -algebra::combinatorics - Rust +algebra::combinatorics - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/struct.PartitionIterator.html b/docs/algebra/combinatorics/struct.PartitionIterator.html index 56d880906..2d6b0ef73 100644 --- a/docs/algebra/combinatorics/struct.PartitionIterator.html +++ b/docs/algebra/combinatorics/struct.PartitionIterator.html @@ -1,4 +1,4 @@ -PartitionIterator in algebra::combinatorics - Rust +PartitionIterator in algebra::combinatorics - Rust @@ -23,522 +23,522 @@ }); -
    pub struct PartitionIterator<'a> {
    -    remaining: i32,
    -    parts: &'a [i32],
    -    partition: Vec<u32>,
    -    initial: bool,
    -}

    Fields§

    §remaining: i32§parts: &'a [i32]§partition: Vec<u32>§initial: bool

    Implementations§

    source§

    impl<'a> PartitionIterator<'a>

    source

    pub fn new(max_degree: i32, num_parts: u32, parts: &'a [i32]) -> Self

    source

    pub fn search(&mut self) -> bool

    Trait Implementations§

    source§

    impl<'a> Iterator for PartitionIterator<'a>

    §

    type Item = (i32, &'a Vec<u32, Global>)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +
    pub struct PartitionIterator<'a> {
    +    remaining: i32,
    +    parts: &'a [i32],
    +    partition: Vec<u32>,
    +    initial: bool,
    +}

    Fields§

    §remaining: i32§parts: &'a [i32]§partition: Vec<u32>§initial: bool

    Implementations§

    source§

    impl<'a> PartitionIterator<'a>

    source

    pub fn new(max_degree: i32, num_parts: u32, parts: &'a [i32]) -> Self

    source

    pub fn search(&mut self) -> bool

    Trait Implementations§

    source§

    impl<'a> Iterator for PartitionIterator<'a>

    §

    type Item = (i32, &'a Vec<u32, Global>)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for PartitionIterator<'a>

    §

    impl<'a> Send for PartitionIterator<'a>

    §

    impl<'a> Sync for PartitionIterator<'a>

    §

    impl<'a> Unpin for PartitionIterator<'a>

    §

    impl<'a> UnwindSafe for PartitionIterator<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for PartitionIterator<'a>

    §

    impl<'a> Send for PartitionIterator<'a>

    §

    impl<'a> Sync for PartitionIterator<'a>

    §

    impl<'a> Unpin for PartitionIterator<'a>

    §

    impl<'a> UnwindSafe for PartitionIterator<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() -values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere - IT: Iterator<Item = (A, B)>, - FromA: Default + Extend<A>, - FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() +values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere + Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere + IT: Iterator<Item = (A, B)>, + FromA: Default + Extend<A>, + FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html b/docs/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html index a34e13755..031235989 100644 --- a/docs/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html +++ b/docs/algebra/combinatorics/struct.TruncatedPolynomialMonomialBasis.html @@ -1,4 +1,4 @@ -TruncatedPolynomialMonomialBasis in algebra::combinatorics - Rust +TruncatedPolynomialMonomialBasis in algebra::combinatorics - Rust @@ -23,23 +23,23 @@ }); -
    pub struct TruncatedPolynomialMonomialBasis {
    -    p: ValidPrime,
    -    pub gens: OnceVec<(usize, usize)>,
    -    pub gen_degrees: OnceVec<i32>,
    -    parts_by_max: OnceVec<Vec<Vec<FpVector>>>,
    -    pub parts: OnceVec<Vec<FpVector>>,
    -}

    Fields§

    §p: ValidPrime§gens: OnceVec<(usize, usize)>

    degree => (first_index, number_of_gens)

    -
    §gen_degrees: OnceVec<i32>

    index ==> degree

    -
    §parts_by_max: OnceVec<Vec<Vec<FpVector>>>

    degree => max_part => list of partitions with maximum part max_part

    -
    §parts: OnceVec<Vec<FpVector>>

    Implementations§

    source§

    impl TruncatedPolynomialMonomialBasis

    source

    pub fn new(p: ValidPrime) -> Self

    source

    pub fn generators(&self, degree: i32) -> usize

    source

    pub fn generators_up_to_degree(&self, degree: i32) -> usize

    source

    pub fn gen_deg_idx_to_internal_idx(&self, degree: i32, idx: usize) -> usize

    source

    pub fn internal_idx_to_gen_deg(&self, idx: usize) -> (i32, usize)

    source

    pub fn parts(&self, degree: i32) -> &Vec<FpVector>

    source

    pub fn add_gens_and_calculate_parts(&self, degree: i32, new_gens: usize)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct TruncatedPolynomialMonomialBasis {
    +    p: ValidPrime,
    +    pub gens: OnceVec<(usize, usize)>,
    +    pub gen_degrees: OnceVec<i32>,
    +    parts_by_max: OnceVec<Vec<Vec<FpVector>>>,
    +    pub parts: OnceVec<Vec<FpVector>>,
    +}

    Fields§

    §p: ValidPrime§gens: OnceVec<(usize, usize)>

    degree => (first_index, number_of_gens)

    +
    §gen_degrees: OnceVec<i32>

    index ==> degree

    +
    §parts_by_max: OnceVec<Vec<Vec<FpVector>>>

    degree => max_part => list of partitions with maximum part max_part

    +
    §parts: OnceVec<Vec<FpVector>>

    Implementations§

    source§

    impl TruncatedPolynomialMonomialBasis

    source

    pub fn new(p: ValidPrime) -> Self

    source

    pub fn generators(&self, degree: i32) -> usize

    source

    pub fn generators_up_to_degree(&self, degree: i32) -> usize

    source

    pub fn gen_deg_idx_to_internal_idx(&self, degree: i32, idx: usize) -> usize

    source

    pub fn internal_idx_to_gen_deg(&self, idx: usize) -> (i32, usize)

    source

    pub fn parts(&self, degree: i32) -> &Vec<FpVector>

    source

    pub fn add_gens_and_calculate_parts(&self, degree: i32, new_gens: usize)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/enum.AlgebraType.html b/docs/algebra/enum.AlgebraType.html index ab63aa2f4..e7b754ace 100644 --- a/docs/algebra/enum.AlgebraType.html +++ b/docs/algebra/enum.AlgebraType.html @@ -1,4 +1,4 @@ -AlgebraType in algebra - Rust +AlgebraType in algebra - Rust @@ -23,25 +23,25 @@ }); -

    Enum algebra::AlgebraType

    source ·
    pub enum AlgebraType {
    +

    Enum algebra::AlgebraType

    source ·
    pub enum AlgebraType {
         Adem,
         Milnor,
    -}

    Variants§

    §

    Adem

    §

    Milnor

    Trait Implementations§

    source§

    impl Clone for AlgebraType

    source§

    fn clone(&self) -> AlgebraType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromStr for AlgebraType

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<AlgebraType> for AlgebraType

    source§

    fn eq(&self, other: &AlgebraType) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl TryFrom<&str> for AlgebraType

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(s: &str) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl Copy for AlgebraType

    source§

    impl Eq for AlgebraType

    source§

    impl StructuralEq for AlgebraType

    source§

    impl StructuralPartialEq for AlgebraType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +}

    Variants§

    §

    Adem

    §

    Milnor

    Trait Implementations§

    source§

    impl Clone for AlgebraType

    source§

    fn clone(&self) -> AlgebraType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AlgebraType

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl FromStr for AlgebraType

    §

    type Err = Error

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<AlgebraType> for AlgebraType

    source§

    fn eq(&self, other: &AlgebraType) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl TryFrom<&str> for AlgebraType

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_from(s: &str) -> Result<Self, Self::Error>

    Performs the conversion.
    source§

    impl Copy for AlgebraType

    source§

    impl Eq for AlgebraType

    source§

    impl StructuralEq for AlgebraType

    source§

    impl StructuralPartialEq for AlgebraType

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/enum.SteenrodAlgebra.html b/docs/algebra/enum.SteenrodAlgebra.html index ecce3803b..be3000219 100644 --- a/docs/algebra/enum.SteenrodAlgebra.html +++ b/docs/algebra/enum.SteenrodAlgebra.html @@ -1,4 +1,4 @@ -SteenrodAlgebra in algebra - Rust +SteenrodAlgebra in algebra - Rust @@ -23,230 +23,230 @@ }); -
    pub enum SteenrodAlgebra {
    +
    pub enum SteenrodAlgebra {
         AdemAlgebra(AdemAlgebra),
         MilnorAlgebra(MilnorAlgebra),
    -}

    Variants§

    §

    AdemAlgebra(AdemAlgebra)

    §

    MilnorAlgebra(MilnorAlgebra)

    Implementations§

    Variants§

    §

    AdemAlgebra(AdemAlgebra)

    §

    MilnorAlgebra(MilnorAlgebra)

    Implementations§

    source§

    impl SteenrodAlgebra

    source

    pub fn from_json( + json: &Value, algebra_type: AlgebraType, - unstable: bool -) -> Result<SteenrodAlgebra>

    Trait Implementations§

    source§

    impl Algebra for SteenrodAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the + unstable: bool +) -> Result<SteenrodAlgebra>

    Trait Implementations§

    source§

    impl Algebra for SteenrodAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize +disasterous consequences. So we store the magic in the save files. Read more

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn multiply_basis_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_basis_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_basis_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize +result to result. Read more

    source§

    fn multiply_element_by_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is -implemented). Read more
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for SteenrodAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for SteenrodAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used +implemented). Read more

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for SteenrodAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for SteenrodAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used to specify modules by specifying the actions of the generators.

    -
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn decompose_basis_element( +

    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl PairAlgebra for SteenrodAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the -complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>
    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl PairAlgebra for SteenrodAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the +complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said -indecomposable.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( +indecomposable.

    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to -result.
    source§

    fn sigma_multiply( +result.

    source§

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    fn a_multiply( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    fn a_multiply( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element -)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( +)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source§

    fn element_from_bytes( - &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    source§

    impl SteenrodAlgebraT for SteenrodAlgebra

    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for SteenrodAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 -)

    source§

    fn multiply_basis_element_by_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + buffer: &mut impl Write +) -> Result<()>

    source§

    fn element_from_bytes( + &self, + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    source§

    impl SteenrodAlgebraT for SteenrodAlgebra

    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for SteenrodAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 +)

    source§

    fn multiply_basis_element_by_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_basis_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 +result to result. Read more

    source§

    fn multiply_element_by_basis_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 +result to result. Read more

    source§

    fn multiply_element_by_element_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<A> AdemAlgebraT for Awhere - A: SteenrodAlgebraT,

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<A> AdemAlgebraT for Awhere + A: SteenrodAlgebraT,

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<A> MilnorAlgebraT for Awhere - A: SteenrodAlgebraT,

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 +From<T> for U chooses to do.

    +

    source§

    impl<A> MilnorAlgebraT for Awhere + A: SteenrodAlgebraT,

    source§

    impl<A> MuAlgebra<false> for Awhere + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/enum.SteenrodAlgebraBorrow.html b/docs/algebra/enum.SteenrodAlgebraBorrow.html index 16e044b32..6abb36a37 100644 --- a/docs/algebra/enum.SteenrodAlgebraBorrow.html +++ b/docs/algebra/enum.SteenrodAlgebraBorrow.html @@ -1,4 +1,4 @@ -SteenrodAlgebraBorrow in algebra - Rust +SteenrodAlgebraBorrow in algebra - Rust @@ -23,17 +23,17 @@ }); -
    pub enum SteenrodAlgebraBorrow<'a> {
    +
    pub enum SteenrodAlgebraBorrow<'a> {
         BorrowAdem(&'a AdemAlgebra),
         BorrowMilnor(&'a MilnorAlgebra),
    -}

    Variants§

    §

    BorrowAdem(&'a AdemAlgebra)

    §

    BorrowMilnor(&'a MilnorAlgebra)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +}

    Variants§

    §

    BorrowAdem(&'a AdemAlgebra)

    §

    BorrowMilnor(&'a MilnorAlgebra)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/field/index.html b/docs/algebra/field/index.html index e68e5a4e7..89cfe3969 100644 --- a/docs/algebra/field/index.html +++ b/docs/algebra/field/index.html @@ -1,4 +1,4 @@ -algebra::field - Rust +algebra::field - Rust @@ -23,5 +23,5 @@ }); -

    Module algebra::field

    source ·
    Expand description

    Finite fields over a prime.

    +

    Module algebra::field

    source ·
    Expand description

    Finite fields over a prime.

    Structs

    \ No newline at end of file diff --git a/docs/algebra/field/struct.Field.html b/docs/algebra/field/struct.Field.html index 8143454e8..e113cb8f8 100644 --- a/docs/algebra/field/struct.Field.html +++ b/docs/algebra/field/struct.Field.html @@ -1,4 +1,4 @@ -Field in algebra::field - Rust +Field in algebra::field - Rust @@ -23,108 +23,108 @@ }); -

    Struct algebra::field::Field

    source ·
    pub struct Field {
    -    prime: ValidPrime,
    +

    Struct algebra::field::Field

    source ·
    pub struct Field {
    +    prime: ValidPrime,
     }
    Expand description

    $\mathbb{F}_p$, viewed as an Algebra over itself.

    As an Algebra, a field is one-dimensional, with basis element 1. It is also trivially a coalgebra via the trivial diagonal comultiplication, and thus a Bialgebra.

    -

    Fields§

    §prime: ValidPrime

    Implementations§

    source§

    impl Field

    source

    pub fn new(p: ValidPrime) -> Self

    Returns a new Field over the given prime p.

    -

    Trait Implementations§

    source§

    impl Algebra for Field

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, _degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( +

    Fields§

    §prime: ValidPrime

    Implementations§

    source§

    impl Field

    source

    pub fn new(p: ValidPrime) -> Self

    Returns a new Field over the given prime p.

    +

    Trait Implementations§

    source§

    impl Algebra for Field

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, _degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( &self, - result: SliceMut<'_>, - coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + result: SliceMut<'_>, + coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is -implemented). Read more
    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the +implemented). Read more
    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl Bialgebra for Field

    source§

    fn coproduct( &self, - _op_deg: i32, - _op_idx: usize -) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for Field

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Field

    §

    impl Send for Field

    §

    impl Sync for Field

    §

    impl Unpin for Field

    §

    impl UnwindSafe for Field

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + _op_deg: i32, + _op_idx: usize +) -> Vec<(i32, usize, i32, usize)>
    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for Field

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Field

    §

    impl Send for Field

    §

    impl Sync for Field

    §

    impl Unpin for Field

    §

    impl UnwindSafe for Field

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    +From<T> for U chooses to do.

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/fn.module_gens_from_json.html b/docs/algebra/fn.module_gens_from_json.html index 5ff478068..523a3c359 100644 --- a/docs/algebra/fn.module_gens_from_json.html +++ b/docs/algebra/fn.module_gens_from_json.html @@ -1,4 +1,4 @@ -module_gens_from_json in algebra - Rust +module_gens_from_json in algebra - Rust @@ -23,6 +23,6 @@ }); -
    pub(crate) fn module_gens_from_json(
    -    gens: &Value
    -) -> (BiVec<usize>, BiVec<Vec<String>>, impl for<'a> Fn(&'a str) -> Result<(i32, usize)> + '_)
    \ No newline at end of file +
    pub(crate) fn module_gens_from_json(
    +    gens: &Value
    +) -> (BiVec<usize>, BiVec<Vec<String>>, impl for<'a> Fn(&'a str) -> Result<(i32, usize)> + '_)
    \ No newline at end of file diff --git a/docs/algebra/index.html b/docs/algebra/index.html index bdd209023..2aa395968 100644 --- a/docs/algebra/index.html +++ b/docs/algebra/index.html @@ -1,4 +1,4 @@ -algebra - Rust +algebra - Rust @@ -23,7 +23,7 @@ }); -

    Crate algebra

    source ·
    Expand description

    Types and traits for working with various algebras and modules, with +

    Crate algebra

    source ·
    Expand description

    Types and traits for working with various algebras and modules, with a focus on the Steenrod algebra and its modules.

    Modules

    source§

    impl MilnorAlgebra

    source

    fn increment_p_part(element: &mut PPart, max: &[PPartEntry]) -> bool

    Returns true if the new element is not within the bounds

    +

    Trait Implementations§

    source§

    impl Algebra for MilnorAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coef: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize +disasterous consequences. So we store the magic in the save files. Read more

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coef: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn multiply_basis_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_basis_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element( - &self, - res: SliceMut<'_>, - coef: u32, - r_deg: i32, - r: Slice<'_>, - s_deg: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_element_by_element( + &self, + res: SliceMut<'_>, + coef: u32, + r_deg: i32, + r: Slice<'_>, + s_deg: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
    source§

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for MilnorAlgebra

    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for MilnorAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for MilnorAlgebra

    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( +result to result. Read more

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for MilnorAlgebra

    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for MilnorAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for MilnorAlgebra

    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl MilnorAlgebraT for MilnorAlgebra

    source§

    impl PairAlgebra for MilnorAlgebra

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl MilnorAlgebraT for MilnorAlgebra

    source§

    impl PairAlgebra for MilnorAlgebra

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the complement of the image of the differential.

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.
    source§

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.
    source§

    fn a_multiply( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element )

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source§

    fn element_from_bytes( + buffer: &mut impl Write +) -> Result<()>

    source§

    fn element_from_bytes( &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    source§

    fn sigma_multiply( + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    source§

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for MilnorAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for MilnorAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    +From<T> for U chooses to do.

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/struct.MilnorBasisElement.html b/docs/algebra/milnor_algebra/struct.MilnorBasisElement.html index 6072bc1ab..3c4415619 100644 --- a/docs/algebra/milnor_algebra/struct.MilnorBasisElement.html +++ b/docs/algebra/milnor_algebra/struct.MilnorBasisElement.html @@ -1,4 +1,4 @@ -MilnorBasisElement in algebra::milnor_algebra - Rust +MilnorBasisElement in algebra::milnor_algebra - Rust @@ -23,32 +23,32 @@ }); -
    pub struct MilnorBasisElement {
    -    pub q_part: u32,
    +
    pub struct MilnorBasisElement {
    +    pub q_part: u32,
         pub p_part: PPart,
    -    pub degree: i32,
    -}

    Fields§

    §q_part: u32§p_part: PPart§degree: i32

    Implementations§

    source§

    impl MilnorBasisElement

    source

    fn from_p(p_part: PPart, degree: i32) -> Self

    source

    fn excess(&self, p: ValidPrime) -> u32

    source

    pub fn clone_into(&self, other: &mut Self)

    source

    pub fn compute_degree(&mut self, p: ValidPrime)

    Update the degree component to the correct degree

    -

    Trait Implementations§

    source§

    impl Clone for MilnorBasisElement

    source§

    fn clone(&self) -> MilnorBasisElement

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MilnorBasisElement

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for MilnorBasisElement

    source§

    fn default() -> MilnorBasisElement

    Returns the “default value” for a type. Read more
    source§

    impl Display for MilnorBasisElement

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for MilnorBasisElement

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<MilnorBasisElement> for MilnorBasisElement

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for MilnorBasisElement

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere - T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + pub degree: i32, +}

    Fields§

    §q_part: u32§p_part: PPart§degree: i32

    Implementations§

    source§

    impl MilnorBasisElement

    source

    fn from_p(p_part: PPart, degree: i32) -> Self

    source

    fn excess(&self, p: ValidPrime) -> u32

    source

    pub fn clone_into(&self, other: &mut Self)

    source

    pub fn compute_degree(&mut self, p: ValidPrime)

    Update the degree component to the correct degree

    +

    Trait Implementations§

    source§

    impl Clone for MilnorBasisElement

    source§

    fn clone(&self) -> MilnorBasisElement

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MilnorBasisElement

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for MilnorBasisElement

    source§

    fn default() -> MilnorBasisElement

    Returns the “default value” for a type. Read more
    source§

    impl Display for MilnorBasisElement

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for MilnorBasisElement

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<MilnorBasisElement> for MilnorBasisElement

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for MilnorBasisElement

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere + T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/struct.MilnorProfile.html b/docs/algebra/milnor_algebra/struct.MilnorProfile.html index 38dbdf538..619697ffc 100644 --- a/docs/algebra/milnor_algebra/struct.MilnorProfile.html +++ b/docs/algebra/milnor_algebra/struct.MilnorProfile.html @@ -1,4 +1,4 @@ -MilnorProfile in algebra::milnor_algebra - Rust +MilnorProfile in algebra::milnor_algebra - Rust @@ -23,34 +23,34 @@ }); -
    pub struct MilnorProfile {
    -    pub truncated: bool,
    -    pub q_part: u32,
    +
    pub struct MilnorProfile {
    +    pub truncated: bool,
    +    pub q_part: u32,
         pub p_part: PPart,
    -}

    Fields§

    §truncated: bool

    If true, unspecified p_part entries will be 0. Otherwise they will be infinity.

    -
    §q_part: u32

    A bitmask indicating which of the Q_k we want to include (1 = include). Defaults to !0. +}

    Fields§

    §truncated: bool

    If true, unspecified p_part entries will be 0. Otherwise they will be infinity.

    +
    §q_part: u32

    A bitmask indicating which of the Q_k we want to include (1 = include). Defaults to !0. This is only relevant at odd primes.

    §p_part: PPart

    The profile function for the Q part.

    -

    Implementations§

    source§

    impl MilnorProfile

    source

    pub fn is_trivial(&self) -> bool

    source

    pub fn get_p_part(&self, i: usize) -> PPartEntry

    source

    pub fn is_valid(&self) -> bool

    Checks whether the profile function is valid

    -
    source

    pub fn is_an(&self, generic: bool) -> bool

    Whether the profile is that of A(n). This is relevant since A(n) is generated by P(p^n) and +

    Implementations§

    source§

    impl MilnorProfile

    source

    pub fn is_trivial(&self) -> bool

    source

    pub fn get_p_part(&self, i: usize) -> PPartEntry

    source

    pub fn is_valid(&self) -> bool

    Checks whether the profile function is valid

    +
    source

    pub fn is_an(&self, generic: bool) -> bool

    Whether the profile is that of A(n). This is relevant since A(n) is generated by P(p^n) and β but a general subalgebra is not.

    -

    Trait Implementations§

    source§

    impl Debug for MilnorProfile

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for MilnorProfile

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for MilnorProfile

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<MilnorProfile> for MilnorProfile

    source§

    fn eq(&self, other: &MilnorProfile) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for MilnorProfile

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for MilnorProfile

    source§

    impl StructuralEq for MilnorProfile

    source§

    impl StructuralPartialEq for MilnorProfile

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Debug for MilnorProfile

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for MilnorProfile

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for MilnorProfile

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl PartialEq<MilnorProfile> for MilnorProfile

    source§

    fn eq(&self, other: &MilnorProfile) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for MilnorProfile

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for MilnorProfile

    source§

    impl StructuralEq for MilnorProfile

    source§

    impl StructuralPartialEq for MilnorProfile

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/struct.PPartAllocation.html b/docs/algebra/milnor_algebra/struct.PPartAllocation.html index 811565b84..d293a6218 100644 --- a/docs/algebra/milnor_algebra/struct.PPartAllocation.html +++ b/docs/algebra/milnor_algebra/struct.PPartAllocation.html @@ -1,4 +1,4 @@ -PPartAllocation in algebra::milnor_algebra - Rust +PPartAllocation in algebra::milnor_algebra - Rust @@ -23,23 +23,23 @@ }); -
    pub struct PPartAllocation {
    +
    pub struct PPartAllocation {
         m: Matrix2D,
         diagonal: PPart,
         p_part: PPart,
     }
    Expand description

    The parts of a PPartMultiplier that involve heap allocation. This lets us reuse the allocation across multiple different multipliers. Reusing the whole PPartMultiplier is finicky but doable due to lifetime issues, but it appears to be less performant.

    -

    Fields§

    §m: Matrix2D§diagonal: PPart§p_part: PPart

    Implementations§

    source§

    impl PPartAllocation

    source

    pub fn with_capacity(n: usize) -> Self

    This creates a PPartAllocation with enough capacity to handle mulitiply elements with +

    Fields§

    §m: Matrix2D§diagonal: PPart§p_part: PPart

    Implementations§

    source§

    impl PPartAllocation

    source

    pub fn with_capacity(n: usize) -> Self

    This creates a PPartAllocation with enough capacity to handle mulitiply elements with of total degree < 2^n - ε at p = 2.

    -
    source

    pub fn with_local(f: impl FnOnce(Self) -> Self)

    Trait Implementations§

    source§

    impl Default for PPartAllocation

    source§

    fn default() -> PPartAllocation

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn with_local(f: impl FnOnce(Self) -> Self)

    Trait Implementations§

    source§

    impl Default for PPartAllocation

    source§

    fn default() -> PPartAllocation

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/struct.PPartMultiplier.html b/docs/algebra/milnor_algebra/struct.PPartMultiplier.html index 1eaa0e961..517fa15b0 100644 --- a/docs/algebra/milnor_algebra/struct.PPartMultiplier.html +++ b/docs/algebra/milnor_algebra/struct.PPartMultiplier.html @@ -1,4 +1,4 @@ -PPartMultiplier in algebra::milnor_algebra - Rust +PPartMultiplier in algebra::milnor_algebra - Rust @@ -23,24 +23,24 @@ }); -
    pub struct PPartMultiplier<'a, const MOD4: bool> {
    -    p: ValidPrime,
    +
    pub struct PPartMultiplier<'a, const MOD4: bool> {
    +    p: ValidPrime,
         M: Matrix2D,
         r: &'a PPart,
    -    rows: usize,
    -    cols: usize,
    -    diag_num: usize,
    -    init: bool,
    +    rows: usize,
    +    cols: usize,
    +    diag_num: usize,
    +    init: bool,
         pub ans: MilnorBasisElement,
         diagonal: PPart,
    -}

    Fields§

    §p: ValidPrime§M: Matrix2D§r: &'a PPart§rows: usize§cols: usize§diag_num: usize§init: bool§ans: MilnorBasisElement§diagonal: PPart

    Implementations§

    source§

    impl<'a, const MOD4: bool> PPartMultiplier<'a, MOD4>

    source

    fn prime(&self) -> ValidPrime

    source

    pub fn new_from_allocation( - p: ValidPrime, +}

    Fields§

    §p: ValidPrime§M: Matrix2D§r: &'a PPart§rows: usize§cols: usize§diag_num: usize§init: bool§ans: MilnorBasisElement§diagonal: PPart

    Implementations§

    source§

    impl<'a, const MOD4: bool> PPartMultiplier<'a, MOD4>

    source

    fn prime(&self) -> ValidPrime

    source

    pub fn new_from_allocation( + p: ValidPrime, r: &'a PPart, s: &'a PPart, allocation: PPartAllocation, - q_part: u32, - degree: i32 -) -> Self

    source

    pub fn into_allocation(self) -> PPartAllocation

    source

    fn next_val( + q_part: u32, + degree: i32 +) -> Self

    source

    pub fn into_allocation(self) -> PPartAllocation

    source

    fn next_val( &self, sum: PPartEntry, k: PPartEntry, @@ -48,7 +48,7 @@ ) -> PPartEntry

    This compute the first l > k such that (sum + l) choose l != 0 mod p, stopping if we reach max + 1. This is useful for incrementing the matrix.

    TODO: Improve odd prime performance

    -
    source

    fn update(&mut self) -> bool

    source

    fn update(&mut self) -> bool

    We have a matrix of the form | s₁ s₂ s₃ …

    r₁ | r₂ | x_{ij} @@ -58,514 +58,514 @@ matrix row by row, from top-to-bottom, and left-to-right. In each pass, we find the first entry that can be incremented. We then increment it and zero out all the entries that appear before it. This will give us all valid entries.

    -

    Trait Implementations§

    source§

    impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>

    §

    type Item = u32

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<u32>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Trait Implementations§

    source§

    impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>

    §

    type Item = u32

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<u32>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>

    §

    impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/trait.MilnorAlgebraT.html b/docs/algebra/milnor_algebra/trait.MilnorAlgebraT.html index 29db70b90..1a7e3a77c 100644 --- a/docs/algebra/milnor_algebra/trait.MilnorAlgebraT.html +++ b/docs/algebra/milnor_algebra/trait.MilnorAlgebraT.html @@ -1,4 +1,4 @@ -MilnorAlgebraT in algebra::milnor_algebra - Rust +MilnorAlgebraT in algebra::milnor_algebra - Rust @@ -23,7 +23,7 @@ }); -
    pub trait MilnorAlgebraT: Send + Sync + Algebra {
    +
    pub trait MilnorAlgebraT: Send + Sync + Algebra {
         // Required method
         fn milnor_algebra(&self) -> &MilnorAlgebra;
    -}

    Required Methods§

    Implementors§

    \ No newline at end of file +}

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/type.PPart.html b/docs/algebra/milnor_algebra/type.PPart.html index a09885102..21aca5098 100644 --- a/docs/algebra/milnor_algebra/type.PPart.html +++ b/docs/algebra/milnor_algebra/type.PPart.html @@ -1,4 +1,4 @@ -PPart in algebra::milnor_algebra - Rust +PPart in algebra::milnor_algebra - Rust @@ -23,4 +23,1066 @@ }); -

    Type Definition algebra::milnor_algebra::PPart

    source ·
    pub type PPart = Vec<PPartEntry>;
    \ No newline at end of file +

    Type Alias algebra::milnor_algebra::PPart

    source ·
    pub type PPart = Vec<PPartEntry>;

    Aliased Type§

    struct PPart {
    +    buf: RawVec<u32, Global>,
    +    len: usize,
    +}

    Fields§

    §buf: RawVec<u32, Global>§len: usize

    Methods from Deref<Target = [T]>§

    source

    pub fn as_str(&self) -> &str

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a UTF-8 str.

    +
    source

    pub fn as_bytes(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a slice of u8 bytes.

    +
    1.23.0 · source

    pub fn is_ascii(&self) -> bool

    Checks if all bytes in this slice are within the ASCII range.

    +
    source

    pub fn as_ascii(&self) -> Option<&[AsciiChar]>

    🔬This is a nightly-only experimental API. (ascii_char)

    If this slice is_ascii, returns it as a slice of +ASCII characters, otherwise returns None.

    +
    source

    pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar]

    🔬This is a nightly-only experimental API. (ascii_char)

    Converts this slice of bytes into a slice of ASCII characters, +without checking whether they’re valid.

    +
    Safety
    +

    Every byte in the slice must be in 0..=127, or else this is UB.

    +
    1.23.0 · source

    pub fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool

    Checks that two slices are an ASCII case-insensitive match.

    +

    Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), +but without allocating and copying temporaries.

    +
    1.60.0 · source

    pub fn escape_ascii(&self) -> EscapeAscii<'_>

    Returns an iterator that produces an escaped version of this slice, +treating it as an ASCII string.

    +
    Examples
    +
    
    +let s = b"0\t\r\n'\"\\\x9d";
    +let escaped = s.escape_ascii().to_string();
    +assert_eq!(escaped, "0\\t\\r\\n\\'\\\"\\\\\\x9d");
    +
    source

    pub fn trim_ascii_start(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b" \t hello world\n".trim_ascii_start(), b"hello world\n");
    +assert_eq!(b"  ".trim_ascii_start(), b"");
    +assert_eq!(b"".trim_ascii_start(), b"");
    +
    source

    pub fn trim_ascii_end(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with trailing ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii_end(), b"\r hello world");
    +assert_eq!(b"  ".trim_ascii_end(), b"");
    +assert_eq!(b"".trim_ascii_end(), b"");
    +
    source

    pub fn trim_ascii(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading and trailing ASCII whitespace bytes +removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii(), b"hello world");
    +assert_eq!(b"  ".trim_ascii(), b"");
    +assert_eq!(b"".trim_ascii(), b"");
    +
    source

    pub fn flatten(&self) -> &[T]

    🔬This is a nightly-only experimental API. (slice_flatten)

    Takes a &[[T; N]], and flattens it to a &[T].

    +
    Panics
    +

    This panics if the length of the resulting slice would overflow a usize.

    +

    This is only possible when flattening a slice of arrays of zero-sized +types, and thus tends to be irrelevant in practice. If +size_of::<T>() > 0, this will never panic.

    +
    Examples
    +
    #![feature(slice_flatten)]
    +
    +assert_eq!([[1, 2, 3], [4, 5, 6]].flatten(), &[1, 2, 3, 4, 5, 6]);
    +
    +assert_eq!(
    +    [[1, 2, 3], [4, 5, 6]].flatten(),
    +    [[1, 2], [3, 4], [5, 6]].flatten(),
    +);
    +
    +let slice_of_empty_arrays: &[[i32; 0]] = &[[], [], [], [], []];
    +assert!(slice_of_empty_arrays.flatten().is_empty());
    +
    +let empty_slice_of_arrays: &[[u32; 10]] = &[];
    +assert!(empty_slice_of_arrays.flatten().is_empty());
    +
    1.0.0 · source

    pub fn len(&self) -> usize

    Returns the number of elements in the slice.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert_eq!(a.len(), 3);
    +
    1.0.0 · source

    pub fn is_empty(&self) -> bool

    Returns true if the slice has a length of 0.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert!(!a.is_empty());
    +
    1.0.0 · source

    pub fn first(&self) -> Option<&T>

    Returns the first element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&10), v.first());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.first());
    +
    1.5.0 · source

    pub fn split_first(&self) -> Option<(&T, &[T])>

    Returns the first and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first() {
    +    assert_eq!(first, &0);
    +    assert_eq!(elements, &[1, 2]);
    +}
    +
    1.5.0 · source

    pub fn split_last(&self) -> Option<(&T, &[T])>

    Returns the last and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last() {
    +    assert_eq!(last, &2);
    +    assert_eq!(elements, &[0, 1]);
    +}
    +
    1.0.0 · source

    pub fn last(&self) -> Option<&T>

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&30), v.last());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.last());
    +
    source

    pub fn first_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice, or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[10, 40]), u.first_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.first_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.first_chunk::<0>());
    +
    source

    pub fn split_first_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first_chunk::<2>() {
    +    assert_eq!(first, &[0, 1]);
    +    assert_eq!(elements, &[2]);
    +}
    +
    source

    pub fn split_last_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last_chunk::<2>() {
    +    assert_eq!(last, &[1, 2]);
    +    assert_eq!(elements, &[0]);
    +}
    +
    source

    pub fn last_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[40, 30]), u.last_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.last_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.last_chunk::<0>());
    +
    1.0.0 · source

    pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>where + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice depending on the type of +index.

    +
      +
    • If given a position, returns a reference to the element at that +position or None if out of bounds.
    • +
    • If given a range, returns the subslice corresponding to that range, +or None if out of bounds.
    • +
    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&40), v.get(1));
    +assert_eq!(Some(&[10, 40][..]), v.get(0..2));
    +assert_eq!(None, v.get(3));
    +assert_eq!(None, v.get(0..4));
    +
    1.0.0 · source

    pub unsafe fn get_unchecked<I>( + &self, + index: I +) -> &<I as SliceIndex<[T]>>::Outputwhere + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice, without doing bounds +checking.

    +

    For a safe alternative see get.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +
    +unsafe {
    +    assert_eq!(x.get_unchecked(1), &2);
    +}
    +
    1.0.0 · source

    pub fn as_ptr(&self) -> *const T

    Returns a raw pointer to the slice’s buffer.

    +

    The caller must ensure that the slice outlives the pointer this +function returns, or else it will end up pointing to garbage.

    +

    The caller must also ensure that the memory the pointer (non-transitively) points to +is never written to (except inside an UnsafeCell) using this pointer or any pointer +derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

    +

    Modifying the container referenced by this slice may cause its buffer +to be reallocated, which would also make any pointers to it invalid.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let x_ptr = x.as_ptr();
    +
    +unsafe {
    +    for i in 0..x.len() {
    +        assert_eq!(x.get_unchecked(i), &*x_ptr.add(i));
    +    }
    +}
    +
    1.48.0 · source

    pub fn as_ptr_range(&self) -> Range<*const T>

    Returns the two raw pointers spanning the slice.

    +

    The returned range is half-open, which means that the end pointer +points one past the last element of the slice. This way, an empty +slice is represented by two equal pointers, and the difference between +the two pointers represents the size of the slice.

    +

    See as_ptr for warnings on using these pointers. The end pointer +requires extra caution, as it does not point to a valid element in the +slice.

    +

    This function is useful for interacting with foreign interfaces which +use two pointers to refer to a range of elements in memory, as is +common in C++.

    +

    It can also be useful to check if a pointer to an element refers to an +element of this slice:

    + +
    let a = [1, 2, 3];
    +let x = &a[1] as *const _;
    +let y = &5 as *const _;
    +
    +assert!(a.as_ptr_range().contains(&x));
    +assert!(!a.as_ptr_range().contains(&y));
    +
    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, T>

    Returns an iterator over the slice.

    +

    The iterator yields all items from start to end.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let mut iterator = x.iter();
    +
    +assert_eq!(iterator.next(), Some(&1));
    +assert_eq!(iterator.next(), Some(&2));
    +assert_eq!(iterator.next(), Some(&4));
    +assert_eq!(iterator.next(), None);
    +
    1.0.0 · source

    pub fn windows(&self, size: usize) -> Windows<'_, T>

    Returns an iterator over all contiguous windows of length +size. The windows overlap. If the slice is shorter than +size, the iterator returns no values.

    +
    Panics
    +

    Panics if size is 0.

    +
    Examples
    +
    let slice = ['r', 'u', 's', 't'];
    +let mut iter = slice.windows(2);
    +assert_eq!(iter.next().unwrap(), &['r', 'u']);
    +assert_eq!(iter.next().unwrap(), &['u', 's']);
    +assert_eq!(iter.next().unwrap(), &['s', 't']);
    +assert!(iter.next().is_none());
    +

    If the slice is shorter than size:

    + +
    let slice = ['f', 'o', 'o'];
    +let mut iter = slice.windows(4);
    +assert!(iter.next().is_none());
    +

    There’s no windows_mut, as that existing would let safe code violate the +“only one &mut at a time to the same thing” rule. However, you can sometimes +use Cell::as_slice_of_cells in +conjunction with windows to accomplish something similar:

    + +
    use std::cell::Cell;
    +
    +let mut array = ['R', 'u', 's', 't', ' ', '2', '0', '1', '5'];
    +let slice = &mut array[..];
    +let slice_of_cells: &[Cell<char>] = Cell::from_mut(slice).as_slice_of_cells();
    +for w in slice_of_cells.windows(3) {
    +    Cell::swap(&w[0], &w[2]);
    +}
    +assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
    +
    1.0.0 · source

    pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See chunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and rchunks for the same iterator but starting at the end of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert_eq!(iter.next().unwrap(), &['m']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of chunks.

    +

    See chunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and rchunks_exact for the same iterator but starting at the end of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub unsafe fn as_chunks_unchecked<const N: usize>(&self) -> &[[T; N]]

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +assuming that there’s no remainder.

    +
    Safety
    +

    This may only be called when

    +
      +
    • The slice splits exactly into N-element chunks (aka self.len() % N == 0).
    • +
    • N != 0.
    • +
    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice: &[char] = &['l', 'o', 'r', 'e', 'm', '!'];
    +let chunks: &[[char; 1]] =
    +    // SAFETY: 1-element chunks never have remainder
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l'], ['o'], ['r'], ['e'], ['m'], ['!']]);
    +let chunks: &[[char; 3]] =
    +    // SAFETY: The slice length (6) is a multiple of 3
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l', 'o', 'r'], ['e', 'm', '!']]);
    +
    +// These would be unsound:
    +// let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5
    +// let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed
    +
    source

    pub fn as_chunks<const N: usize>(&self) -> (&[[T; N]], &[T])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the beginning of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (chunks, remainder) = slice.as_chunks();
    +assert_eq!(chunks, &[['l', 'o'], ['r', 'e']]);
    +assert_eq!(remainder, &['m']);
    +

    If you expect the slice to be an exact multiple, you can combine +let-else with an empty slice pattern:

    + +
    #![feature(slice_as_chunks)]
    +let slice = ['R', 'u', 's', 't'];
    +let (chunks, []) = slice.as_chunks::<2>() else {
    +    panic!("slice didn't have even length")
    +};
    +assert_eq!(chunks, &[['R', 'u'], ['s', 't']]);
    +
    source

    pub fn as_rchunks<const N: usize>(&self) -> (&[T], &[[T; N]])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the end of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (remainder, chunks) = slice.as_rchunks();
    +assert_eq!(remainder, &['l']);
    +assert_eq!(chunks, &[['o', 'r'], ['e', 'm']]);
    +
    source

    pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N>

    🔬This is a nightly-only experimental API. (array_chunks)

    Returns an iterator over N elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are array references and do not overlap. If N does not divide the +length of the slice, then the last up to N-1 elements will be omitted and can be +retrieved from the remainder function of the iterator.

    +

    This method is the const generic equivalent of chunks_exact.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.array_chunks();
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N>

    🔬This is a nightly-only experimental API. (array_windows)

    Returns an iterator over overlapping windows of N elements of a slice, +starting at the beginning of the slice.

    +

    This is the const generic equivalent of windows.

    +

    If N is greater than the size of the slice, it will return no windows.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_windows)]
    +let slice = [0, 1, 2, 3];
    +let mut iter = slice.array_windows();
    +assert_eq!(iter.next().unwrap(), &[0, 1]);
    +assert_eq!(iter.next().unwrap(), &[1, 2]);
    +assert_eq!(iter.next().unwrap(), &[2, 3]);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the end +of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See rchunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and chunks for the same iterator but starting at the beginning +of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert_eq!(iter.next().unwrap(), &['l']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +end of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of rchunks.

    +

    See rchunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and chunks_exact for the same iterator but starting at the beginning of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['l']);
    +
    source

    pub fn group_by<F>(&self, pred: F) -> GroupBy<'_, T, F>where + F: FnMut(&T, &T) -> bool,

    🔬This is a nightly-only experimental API. (slice_group_by)

    Returns an iterator over the slice producing non-overlapping runs +of elements using the predicate to separate them.

    +

    The predicate is called on two elements following themselves, +it means the predicate is called on slice[0] and slice[1] +then on slice[1] and slice[2] and so on.

    +
    Examples
    +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
    +
    +let mut iter = slice.group_by(|a, b| a == b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
    +assert_eq!(iter.next(), Some(&[3, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
    +assert_eq!(iter.next(), None);
    +

    This method can be used to extract the sorted subslices:

    + +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 2, 3, 2, 3, 2, 3, 4];
    +
    +let mut iter = slice.group_by(|a, b| a <= b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3, 4][..]));
    +assert_eq!(iter.next(), None);
    +
    1.0.0 · source

    pub fn split_at(&self, mid: usize) -> (&[T], &[T])

    Divides one slice into two at an index.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if mid > len.

    +
    Examples
    +
    let v = [1, 2, 3, 4, 5, 6];
    +
    +{
    +   let (left, right) = v.split_at(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T])

    🔬This is a nightly-only experimental API. (slice_split_at_unchecked)

    Divides one slice into two at an index, without doing bounds checking.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +

    For a safe alternative see split_at.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used. The caller has to ensure that +0 <= mid <= self.len().

    +
    Examples
    +
    #![feature(slice_split_at_unchecked)]
    +
    +let v = [1, 2, 3, 4, 5, 6];
    +
    +unsafe {
    +   let (left, right) = v.split_at_unchecked(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn split_array_ref<const N: usize>(&self) -> (&[T; N], &[T])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index.

    +

    The array will contain all indices from [0, N) (excluding +the index N itself) and the slice will contain all +indices from [N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.split_array_ref::<0>();
    +   assert_eq!(left, &[]);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<2>();
    +    assert_eq!(left, &[1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<6>();
    +    assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn rsplit_array_ref<const N: usize>(&self) -> (&[T], &[T; N])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index from +the end.

    +

    The slice will contain all indices from [0, len - N) (excluding +the index len - N itself) and the array will contain all +indices from [len - N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.rsplit_array_ref::<0>();
    +   assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +   assert_eq!(right, &[]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<2>();
    +    assert_eq!(left, [1, 2, 3, 4]);
    +    assert_eq!(right, &[5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<6>();
    +    assert_eq!(left, []);
    +    assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
    +}
    +
    1.0.0 · source

    pub fn split<F>(&self, pred: F) -> Split<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the first element is matched, an empty slice will be the first item +returned by the iterator. Similarly, if the last element in the slice +is matched, an empty slice will be the last item returned by the +iterator:

    + +
    let slice = [10, 40, 33];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert!(iter.next().is_none());
    +

    If two matched elements are directly adjacent, an empty slice will be +present between them:

    + +
    let slice = [10, 6, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +
    1.51.0 · source

    pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is contained in the end of the previous +subslice as a terminator.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the last element of the slice is matched, +that element will be considered the terminator of the preceding slice. +That slice will be the last item returned by the iterator.

    + +
    let slice = [3, 10, 40, 33];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[3]);
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert!(iter.next().is_none());
    +
    1.27.0 · source

    pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, starting at the end of the slice and working backwards. +The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [11, 22, 33, 0, 44, 55];
    +let mut iter = slice.rsplit(|num| *num == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[44, 55]);
    +assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
    +assert_eq!(iter.next(), None);
    +

    As with split(), if the first or last element is matched, an empty +slice will be the first (or last) item returned by the iterator.

    + +
    let v = &[0, 1, 1, 2, 3, 5, 8];
    +let mut it = v.rsplit(|n| *n % 2 == 0);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next().unwrap(), &[3, 5]);
    +assert_eq!(it.next().unwrap(), &[1, 1]);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next(), None);
    +
    1.0.0 · source

    pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, limited to returning at most n items. The matched element is +not contained in the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once by numbers divisible by 3 (i.e., [10, 40], +[20, 60, 50]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.splitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred limited to returning at most n items. This starts at the end of +the slice and works backwards. The matched element is not contained in +the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once, starting from the end, by numbers divisible +by 3 (i.e., [50], [10, 40, 30, 20]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.rsplitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn contains(&self, x: &T) -> boolwhere + T: PartialEq<T>,

    Returns true if the slice contains an element with the given value.

    +

    This operation is O(n).

    +

    Note that if you have a sorted slice, binary_search may be faster.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.contains(&30));
    +assert!(!v.contains(&50));
    +

    If you do not have a &T, but some other value that you can compare +with one (for example, String implements PartialEq<str>), you can +use iter().any:

    + +
    let v = [String::from("hello"), String::from("world")]; // slice of `String`
    +assert!(v.iter().any(|e| e == "hello")); // search with `&str`
    +assert!(!v.iter().any(|e| e == "hi"));
    +
    1.0.0 · source

    pub fn starts_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a prefix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.starts_with(&[10]));
    +assert!(v.starts_with(&[10, 40]));
    +assert!(!v.starts_with(&[50]));
    +assert!(!v.starts_with(&[10, 50]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.starts_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.starts_with(&[]));
    +
    1.0.0 · source

    pub fn ends_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a suffix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.ends_with(&[30]));
    +assert!(v.ends_with(&[40, 30]));
    +assert!(!v.ends_with(&[50]));
    +assert!(!v.ends_with(&[50, 30]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.ends_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.ends_with(&[]));
    +
    1.51.0 · source

    pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the prefix removed.

    +

    If the slice starts with prefix, returns the subslice after the prefix, wrapped in Some. +If prefix is empty, simply returns the original slice.

    +

    If the slice does not start with prefix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
    +assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
    +assert_eq!(v.strip_prefix(&[50]), None);
    +assert_eq!(v.strip_prefix(&[10, 50]), None);
    +
    +let prefix : &str = "he";
    +assert_eq!(b"hello".strip_prefix(prefix.as_bytes()),
    +           Some(b"llo".as_ref()));
    +
    1.51.0 · source

    pub fn strip_suffix<P>(&self, suffix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the suffix removed.

    +

    If the slice ends with suffix, returns the subslice before the suffix, wrapped in Some. +If suffix is empty, simply returns the original slice.

    +

    If the slice does not end with suffix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
    +assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
    +assert_eq!(v.strip_suffix(&[50]), None);
    +assert_eq!(v.strip_suffix(&[50, 30]), None);
    +

    Binary searches this slice for a given element. +If the slice is not sorted, the returned result is unspecified and +meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search_by, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +assert_eq!(s.binary_search(&13),  Ok(9));
    +assert_eq!(s.binary_search(&4),   Err(7));
    +assert_eq!(s.binary_search(&100), Err(13));
    +let r = s.binary_search(&1);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +

    If you want to find that whole range of matching items, rather than +an arbitrary matching one, that can be done using partition_point:

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let low = s.partition_point(|x| x < &1);
    +assert_eq!(low, 1);
    +let high = s.partition_point(|x| x <= &1);
    +assert_eq!(high, 5);
    +let r = s.binary_search(&1);
    +assert!((low..high).contains(&r.unwrap()));
    +
    +assert!(s[..low].iter().all(|&x| x < 1));
    +assert!(s[low..high].iter().all(|&x| x == 1));
    +assert!(s[high..].iter().all(|&x| x > 1));
    +
    +// For something not found, the "range" of equal items is empty
    +assert_eq!(s.partition_point(|x| x < &11), 9);
    +assert_eq!(s.partition_point(|x| x <= &11), 9);
    +assert_eq!(s.binary_search(&11), Err(9));
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order, consider using partition_point:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +// The above is equivalent to `let idx = s.binary_search(&num).unwrap_or_else(|x| x);`
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize>where + F: FnMut(&'a T) -> Ordering,

    Binary searches this slice with a comparator function.

    +

    The comparator function should return an order code that indicates +whether its argument is Less, Equal or Greater the desired +target. +If the slice is not sorted or if the comparator function does not +implement an order consistent with the sort order of the underlying +slice, the returned result is unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let seek = 13;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
    +let seek = 4;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
    +let seek = 100;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
    +let seek = 1;
    +let r = s.binary_search_by(|probe| probe.cmp(&seek));
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.10.0 · source

    pub fn binary_search_by_key<'a, B, F>( + &'a self, + b: &B, + f: F +) -> Result<usize, usize>where + F: FnMut(&'a T) -> B, + B: Ord,

    Binary searches this slice with a key extraction function.

    +

    Assumes that the slice is sorted by the key, for instance with +sort_by_key using the same key extraction function. +If the slice is not sorted by the key, the returned result is +unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements in a slice of pairs sorted by +their second elements. The first is found, with a uniquely +determined position; the second and third are not found; the +fourth could match any position in [1, 4].

    + +
    let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
    +         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
    +         (1, 21), (2, 34), (4, 55)];
    +
    +assert_eq!(s.binary_search_by_key(&13, |&(a, b)| b),  Ok(9));
    +assert_eq!(s.binary_search_by_key(&4, |&(a, b)| b),   Err(7));
    +assert_eq!(s.binary_search_by_key(&100, |&(a, b)| b), Err(13));
    +let r = s.binary_search_by_key(&1, |&(a, b)| b);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.30.0 · source

    pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])

    Transmute the slice to a slice of another type, ensuring alignment of the types is +maintained.

    +

    This method splits the slice into three distinct slices: prefix, correctly aligned middle +slice of a new type, and the suffix slice. How exactly the slice is split up is not +specified; the middle part may be smaller than necessary. However, if this fails to return a +maximal middle part, that is because code is running in a context where performance does not +matter, such as a sanitizer attempting to find alignment bugs. Regular code running +in a default (debug or release) execution will return a maximal middle part.

    +

    This method has no purpose when either input element T or output element U are +zero-sized and will return the original slice without splitting anything.

    +
    Safety
    +

    This method is essentially a transmute with respect to the elements in the returned +middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

    +
    Examples
    +

    Basic usage:

    + +
    unsafe {
    +    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    +    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
    +    // less_efficient_algorithm_for_bytes(prefix);
    +    // more_efficient_algorithm_for_aligned_shorts(shorts);
    +    // less_efficient_algorithm_for_bytes(suffix);
    +}
    +
    source

    pub fn as_simd<const LANES: usize>(&self) -> (&[T], &[Simd<T, LANES>], &[T])where + Simd<T, LANES>: AsRef<[T; LANES]>, + T: SimdElement, + LaneCount<LANES>: SupportedLaneCount,

    🔬This is a nightly-only experimental API. (portable_simd)

    Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.

    +

    This is a safe wrapper around slice::align_to, so has the same weak +postconditions as that method. You’re only assured that +self.len() == prefix.len() + middle.len() * LANES + suffix.len().

    +

    Notably, all of the following are possible:

    +
      +
    • prefix.len() >= LANES.
    • +
    • middle.is_empty() despite self.len() >= 3 * LANES.
    • +
    • suffix.len() >= LANES.
    • +
    +

    That said, this is a safe method, so if you’re only writing safe code, +then this can at most cause incorrect logic, not unsoundness.

    +
    Panics
    +

    This will panic if the size of the SIMD type is different from +LANES times that of the scalar.

    +

    At the time of writing, the trait restrictions on Simd<T, LANES> keeps +that from ever happening, as only power-of-two numbers of lanes are +supported. It’s possible that, in the future, those restrictions might +be lifted in a way that would make it possible to see panics from this +method for something like LANES == 3.

    +
    Examples
    +
    #![feature(portable_simd)]
    +use core::simd::SimdFloat;
    +
    +let short = &[1, 2, 3];
    +let (prefix, middle, suffix) = short.as_simd::<4>();
    +assert_eq!(middle, []); // Not enough elements for anything in the middle
    +
    +// They might be split in any possible way between prefix and suffix
    +let it = prefix.iter().chain(suffix).copied();
    +assert_eq!(it.collect::<Vec<_>>(), vec![1, 2, 3]);
    +
    +fn basic_simd_sum(x: &[f32]) -> f32 {
    +    use std::ops::Add;
    +    use std::simd::f32x4;
    +    let (prefix, middle, suffix) = x.as_simd();
    +    let sums = f32x4::from_array([
    +        prefix.iter().copied().sum(),
    +        0.0,
    +        0.0,
    +        suffix.iter().copied().sum(),
    +    ]);
    +    let sums = middle.iter().copied().fold(sums, f32x4::add);
    +    sums.reduce_sum()
    +}
    +
    +let numbers: Vec<f32> = (1..101).map(|x| x as _).collect();
    +assert_eq!(basic_simd_sum(&numbers[1..99]), 4949.0);
    +
    source

    pub fn is_sorted(&self) -> boolwhere + T: PartialOrd<T>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted.

    +

    That is, for each element a and its following element b, a <= b must hold. If the +slice yields exactly zero or one element, true is returned.

    +

    Note that if Self::Item is only PartialOrd, but not Ord, the above definition +implies that this function returns false if any two consecutive items are not +comparable.

    +
    Examples
    +
    #![feature(is_sorted)]
    +let empty: [i32; 0] = [];
    +
    +assert!([1, 2, 2, 9].is_sorted());
    +assert!(![1, 3, 2, 4].is_sorted());
    +assert!([0].is_sorted());
    +assert!(empty.is_sorted());
    +assert!(![0.0, 1.0, f32::NAN].is_sorted());
    +
    source

    pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> boolwhere + F: FnMut(&'a T, &'a T) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given comparator function.

    +

    Instead of using PartialOrd::partial_cmp, this function uses the given compare +function to determine the ordering of two elements. Apart from that, it’s equivalent to +is_sorted; see its documentation for more information.

    +
    source

    pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> boolwhere + F: FnMut(&'a T) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given key extraction function.

    +

    Instead of comparing the slice’s elements directly, this function compares the keys of the +elements, as determined by f. Apart from that, it’s equivalent to is_sorted; see its +documentation for more information.

    +
    Examples
    +
    #![feature(is_sorted)]
    +
    +assert!(["c", "bb", "aaa"].is_sorted_by_key(|s| s.len()));
    +assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));
    +
    1.52.0 · source

    pub fn partition_point<P>(&self, pred: P) -> usizewhere + P: FnMut(&T) -> bool,

    Returns the index of the partition point according to the given predicate +(the index of the first element of the second partition).

    +

    The slice is assumed to be partitioned according to the given predicate. +This means that all elements for which the predicate returns true are at the start of the slice +and all elements for which the predicate returns false are at the end. +For example, [7, 15, 3, 5, 4, 12, 6] is partitioned under the predicate x % 2 != 0 +(all odd numbers are at the start, all even at the end).

    +

    If this slice is not partitioned, the returned result is unspecified and meaningless, +as this method performs a kind of binary search.

    +

    See also binary_search, binary_search_by, and binary_search_by_key.

    +
    Examples
    +
    let v = [1, 2, 3, 3, 5, 6, 7];
    +let i = v.partition_point(|&x| x < 5);
    +
    +assert_eq!(i, 4);
    +assert!(v[..i].iter().all(|&x| x < 5));
    +assert!(v[i..].iter().all(|&x| !(x < 5)));
    +

    If all elements of the slice match the predicate, including if the slice +is empty, then the length of the slice will be returned:

    + +
    let a = [2, 4, 8];
    +assert_eq!(a.partition_point(|x| x < &100), a.len());
    +let a: [i32; 0] = [];
    +assert_eq!(a.partition_point(|x| x < &100), 0);
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn to_vec(&self) -> Vec<T, Global>where + T: Clone,

    Copies self into a new Vec.

    +
    Examples
    +
    let s = [10, 40, 30];
    +let x = s.to_vec();
    +// Here, `s` and `x` can be modified independently.
    +
    source

    pub fn to_vec_in<A>(&self, alloc: A) -> Vec<T, A>where + A: Allocator, + T: Clone,

    🔬This is a nightly-only experimental API. (allocator_api)

    Copies self into a new Vec with an allocator.

    +
    Examples
    +
    #![feature(allocator_api)]
    +
    +use std::alloc::System;
    +
    +let s = [10, 40, 30];
    +let x = s.to_vec_in(System);
    +// Here, `s` and `x` can be modified independently.
    +
    1.40.0 · source

    pub fn repeat(&self, n: usize) -> Vec<T, Global>where + T: Copy,

    Creates a vector by copying a slice n times.

    +
    Panics
    +

    This function will panic if the capacity would overflow.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
    +

    A panic upon overflow:

    + +
    // this will panic at runtime
    +b"0123456789abcdef".repeat(usize::MAX);
    +
    1.0.0 · source

    pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where + [T]: Concat<Item>, + Item: ?Sized,

    Flattens a slice of T into a single value Self::Output.

    +
    Examples
    +
    assert_eq!(["hello", "world"].concat(), "helloworld");
    +assert_eq!([[1, 2], [3, 4]].concat(), [1, 2, 3, 4]);
    +
    1.3.0 · source

    pub fn join<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].join(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
    +assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
    +
    1.0.0 · source

    pub fn connect<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    👎Deprecated since 1.3.0: renamed to join

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].connect(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    +
    1.23.0 · source

    pub fn to_ascii_uppercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII upper case equivalent.

    +

    ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, +but non-ASCII letters are unchanged.

    +

    To uppercase the value in-place, use make_ascii_uppercase.

    +
    1.23.0 · source

    pub fn to_ascii_lowercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII lower case equivalent.

    +

    ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, +but non-ASCII letters are unchanged.

    +

    To lowercase the value in-place, use make_ascii_lowercase.

    +

    Trait Implementations§

    1.0.0 · source§

    impl<T, A> Deref for Vec<T, A>where + A: Allocator,

    §

    type Target = [T]

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &[T]

    Dereferences the value.
    \ No newline at end of file diff --git a/docs/algebra/milnor_algebra/type.PPartEntry.html b/docs/algebra/milnor_algebra/type.PPartEntry.html index f959e4d8f..a33e374ba 100644 --- a/docs/algebra/milnor_algebra/type.PPartEntry.html +++ b/docs/algebra/milnor_algebra/type.PPartEntry.html @@ -1,4 +1,4 @@ -PPartEntry in algebra::milnor_algebra - Rust +PPartEntry in algebra::milnor_algebra - Rust @@ -23,4 +23,1041 @@ }); -

    Type Definition algebra::milnor_algebra::PPartEntry

    source ·
    pub type PPartEntry = u32;
    \ No newline at end of file +
    pub type PPartEntry = u32;

    Implementations§

    source§

    impl u32

    1.43.0 · source

    pub const MIN: u32 = 0u32

    The smallest value that can be represented by this integer type.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(u32::MIN, 0);
    +
    1.43.0 · source

    pub const MAX: u32 = 4_294_967_295u32

    The largest value that can be represented by this integer type +(232 − 1).

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(u32::MAX, 4294967295);
    +
    1.53.0 · source

    pub const BITS: u32 = 32u32

    The size of this integer type in bits.

    +
    Examples
    +
    assert_eq!(u32::BITS, 32);
    +
    1.0.0 · source

    pub fn from_str_radix(src: &str, radix: u32) -> Result<u32, ParseIntError>

    Converts a string slice in a given base to an integer.

    +

    The string is expected to be an optional + sign +followed by digits. +Leading and trailing whitespace represent an error. +Digits are a subset of these characters, depending on radix:

    +
      +
    • 0-9
    • +
    • a-z
    • +
    • A-Z
    • +
    +
    Panics
    +

    This function panics if radix is not in the range from 2 to 36.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(u32::from_str_radix("A", 16), Ok(10));
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn count_ones(self) -> u32

    Returns the number of ones in the binary representation of self.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0b01001100u32;
    +
    +assert_eq!(n.count_ones(), 3);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn count_zeros(self) -> u32

    Returns the number of zeros in the binary representation of self.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(u32::MAX.count_zeros(), 0);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn leading_zeros(self) -> u32

    Returns the number of leading zeros in the binary representation of self.

    +

    Depending on what you’re doing with the value, you might also be interested in the +ilog2 function which returns a consistent number, even if the type widens.

    +
    Examples
    +

    Basic usage:

    + +
    let n = u32::MAX >> 2;
    +
    +assert_eq!(n.leading_zeros(), 2);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn trailing_zeros(self) -> u32

    Returns the number of trailing zeros in the binary representation +of self.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0b0101000u32;
    +
    +assert_eq!(n.trailing_zeros(), 3);
    +
    1.46.0 (const: 1.46.0) · source

    pub const fn leading_ones(self) -> u32

    Returns the number of leading ones in the binary representation of self.

    +
    Examples
    +

    Basic usage:

    + +
    let n = !(u32::MAX >> 2);
    +
    +assert_eq!(n.leading_ones(), 2);
    +
    1.46.0 (const: 1.46.0) · source

    pub const fn trailing_ones(self) -> u32

    Returns the number of trailing ones in the binary representation +of self.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0b1010111u32;
    +
    +assert_eq!(n.trailing_ones(), 3);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn rotate_left(self, n: u32) -> u32

    Shifts the bits to the left by a specified amount, n, +wrapping the truncated bits to the end of the resulting integer.

    +

    Please note this isn’t the same operation as the << shifting operator!

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x10000b3u32;
    +let m = 0xb301;
    +
    +assert_eq!(n.rotate_left(8), m);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn rotate_right(self, n: u32) -> u32

    Shifts the bits to the right by a specified amount, n, +wrapping the truncated bits to the beginning of the resulting +integer.

    +

    Please note this isn’t the same operation as the >> shifting operator!

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0xb301u32;
    +let m = 0x10000b3;
    +
    +assert_eq!(n.rotate_right(8), m);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn swap_bytes(self) -> u32

    Reverses the byte order of the integer.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x12345678u32;
    +let m = n.swap_bytes();
    +
    +assert_eq!(m, 0x78563412);
    +
    1.37.0 (const: 1.37.0) · source

    pub const fn reverse_bits(self) -> u32

    Reverses the order of bits in the integer. The least significant bit becomes the most significant bit, +second least-significant bit becomes second most-significant bit, etc.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x12345678u32;
    +let m = n.reverse_bits();
    +
    +assert_eq!(m, 0x1e6a2c48);
    +assert_eq!(0, 0u32.reverse_bits());
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn from_be(x: u32) -> u32

    Converts an integer from big endian to the target’s endianness.

    +

    On big endian this is a no-op. On little endian the bytes are +swapped.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x1Au32;
    +
    +if cfg!(target_endian = "big") {
    +    assert_eq!(u32::from_be(n), n)
    +} else {
    +    assert_eq!(u32::from_be(n), n.swap_bytes())
    +}
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn from_le(x: u32) -> u32

    Converts an integer from little endian to the target’s endianness.

    +

    On little endian this is a no-op. On big endian the bytes are +swapped.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x1Au32;
    +
    +if cfg!(target_endian = "little") {
    +    assert_eq!(u32::from_le(n), n)
    +} else {
    +    assert_eq!(u32::from_le(n), n.swap_bytes())
    +}
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn to_be(self) -> u32

    Converts self to big endian from the target’s endianness.

    +

    On big endian this is a no-op. On little endian the bytes are +swapped.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x1Au32;
    +
    +if cfg!(target_endian = "big") {
    +    assert_eq!(n.to_be(), n)
    +} else {
    +    assert_eq!(n.to_be(), n.swap_bytes())
    +}
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn to_le(self) -> u32

    Converts self to little endian from the target’s endianness.

    +

    On little endian this is a no-op. On big endian the bytes are +swapped.

    +
    Examples
    +

    Basic usage:

    + +
    let n = 0x1Au32;
    +
    +if cfg!(target_endian = "little") {
    +    assert_eq!(n.to_le(), n)
    +} else {
    +    assert_eq!(n.to_le(), n.swap_bytes())
    +}
    +
    1.0.0 (const: 1.47.0) · source

    pub const fn checked_add(self, rhs: u32) -> Option<u32>

    Checked integer addition. Computes self + rhs, returning None +if overflow occurred.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!((u32::MAX - 2).checked_add(1), Some(u32::MAX - 1));
    +assert_eq!((u32::MAX - 2).checked_add(3), None);
    +
    const: unstable · source

    pub unsafe fn unchecked_add(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (unchecked_math)

    Unchecked integer addition. Computes self + rhs, assuming overflow +cannot occur.

    +
    Safety
    +

    This results in undefined behavior when +self + rhs > u32::MAX or self + rhs < u32::MIN, +i.e. when checked_add would return None.

    +
    1.66.0 (const: 1.66.0) · source

    pub const fn checked_add_signed(self, rhs: i32) -> Option<u32>

    Checked addition with a signed integer. Computes self + rhs, +returning None if overflow occurred.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.checked_add_signed(2), Some(3));
    +assert_eq!(1u32.checked_add_signed(-2), None);
    +assert_eq!((u32::MAX - 2).checked_add_signed(3), None);
    +
    1.0.0 (const: 1.47.0) · source

    pub const fn checked_sub(self, rhs: u32) -> Option<u32>

    Checked integer subtraction. Computes self - rhs, returning +None if overflow occurred.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.checked_sub(1), Some(0));
    +assert_eq!(0u32.checked_sub(1), None);
    +
    const: unstable · source

    pub unsafe fn unchecked_sub(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (unchecked_math)

    Unchecked integer subtraction. Computes self - rhs, assuming overflow +cannot occur.

    +
    Safety
    +

    This results in undefined behavior when +self - rhs > u32::MAX or self - rhs < u32::MIN, +i.e. when checked_sub would return None.

    +
    1.0.0 (const: 1.47.0) · source

    pub const fn checked_mul(self, rhs: u32) -> Option<u32>

    Checked integer multiplication. Computes self * rhs, returning +None if overflow occurred.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(5u32.checked_mul(1), Some(5));
    +assert_eq!(u32::MAX.checked_mul(2), None);
    +
    const: unstable · source

    pub unsafe fn unchecked_mul(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (unchecked_math)

    Unchecked integer multiplication. Computes self * rhs, assuming overflow +cannot occur.

    +
    Safety
    +

    This results in undefined behavior when +self * rhs > u32::MAX or self * rhs < u32::MIN, +i.e. when checked_mul would return None.

    +
    1.0.0 (const: 1.52.0) · source

    pub const fn checked_div(self, rhs: u32) -> Option<u32>

    Checked integer division. Computes self / rhs, returning None +if rhs == 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(128u32.checked_div(2), Some(64));
    +assert_eq!(1u32.checked_div(0), None);
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn checked_div_euclid(self, rhs: u32) -> Option<u32>

    Checked Euclidean division. Computes self.div_euclid(rhs), returning None +if rhs == 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(128u32.checked_div_euclid(2), Some(64));
    +assert_eq!(1u32.checked_div_euclid(0), None);
    +
    1.7.0 (const: 1.52.0) · source

    pub const fn checked_rem(self, rhs: u32) -> Option<u32>

    Checked integer remainder. Computes self % rhs, returning None +if rhs == 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(5u32.checked_rem(2), Some(1));
    +assert_eq!(5u32.checked_rem(0), None);
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn checked_rem_euclid(self, rhs: u32) -> Option<u32>

    Checked Euclidean modulo. Computes self.rem_euclid(rhs), returning None +if rhs == 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(5u32.checked_rem_euclid(2), Some(1));
    +assert_eq!(5u32.checked_rem_euclid(0), None);
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn ilog(self, base: u32) -> u32

    Returns the logarithm of the number with respect to an arbitrary base, +rounded down.

    +

    This method might not be optimized owing to implementation details; +ilog2 can produce results more efficiently for base 2, and ilog10 +can produce results more efficiently for base 10.

    +
    Panics
    +

    This function will panic if self is zero, or if base is less than 2.

    +
    Examples
    +
    assert_eq!(5u32.ilog(5), 1);
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn ilog2(self) -> u32

    Returns the base 2 logarithm of the number, rounded down.

    +
    Panics
    +

    This function will panic if self is zero.

    +
    Examples
    +
    assert_eq!(2u32.ilog2(), 1);
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn ilog10(self) -> u32

    Returns the base 10 logarithm of the number, rounded down.

    +
    Panics
    +

    This function will panic if self is zero.

    +
    Example
    +
    assert_eq!(10u32.ilog10(), 1);
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn checked_ilog(self, base: u32) -> Option<u32>

    Returns the logarithm of the number with respect to an arbitrary base, +rounded down.

    +

    Returns None if the number is zero, or if the base is not at least 2.

    +

    This method might not be optimized owing to implementation details; +checked_ilog2 can produce results more efficiently for base 2, and +checked_ilog10 can produce results more efficiently for base 10.

    +
    Examples
    +
    assert_eq!(5u32.checked_ilog(5), Some(1));
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn checked_ilog2(self) -> Option<u32>

    Returns the base 2 logarithm of the number, rounded down.

    +

    Returns None if the number is zero.

    +
    Examples
    +
    assert_eq!(2u32.checked_ilog2(), Some(1));
    +
    1.67.0 (const: 1.67.0) · source

    pub const fn checked_ilog10(self) -> Option<u32>

    Returns the base 10 logarithm of the number, rounded down.

    +

    Returns None if the number is zero.

    +
    Examples
    +
    assert_eq!(10u32.checked_ilog10(), Some(1));
    +
    1.7.0 (const: 1.47.0) · source

    pub const fn checked_neg(self) -> Option<u32>

    Checked negation. Computes -self, returning None unless self == 0.

    +

    Note that negating any positive integer will overflow.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(0u32.checked_neg(), Some(0));
    +assert_eq!(1u32.checked_neg(), None);
    +
    1.7.0 (const: 1.47.0) · source

    pub const fn checked_shl(self, rhs: u32) -> Option<u32>

    Checked shift left. Computes self << rhs, returning None +if rhs is larger than or equal to the number of bits in self.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(0x1u32.checked_shl(4), Some(0x10));
    +assert_eq!(0x10u32.checked_shl(129), None);
    +
    const: unstable · source

    pub unsafe fn unchecked_shl(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (unchecked_math)

    Unchecked shift left. Computes self << rhs, assuming that +rhs is less than the number of bits in self.

    +
    Safety
    +

    This results in undefined behavior if rhs is larger than +or equal to the number of bits in self, +i.e. when checked_shl would return None.

    +
    1.7.0 (const: 1.47.0) · source

    pub const fn checked_shr(self, rhs: u32) -> Option<u32>

    Checked shift right. Computes self >> rhs, returning None +if rhs is larger than or equal to the number of bits in self.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(0x10u32.checked_shr(4), Some(0x1));
    +assert_eq!(0x10u32.checked_shr(129), None);
    +
    const: unstable · source

    pub unsafe fn unchecked_shr(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (unchecked_math)

    Unchecked shift right. Computes self >> rhs, assuming that +rhs is less than the number of bits in self.

    +
    Safety
    +

    This results in undefined behavior if rhs is larger than +or equal to the number of bits in self, +i.e. when checked_shr would return None.

    +
    1.34.0 (const: 1.50.0) · source

    pub const fn checked_pow(self, exp: u32) -> Option<u32>

    Checked exponentiation. Computes self.pow(exp), returning None if +overflow occurred.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(2u32.checked_pow(5), Some(32));
    +assert_eq!(u32::MAX.checked_pow(2), None);
    +
    1.0.0 (const: 1.47.0) · source

    pub const fn saturating_add(self, rhs: u32) -> u32

    Saturating integer addition. Computes self + rhs, saturating at +the numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.saturating_add(1), 101);
    +assert_eq!(u32::MAX.saturating_add(127), u32::MAX);
    +
    1.66.0 (const: 1.66.0) · source

    pub const fn saturating_add_signed(self, rhs: i32) -> u32

    Saturating addition with a signed integer. Computes self + rhs, +saturating at the numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.saturating_add_signed(2), 3);
    +assert_eq!(1u32.saturating_add_signed(-2), 0);
    +assert_eq!((u32::MAX - 2).saturating_add_signed(4), u32::MAX);
    +
    1.0.0 (const: 1.47.0) · source

    pub const fn saturating_sub(self, rhs: u32) -> u32

    Saturating integer subtraction. Computes self - rhs, saturating +at the numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.saturating_sub(27), 73);
    +assert_eq!(13u32.saturating_sub(127), 0);
    +
    1.7.0 (const: 1.47.0) · source

    pub const fn saturating_mul(self, rhs: u32) -> u32

    Saturating integer multiplication. Computes self * rhs, +saturating at the numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(2u32.saturating_mul(10), 20);
    +assert_eq!((u32::MAX).saturating_mul(10), u32::MAX);
    +
    1.58.0 (const: 1.58.0) · source

    pub const fn saturating_div(self, rhs: u32) -> u32

    Saturating integer division. Computes self / rhs, saturating at the +numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(5u32.saturating_div(2), 2);
    +
    + +
    let _ = 1u32.saturating_div(0);
    +
    +
    1.34.0 (const: 1.50.0) · source

    pub const fn saturating_pow(self, exp: u32) -> u32

    Saturating integer exponentiation. Computes self.pow(exp), +saturating at the numeric bounds instead of overflowing.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(4u32.saturating_pow(3), 64);
    +assert_eq!(u32::MAX.saturating_pow(2), u32::MAX);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn wrapping_add(self, rhs: u32) -> u32

    Wrapping (modular) addition. Computes self + rhs, +wrapping around at the boundary of the type.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(200u32.wrapping_add(55), 255);
    +assert_eq!(200u32.wrapping_add(u32::MAX), 199);
    +
    1.66.0 (const: 1.66.0) · source

    pub const fn wrapping_add_signed(self, rhs: i32) -> u32

    Wrapping (modular) addition with a signed integer. Computes +self + rhs, wrapping around at the boundary of the type.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.wrapping_add_signed(2), 3);
    +assert_eq!(1u32.wrapping_add_signed(-2), u32::MAX);
    +assert_eq!((u32::MAX - 2).wrapping_add_signed(4), 1);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn wrapping_sub(self, rhs: u32) -> u32

    Wrapping (modular) subtraction. Computes self - rhs, +wrapping around at the boundary of the type.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.wrapping_sub(100), 0);
    +assert_eq!(100u32.wrapping_sub(u32::MAX), 101);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn wrapping_mul(self, rhs: u32) -> u32

    Wrapping (modular) multiplication. Computes self * rhs, wrapping around at the boundary of the type.

    +
    Examples
    +

    Basic usage:

    +

    Please note that this example is shared between integer types. +Which explains why u8 is used here.

    + +
    assert_eq!(10u8.wrapping_mul(12), 120);
    +assert_eq!(25u8.wrapping_mul(12), 44);
    +
    1.2.0 (const: 1.52.0) · source

    pub const fn wrapping_div(self, rhs: u32) -> u32

    Wrapping (modular) division. Computes self / rhs. +Wrapped division on unsigned types is just normal division. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.wrapping_div(10), 10);
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn wrapping_div_euclid(self, rhs: u32) -> u32

    Wrapping Euclidean division. Computes self.div_euclid(rhs). +Wrapped division on unsigned types is just normal division. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.wrapping_div(rhs).

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.wrapping_div_euclid(10), 10);
    +
    1.2.0 (const: 1.52.0) · source

    pub const fn wrapping_rem(self, rhs: u32) -> u32

    Wrapping (modular) remainder. Computes self % rhs. +Wrapped remainder calculation on unsigned types is +just the regular remainder calculation. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.wrapping_rem(10), 0);
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn wrapping_rem_euclid(self, rhs: u32) -> u32

    Wrapping Euclidean modulo. Computes self.rem_euclid(rhs). +Wrapped modulo calculation on unsigned types is +just the regular remainder calculation. +There’s no way wrapping could ever happen. +This function exists, so that all operations +are accounted for in the wrapping operations. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.wrapping_rem(rhs).

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.wrapping_rem_euclid(10), 0);
    +
    1.2.0 (const: 1.32.0) · source

    pub const fn wrapping_neg(self) -> u32

    Wrapping (modular) negation. Computes -self, +wrapping around at the boundary of the type.

    +

    Since unsigned types do not have negative equivalents +all applications of this function will wrap (except for -0). +For values smaller than the corresponding signed type’s maximum +the result is the same as casting the corresponding signed value. +Any larger values are equivalent to MAX + 1 - (val - MAX - 1) where +MAX is the corresponding signed type’s maximum.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(0_u32.wrapping_neg(), 0);
    +assert_eq!(u32::MAX.wrapping_neg(), 1);
    +assert_eq!(13_u32.wrapping_neg(), (!13) + 1);
    +assert_eq!(42_u32.wrapping_neg(), !(42 - 1));
    +
    1.2.0 (const: 1.32.0) · source

    pub const fn wrapping_shl(self, rhs: u32) -> u32

    Panic-free bitwise shift-left; yields self << mask(rhs), +where mask removes any high-order bits of rhs that +would cause the shift to exceed the bitwidth of the type.

    +

    Note that this is not the same as a rotate-left; the +RHS of a wrapping shift-left is restricted to the range +of the type, rather than the bits shifted out of the LHS +being returned to the other end. The primitive integer +types all implement a rotate_left function, +which may be what you want instead.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.wrapping_shl(7), 128);
    +assert_eq!(1u32.wrapping_shl(128), 1);
    +
    1.2.0 (const: 1.32.0) · source

    pub const fn wrapping_shr(self, rhs: u32) -> u32

    Panic-free bitwise shift-right; yields self >> mask(rhs), +where mask removes any high-order bits of rhs that +would cause the shift to exceed the bitwidth of the type.

    +

    Note that this is not the same as a rotate-right; the +RHS of a wrapping shift-right is restricted to the range +of the type, rather than the bits shifted out of the LHS +being returned to the other end. The primitive integer +types all implement a rotate_right function, +which may be what you want instead.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(128u32.wrapping_shr(7), 1);
    +assert_eq!(128u32.wrapping_shr(128), 128);
    +
    1.34.0 (const: 1.50.0) · source

    pub const fn wrapping_pow(self, exp: u32) -> u32

    Wrapping (modular) exponentiation. Computes self.pow(exp), +wrapping around at the boundary of the type.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(3u32.wrapping_pow(5), 243);
    +assert_eq!(3u8.wrapping_pow(6), 217);
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_add(self, rhs: u32) -> (u32, bool)

    Calculates self + rhs

    +

    Returns a tuple of the addition along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_add(2), (7, false));
    +assert_eq!(u32::MAX.overflowing_add(1), (0, true));
    +
    const: unstable · source

    pub fn carrying_add(self, rhs: u32, carry: bool) -> (u32, bool)

    🔬This is a nightly-only experimental API. (bigint_helper_methods)

    Calculates self + rhs + carry and returns a tuple containing +the sum and the output carry.

    +

    Performs “ternary addition” of two integer operands and a carry-in +bit, and returns an output integer and a carry-out bit. This allows +chaining together multiple additions to create a wider addition, and +can be useful for bignum addition.

    +

    This can be thought of as a 32-bit “full adder”, in the electronics sense.

    +

    If the input carry is false, this method is equivalent to +overflowing_add, and the output carry is +equal to the overflow flag. Note that although carry and overflow +flags are similar for unsigned integers, they are different for +signed integers.

    +
    Examples
    +
    #![feature(bigint_helper_methods)]
    +
    +//    3  MAX    (a = 3 × 2^32 + 2^32 - 1)
    +// +  5    7    (b = 5 × 2^32 + 7)
    +// ---------
    +//    9    6    (sum = 9 × 2^32 + 6)
    +
    +let (a1, a0): (u32, u32) = (3, u32::MAX);
    +let (b1, b0): (u32, u32) = (5, 7);
    +let carry0 = false;
    +
    +let (sum0, carry1) = a0.carrying_add(b0, carry0);
    +assert_eq!(carry1, true);
    +let (sum1, carry2) = a1.carrying_add(b1, carry1);
    +assert_eq!(carry2, false);
    +
    +assert_eq!((sum1, sum0), (9, 6));
    +
    1.66.0 (const: 1.66.0) · source

    pub const fn overflowing_add_signed(self, rhs: i32) -> (u32, bool)

    Calculates self + rhs with a signed rhs

    +

    Returns a tuple of the addition along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(1u32.overflowing_add_signed(2), (3, false));
    +assert_eq!(1u32.overflowing_add_signed(-2), (u32::MAX, true));
    +assert_eq!((u32::MAX - 2).overflowing_add_signed(4), (1, true));
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_sub(self, rhs: u32) -> (u32, bool)

    Calculates self - rhs

    +

    Returns a tuple of the subtraction along with a boolean indicating +whether an arithmetic overflow would occur. If an overflow would +have occurred then the wrapped value is returned.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_sub(2), (3, false));
    +assert_eq!(0u32.overflowing_sub(1), (u32::MAX, true));
    +
    const: unstable · source

    pub fn borrowing_sub(self, rhs: u32, borrow: bool) -> (u32, bool)

    🔬This is a nightly-only experimental API. (bigint_helper_methods)

    Calculates selfrhsborrow and returns a tuple +containing the difference and the output borrow.

    +

    Performs “ternary subtraction” by subtracting both an integer +operand and a borrow-in bit from self, and returns an output +integer and a borrow-out bit. This allows chaining together multiple +subtractions to create a wider subtraction, and can be useful for +bignum subtraction.

    +
    Examples
    +
    #![feature(bigint_helper_methods)]
    +
    +//    9    6    (a = 9 × 2^32 + 6)
    +// -  5    7    (b = 5 × 2^32 + 7)
    +// ---------
    +//    3  MAX    (diff = 3 × 2^32 + 2^32 - 1)
    +
    +let (a1, a0): (u32, u32) = (9, 6);
    +let (b1, b0): (u32, u32) = (5, 7);
    +let borrow0 = false;
    +
    +let (diff0, borrow1) = a0.borrowing_sub(b0, borrow0);
    +assert_eq!(borrow1, true);
    +let (diff1, borrow2) = a1.borrowing_sub(b1, borrow1);
    +assert_eq!(borrow2, false);
    +
    +assert_eq!((diff1, diff0), (3, u32::MAX));
    +
    1.60.0 (const: 1.60.0) · source

    pub const fn abs_diff(self, other: u32) -> u32

    Computes the absolute difference between self and other.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(100u32.abs_diff(80), 20u32);
    +assert_eq!(100u32.abs_diff(110), 10u32);
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_mul(self, rhs: u32) -> (u32, bool)

    Calculates the multiplication of self and rhs.

    +

    Returns a tuple of the multiplication along with a boolean +indicating whether an arithmetic overflow would occur. If an +overflow would have occurred then the wrapped value is returned.

    +
    Examples
    +

    Basic usage:

    +

    Please note that this example is shared between integer types. +Which explains why u32 is used here.

    + +
    assert_eq!(5u32.overflowing_mul(2), (10, false));
    +assert_eq!(1_000_000_000u32.overflowing_mul(10), (1410065408, true));
    +
    1.7.0 (const: 1.52.0) · source

    pub const fn overflowing_div(self, rhs: u32) -> (u32, bool)

    Calculates the divisor when self is divided by rhs.

    +

    Returns a tuple of the divisor along with a boolean indicating +whether an arithmetic overflow would occur. Note that for unsigned +integers overflow never occurs, so the second value is always +false.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_div(2), (2, false));
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn overflowing_div_euclid(self, rhs: u32) -> (u32, bool)

    Calculates the quotient of Euclidean division self.div_euclid(rhs).

    +

    Returns a tuple of the divisor along with a boolean indicating +whether an arithmetic overflow would occur. Note that for unsigned +integers overflow never occurs, so the second value is always +false. +Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self.overflowing_div(rhs).

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_div_euclid(2), (2, false));
    +
    1.7.0 (const: 1.52.0) · source

    pub const fn overflowing_rem(self, rhs: u32) -> (u32, bool)

    Calculates the remainder when self is divided by rhs.

    +

    Returns a tuple of the remainder after dividing along with a boolean +indicating whether an arithmetic overflow would occur. Note that for +unsigned integers overflow never occurs, so the second value is +always false.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_rem(2), (1, false));
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn overflowing_rem_euclid(self, rhs: u32) -> (u32, bool)

    Calculates the remainder self.rem_euclid(rhs) as if by Euclidean division.

    +

    Returns a tuple of the modulo after dividing along with a boolean +indicating whether an arithmetic overflow would occur. Note that for +unsigned integers overflow never occurs, so the second value is +always false. +Since, for the positive integers, all common +definitions of division are equal, this operation +is exactly equal to self.overflowing_rem(rhs).

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(5u32.overflowing_rem_euclid(2), (1, false));
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_neg(self) -> (u32, bool)

    Negates self in an overflowing fashion.

    +

    Returns !self + 1 using wrapping operations to return the value +that represents the negation of this unsigned value. Note that for +positive unsigned values overflow always occurs, but negating 0 does +not overflow.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(0u32.overflowing_neg(), (0, false));
    +assert_eq!(2u32.overflowing_neg(), (-2i32 as u32, true));
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_shl(self, rhs: u32) -> (u32, bool)

    Shifts self left by rhs bits.

    +

    Returns a tuple of the shifted version of self along with a boolean +indicating whether the shift value was larger than or equal to the +number of bits. If the shift value is too large, then value is +masked (N-1) where N is the number of bits, and this value is then +used to perform the shift.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(0x1u32.overflowing_shl(4), (0x10, false));
    +assert_eq!(0x1u32.overflowing_shl(132), (0x10, true));
    +
    1.7.0 (const: 1.32.0) · source

    pub const fn overflowing_shr(self, rhs: u32) -> (u32, bool)

    Shifts self right by rhs bits.

    +

    Returns a tuple of the shifted version of self along with a boolean +indicating whether the shift value was larger than or equal to the +number of bits. If the shift value is too large, then value is +masked (N-1) where N is the number of bits, and this value is then +used to perform the shift.

    +
    Examples
    +

    Basic usage

    + +
    assert_eq!(0x10u32.overflowing_shr(4), (0x1, false));
    +assert_eq!(0x10u32.overflowing_shr(132), (0x1, true));
    +
    1.34.0 (const: 1.50.0) · source

    pub const fn overflowing_pow(self, exp: u32) -> (u32, bool)

    Raises self to the power of exp, using exponentiation by squaring.

    +

    Returns a tuple of the exponentiation along with a bool indicating +whether an overflow happened.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(3u32.overflowing_pow(5), (243, false));
    +assert_eq!(3u8.overflowing_pow(6), (217, true));
    +
    1.0.0 (const: 1.50.0) · source

    pub const fn pow(self, exp: u32) -> u32

    Raises self to the power of exp, using exponentiation by squaring.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(2u32.pow(5), 32);
    +
    const: unstable · source

    pub fn isqrt(self) -> u32

    🔬This is a nightly-only experimental API. (isqrt)

    Returns the square root of the number, rounded down.

    +
    Examples
    +

    Basic usage:

    + +
    #![feature(isqrt)]
    +assert_eq!(10u32.isqrt(), 3);
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn div_euclid(self, rhs: u32) -> u32

    Performs Euclidean division.

    +

    Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self / rhs.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(7u32.div_euclid(4), 1); // or any other integer type
    +
    1.38.0 (const: 1.52.0) · source

    pub const fn rem_euclid(self, rhs: u32) -> u32

    Calculates the least remainder of self (mod rhs).

    +

    Since, for the positive integers, all common +definitions of division are equal, this +is exactly equal to self % rhs.

    +
    Panics
    +

    This function will panic if rhs is 0.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(7u32.rem_euclid(4), 3); // or any other integer type
    +
    source

    pub const fn div_floor(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (int_roundings)

    Calculates the quotient of self and rhs, rounding the result towards negative infinity.

    +

    This is the same as performing self / rhs for all unsigned integers.

    +
    Panics
    +

    This function will panic if rhs is zero.

    +
    Examples
    +

    Basic usage:

    + +
    #![feature(int_roundings)]
    +assert_eq!(7_u32.div_floor(4), 1);
    +
    1.73.0 (const: 1.73.0) · source

    pub const fn div_ceil(self, rhs: u32) -> u32

    Calculates the quotient of self and rhs, rounding the result towards positive infinity.

    +
    Panics
    +

    This function will panic if rhs is zero.

    +
    Overflow behavior
    +

    On overflow, this function will panic if overflow checks are enabled (default in debug +mode) and wrap if overflow checks are disabled (default in release mode).

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(7_u32.div_ceil(4), 2);
    +
    1.73.0 (const: 1.73.0) · source

    pub const fn next_multiple_of(self, rhs: u32) -> u32

    Calculates the smallest value greater than or equal to self that +is a multiple of rhs.

    +
    Panics
    +

    This function will panic if rhs is zero.

    +
    Overflow behavior
    +

    On overflow, this function will panic if overflow checks are enabled (default in debug +mode) and wrap if overflow checks are disabled (default in release mode).

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(16_u32.next_multiple_of(8), 16);
    +assert_eq!(23_u32.next_multiple_of(8), 24);
    +
    1.73.0 (const: 1.73.0) · source

    pub const fn checked_next_multiple_of(self, rhs: u32) -> Option<u32>

    Calculates the smallest value greater than or equal to self that +is a multiple of rhs. Returns None if rhs is zero or the +operation would result in overflow.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(16_u32.checked_next_multiple_of(8), Some(16));
    +assert_eq!(23_u32.checked_next_multiple_of(8), Some(24));
    +assert_eq!(1_u32.checked_next_multiple_of(0), None);
    +assert_eq!(u32::MAX.checked_next_multiple_of(2), None);
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn is_power_of_two(self) -> bool

    Returns true if and only if self == 2^k for some k.

    +
    Examples
    +

    Basic usage:

    + +
    assert!(16u32.is_power_of_two());
    +assert!(!10u32.is_power_of_two());
    +
    1.0.0 (const: 1.50.0) · source

    pub const fn next_power_of_two(self) -> u32

    Returns the smallest power of two greater than or equal to self.

    +

    When return value overflows (i.e., self > (1 << (N-1)) for type +uN), it panics in debug mode and the return value is wrapped to 0 in +release mode (the only situation in which method can return 0).

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(2u32.next_power_of_two(), 2);
    +assert_eq!(3u32.next_power_of_two(), 4);
    +
    1.0.0 (const: 1.50.0) · source

    pub const fn checked_next_power_of_two(self) -> Option<u32>

    Returns the smallest power of two greater than or equal to n. If +the next power of two is greater than the type’s maximum value, +None is returned, otherwise the power of two is wrapped in Some.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!(2u32.checked_next_power_of_two(), Some(2));
    +assert_eq!(3u32.checked_next_power_of_two(), Some(4));
    +assert_eq!(u32::MAX.checked_next_power_of_two(), None);
    +
    const: unstable · source

    pub fn wrapping_next_power_of_two(self) -> u32

    🔬This is a nightly-only experimental API. (wrapping_next_power_of_two)

    Returns the smallest power of two greater than or equal to n. If +the next power of two is greater than the type’s maximum value, +the return value is wrapped to 0.

    +
    Examples
    +

    Basic usage:

    + +
    #![feature(wrapping_next_power_of_two)]
    +
    +assert_eq!(2u32.wrapping_next_power_of_two(), 2);
    +assert_eq!(3u32.wrapping_next_power_of_two(), 4);
    +assert_eq!(u32::MAX.wrapping_next_power_of_two(), 0);
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn to_be_bytes(self) -> [u8; 4]

    Return the memory representation of this integer as a byte array in +big-endian (network) byte order.

    +
    Examples
    +
    let bytes = 0x12345678u32.to_be_bytes();
    +assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn to_le_bytes(self) -> [u8; 4]

    Return the memory representation of this integer as a byte array in +little-endian byte order.

    +
    Examples
    +
    let bytes = 0x12345678u32.to_le_bytes();
    +assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn to_ne_bytes(self) -> [u8; 4]

    Return the memory representation of this integer as a byte array in +native byte order.

    +

    As the target platform’s native endianness is used, portable code +should use to_be_bytes or to_le_bytes, as appropriate, +instead.

    +
    Examples
    +
    let bytes = 0x12345678u32.to_ne_bytes();
    +assert_eq!(
    +    bytes,
    +    if cfg!(target_endian = "big") {
    +        [0x12, 0x34, 0x56, 0x78]
    +    } else {
    +        [0x78, 0x56, 0x34, 0x12]
    +    }
    +);
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn from_be_bytes(bytes: [u8; 4]) -> u32

    Create a native endian integer value from its representation +as a byte array in big endian.

    +
    Examples
    +
    let value = u32::from_be_bytes([0x12, 0x34, 0x56, 0x78]);
    +assert_eq!(value, 0x12345678);
    +

    When starting from a slice rather than an array, fallible conversion APIs can be used:

    + +
    fn read_be_u32(input: &mut &[u8]) -> u32 {
    +    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
    +    *input = rest;
    +    u32::from_be_bytes(int_bytes.try_into().unwrap())
    +}
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn from_le_bytes(bytes: [u8; 4]) -> u32

    Create a native endian integer value from its representation +as a byte array in little endian.

    +
    Examples
    +
    let value = u32::from_le_bytes([0x78, 0x56, 0x34, 0x12]);
    +assert_eq!(value, 0x12345678);
    +

    When starting from a slice rather than an array, fallible conversion APIs can be used:

    + +
    fn read_le_u32(input: &mut &[u8]) -> u32 {
    +    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
    +    *input = rest;
    +    u32::from_le_bytes(int_bytes.try_into().unwrap())
    +}
    +
    1.32.0 (const: 1.44.0) · source

    pub const fn from_ne_bytes(bytes: [u8; 4]) -> u32

    Create a native endian integer value from its memory representation +as a byte array in native endianness.

    +

    As the target platform’s native endianness is used, portable code +likely wants to use from_be_bytes or from_le_bytes, as +appropriate instead.

    +
    Examples
    +
    let value = u32::from_ne_bytes(if cfg!(target_endian = "big") {
    +    [0x12, 0x34, 0x56, 0x78]
    +} else {
    +    [0x78, 0x56, 0x34, 0x12]
    +});
    +assert_eq!(value, 0x12345678);
    +

    When starting from a slice rather than an array, fallible conversion APIs can be used:

    + +
    fn read_ne_u32(input: &mut &[u8]) -> u32 {
    +    let (int_bytes, rest) = input.split_at(std::mem::size_of::<u32>());
    +    *input = rest;
    +    u32::from_ne_bytes(int_bytes.try_into().unwrap())
    +}
    +
    1.0.0 (const: 1.32.0) · source

    pub const fn min_value() -> u32

    👎Deprecating in a future Rust version: replaced by the MIN associated constant on this type

    New code should prefer to use +u32::MIN instead.

    +

    Returns the smallest value that can be represented by this integer type.

    +
    1.0.0 (const: 1.32.0) · source

    pub const fn max_value() -> u32

    👎Deprecating in a future Rust version: replaced by the MAX associated constant on this type

    New code should prefer to use +u32::MAX instead.

    +

    Returns the largest value that can be represented by this integer type.

    +
    const: unstable · source

    pub fn widening_mul(self, rhs: u32) -> (u32, u32)

    🔬This is a nightly-only experimental API. (bigint_helper_methods)

    Calculates the complete product self * rhs without the possibility to overflow.

    +

    This returns the low-order (wrapping) bits and the high-order (overflow) bits +of the result as two separate values, in that order.

    +

    If you also need to add a carry to the wide result, then you want +Self::carrying_mul instead.

    +
    Examples
    +

    Basic usage:

    +

    Please note that this example is shared between integer types. +Which explains why u32 is used here.

    + +
    #![feature(bigint_helper_methods)]
    +assert_eq!(5u32.widening_mul(2), (10, 0));
    +assert_eq!(1_000_000_000u32.widening_mul(10), (1410065408, 2));
    +
    const: unstable · source

    pub fn carrying_mul(self, rhs: u32, carry: u32) -> (u32, u32)

    🔬This is a nightly-only experimental API. (bigint_helper_methods)

    Calculates the “full multiplication” self * rhs + carry +without the possibility to overflow.

    +

    This returns the low-order (wrapping) bits and the high-order (overflow) bits +of the result as two separate values, in that order.

    +

    Performs “long multiplication” which takes in an extra amount to add, and may return an +additional amount of overflow. This allows for chaining together multiple +multiplications to create “big integers” which represent larger values.

    +

    If you don’t need the carry, then you can use Self::widening_mul instead.

    +
    Examples
    +

    Basic usage:

    +

    Please note that this example is shared between integer types. +Which explains why u32 is used here.

    + +
    #![feature(bigint_helper_methods)]
    +assert_eq!(5u32.carrying_mul(2, 0), (10, 0));
    +assert_eq!(5u32.carrying_mul(2, 10), (20, 0));
    +assert_eq!(1_000_000_000u32.carrying_mul(10, 0), (1410065408, 2));
    +assert_eq!(1_000_000_000u32.carrying_mul(10, 10), (1410065418, 2));
    +assert_eq!(u32::MAX.carrying_mul(u32::MAX, u32::MAX), (0, u32::MAX));
    +

    This is the core operation needed for scalar multiplication when +implementing it for wider-than-native types.

    + +
    #![feature(bigint_helper_methods)]
    +fn scalar_mul_eq(little_endian_digits: &mut Vec<u16>, multiplicand: u16) {
    +    let mut carry = 0;
    +    for d in little_endian_digits.iter_mut() {
    +        (*d, carry) = d.carrying_mul(multiplicand, carry);
    +    }
    +    if carry != 0 {
    +        little_endian_digits.push(carry);
    +    }
    +}
    +
    +let mut v = vec![10, 20];
    +scalar_mul_eq(&mut v, 3);
    +assert_eq!(v, [30, 60]);
    +
    +assert_eq!(0x87654321_u64 * 0xFEED, 0x86D3D159E38D);
    +let mut v = vec![0x4321, 0x8765];
    +scalar_mul_eq(&mut v, 0xFEED);
    +assert_eq!(v, [0xE38D, 0xD159, 0x86D3]);
    +

    If carry is zero, this is similar to overflowing_mul, +except that it gives the value of the overflow instead of just whether one happened:

    + +
    #![feature(bigint_helper_methods)]
    +let r = u8::carrying_mul(7, 13, 0);
    +assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(7, 13));
    +let r = u8::carrying_mul(13, 42, 0);
    +assert_eq!((r.0, r.1 != 0), u8::overflowing_mul(13, 42));
    +

    The value of the first field in the returned tuple matches what you’d get +by combining the wrapping_mul and +wrapping_add methods:

    + +
    #![feature(bigint_helper_methods)]
    +assert_eq!(
    +    789_u16.carrying_mul(456, 123).0,
    +    789_u16.wrapping_mul(456).wrapping_add(123),
    +);
    +
    const: unstable · source

    pub fn midpoint(self, rhs: u32) -> u32

    🔬This is a nightly-only experimental API. (num_midpoint)

    Calculates the middle point of self and rhs.

    +

    midpoint(a, b) is (a + b) >> 1 as if it were performed in a +sufficiently-large signed integral type. This implies that the result is +always rounded towards negative infinity and that no overflow will ever occur.

    +
    Examples
    +
    #![feature(num_midpoint)]
    +assert_eq!(0u32.midpoint(4), 2);
    +assert_eq!(1u32.midpoint(4), 2);
    +

    Trait Implementations§

    1.0.0 · source§

    impl Add<&u32> for u32

    §

    type Output = <u32 as Add<u32>>::Output

    The resulting type after applying the + operator.
    source§

    fn add(self, other: &u32) -> <u32 as Add<u32>>::Output

    Performs the + operation. Read more
    1.0.0 · source§

    impl Add<u32> for u32

    §

    type Output = u32

    The resulting type after applying the + operator.
    source§

    fn add(self, other: u32) -> u32

    Performs the + operation. Read more
    1.22.0 · source§

    impl AddAssign<&u32> for u32

    source§

    fn add_assign(&mut self, other: &u32)

    Performs the += operation. Read more
    1.8.0 · source§

    impl AddAssign<u32> for u32

    source§

    fn add_assign(&mut self, other: u32)

    Performs the += operation. Read more
    1.0.0 · source§

    impl Binary for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    source§

    impl Binomial for u32

    source§

    fn multinomial2(l: &[u32]) -> u32

    mod 2 multinomial coefficient
    source§

    fn binomial2(n: u32, k: u32) -> u32

    mod 2 binomial coefficient n choose k
    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [u32]) -> u32

    Computes the multinomial coefficient mod p using Lucas’ theorem. This modifies the +underlying list. For p = 2 it is more efficient to use multinomial2
    source§

    fn binomial_odd(p_: ValidPrime, n: u32, k: u32) -> u32

    Compute odd binomial coefficients mod p, where p is odd. For p = 2 it is more efficient to +use binomial2
    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: u32, k: u32) -> bool

    Checks whether n choose k is zero mod p. Since we don’t have to compute the value, this is +faster than binomial_odd.
    source§

    fn binomial4(n: u32, j: u32) -> u32

    Binomial coefficients mod 4. We pre-compute the coefficients for small values of n. For large +n, we recursively use the fact that if n = 2^k + l, l < 2^k, then Read more
    source§

    fn binomial4_rec(n: u32, j: u32) -> u32

    Compute binomial coefficients mod 4 using the recursion relation in the documentation of +Binomial::binomial4. This calls into binomial4 instead of binomial4_rec. The main purpose +of this is to separate out the logic for testing.
    source§

    fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self

    Multinomial coefficient of the list l
    source§

    fn binomial(p: ValidPrime, n: Self, k: Self) -> Self

    Binomial coefficient n choose k.
    1.0.0 · source§

    impl BitAnd<&u32> for u32

    §

    type Output = <u32 as BitAnd<u32>>::Output

    The resulting type after applying the & operator.
    source§

    fn bitand(self, other: &u32) -> <u32 as BitAnd<u32>>::Output

    Performs the & operation. Read more
    1.0.0 · source§

    impl BitAnd<u32> for u32

    §

    type Output = u32

    The resulting type after applying the & operator.
    source§

    fn bitand(self, rhs: u32) -> u32

    Performs the & operation. Read more
    1.22.0 · source§

    impl BitAndAssign<&u32> for u32

    source§

    fn bitand_assign(&mut self, other: &u32)

    Performs the &= operation. Read more
    1.8.0 · source§

    impl BitAndAssign<u32> for u32

    source§

    fn bitand_assign(&mut self, other: u32)

    Performs the &= operation. Read more
    1.0.0 · source§

    impl BitOr<&u32> for u32

    §

    type Output = <u32 as BitOr<u32>>::Output

    The resulting type after applying the | operator.
    source§

    fn bitor(self, other: &u32) -> <u32 as BitOr<u32>>::Output

    Performs the | operation. Read more
    1.45.0 · source§

    impl BitOr<NonZeroU32> for u32

    §

    type Output = NonZeroU32

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: NonZeroU32) -> <u32 as BitOr<NonZeroU32>>::Output

    Performs the | operation. Read more
    1.0.0 · source§

    impl BitOr<u32> for u32

    §

    type Output = u32

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: u32) -> u32

    Performs the | operation. Read more
    1.22.0 · source§

    impl BitOrAssign<&u32> for u32

    source§

    fn bitor_assign(&mut self, other: &u32)

    Performs the |= operation. Read more
    1.8.0 · source§

    impl BitOrAssign<u32> for u32

    source§

    fn bitor_assign(&mut self, other: u32)

    Performs the |= operation. Read more
    1.0.0 · source§

    impl BitXor<&u32> for u32

    §

    type Output = <u32 as BitXor<u32>>::Output

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, other: &u32) -> <u32 as BitXor<u32>>::Output

    Performs the ^ operation. Read more
    1.0.0 · source§

    impl BitXor<u32> for u32

    §

    type Output = u32

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, other: u32) -> u32

    Performs the ^ operation. Read more
    1.22.0 · source§

    impl BitXorAssign<&u32> for u32

    source§

    fn bitxor_assign(&mut self, other: &u32)

    Performs the ^= operation. Read more
    1.8.0 · source§

    impl BitXorAssign<u32> for u32

    source§

    fn bitxor_assign(&mut self, other: u32)

    Performs the ^= operation. Read more
    1.0.0 · source§

    impl Clone for u32

    source§

    fn clone(&self) -> u32

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    1.0.0 · source§

    impl Debug for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    1.0.0 · source§

    impl Default for u32

    source§

    fn default() -> u32

    Returns the default value of 0

    +
    source§

    impl<'de> Deserialize<'de> for u32

    source§

    fn deserialize<D>( + deserializer: D +) -> Result<u32, <D as Deserializer<'de>>::Error>where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    1.0.0 · source§

    impl Display for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    1.0.0 · source§

    impl Div<&u32> for u32

    §

    type Output = <u32 as Div<u32>>::Output

    The resulting type after applying the / operator.
    source§

    fn div(self, other: &u32) -> <u32 as Div<u32>>::Output

    Performs the / operation. Read more
    1.51.0 · source§

    impl Div<NonZeroU32> for u32

    source§

    fn div(self, other: NonZeroU32) -> u32

    This operation rounds towards zero, +truncating any fractional part of the exact result, and cannot panic.

    +
    §

    type Output = u32

    The resulting type after applying the / operator.
    1.0.0 · source§

    impl Div<u32> for u32

    This operation rounds towards zero, truncating any +fractional part of the exact result.

    +

    Panics

    +

    This operation will panic if other == 0.

    +
    §

    type Output = u32

    The resulting type after applying the / operator.
    source§

    fn div(self, other: u32) -> u32

    Performs the / operation. Read more
    1.22.0 · source§

    impl DivAssign<&u32> for u32

    source§

    fn div_assign(&mut self, other: &u32)

    Performs the /= operation. Read more
    1.8.0 · source§

    impl DivAssign<u32> for u32

    source§

    fn div_assign(&mut self, other: u32)

    Performs the /= operation. Read more
    1.1.0 · source§

    impl From<Ipv4Addr> for u32

    source§

    fn from(ip: Ipv4Addr) -> u32

    Uses Ipv4Addr::to_bits to convert an IPv4 address to a host byte order u32.

    +
    1.31.0 · source§

    impl From<NonZeroU32> for u32

    source§

    fn from(nonzero: NonZeroU32) -> u32

    Converts a NonZeroU32 into an u32

    +
    source§

    impl From<ValidPrime> for u32

    source§

    fn from(p: ValidPrime) -> u32

    Converts to this type from the input type.
    1.28.0 · source§

    impl From<bool> for u32

    source§

    fn from(small: bool) -> u32

    Converts a bool to a u32. The resulting value is 0 for false and 1 for true +values.

    +
    Examples
    +
    assert_eq!(u32::from(true), 1);
    +assert_eq!(u32::from(false), 0);
    +
    1.13.0 · source§

    impl From<char> for u32

    source§

    fn from(c: char) -> u32

    Converts a char into a u32.

    +
    Examples
    +
    use std::mem;
    +
    +let c = 'c';
    +let u = u32::from(c);
    +assert!(4 == mem::size_of_val(&u))
    +
    1.5.0 · source§

    impl From<u16> for u32

    source§

    fn from(small: u16) -> u32

    Converts u16 to u32 losslessly.

    +
    1.5.0 · source§

    impl From<u8> for u32

    source§

    fn from(small: u8) -> u32

    Converts u8 to u32 losslessly.

    +
    1.0.0 · source§

    impl FromStr for u32

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    source§

    fn from_str(src: &str) -> Result<u32, ParseIntError>

    Parses a string s to return a value of this type. Read more
    1.0.0 · source§

    impl Hash for u32

    source§

    fn hash<H>(&self, state: &mut H)where + H: Hasher,

    Feeds this value into the given Hasher. Read more
    source§

    fn hash_slice<H>(data: &[u32], state: &mut H)where + H: Hasher,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<'de, E> IntoDeserializer<'de, E> for u32where + E: Error,

    §

    type Deserializer = U32Deserializer<E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(self) -> U32Deserializer<E>

    Convert this value into a deserializer.
    1.42.0 · source§

    impl LowerExp for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    1.0.0 · source§

    impl LowerHex for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    1.0.0 · source§

    impl Mul<&u32> for u32

    §

    type Output = <u32 as Mul<u32>>::Output

    The resulting type after applying the * operator.
    source§

    fn mul(self, other: &u32) -> <u32 as Mul<u32>>::Output

    Performs the * operation. Read more
    1.31.0 · source§

    impl Mul<Duration> for u32

    §

    type Output = Duration

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: Duration) -> Duration

    Performs the * operation. Read more
    1.0.0 · source§

    impl Mul<u32> for u32

    §

    type Output = u32

    The resulting type after applying the * operator.
    source§

    fn mul(self, other: u32) -> u32

    Performs the * operation. Read more
    1.22.0 · source§

    impl MulAssign<&u32> for u32

    source§

    fn mul_assign(&mut self, other: &u32)

    Performs the *= operation. Read more
    1.8.0 · source§

    impl MulAssign<u32> for u32

    source§

    fn mul_assign(&mut self, other: u32)

    Performs the *= operation. Read more
    1.0.0 · source§

    impl Not for u32

    §

    type Output = u32

    The resulting type after applying the ! operator.
    source§

    fn not(self) -> u32

    Performs the unary ! operation. Read more
    1.0.0 · source§

    impl Octal for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    1.0.0 · source§

    impl Ord for u32

    source§

    fn cmp(&self, other: &u32) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Value> for u32

    source§

    fn eq(&self, other: &Value) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    1.0.0 · source§

    impl PartialEq<u32> for u32

    source§

    fn eq(&self, other: &u32) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    source§

    fn ne(&self, other: &u32) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    1.0.0 · source§

    impl PartialOrd<u32> for u32

    source§

    fn partial_cmp(&self, other: &u32) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    source§

    fn lt(&self, other: &u32) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    source§

    fn le(&self, other: &u32) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    source§

    fn ge(&self, other: &u32) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    fn gt(&self, other: &u32) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.12.0 · source§

    impl<'a> Product<&'a u32> for u32

    source§

    fn product<I>(iter: I) -> u32where + I: Iterator<Item = &'a u32>,

    Method which takes an iterator and generates Self from the elements by +multiplying the items.
    1.12.0 · source§

    impl Product<u32> for u32

    source§

    fn product<I>(iter: I) -> u32where + I: Iterator<Item = u32>,

    Method which takes an iterator and generates Self from the elements by +multiplying the items.
    1.0.0 · source§

    impl Rem<&u32> for u32

    §

    type Output = <u32 as Rem<u32>>::Output

    The resulting type after applying the % operator.
    source§

    fn rem(self, other: &u32) -> <u32 as Rem<u32>>::Output

    Performs the % operation. Read more
    1.51.0 · source§

    impl Rem<NonZeroU32> for u32

    source§

    fn rem(self, other: NonZeroU32) -> u32

    This operation satisfies n % d == n - (n / d) * d, and cannot panic.

    +
    §

    type Output = u32

    The resulting type after applying the % operator.
    1.0.0 · source§

    impl Rem<u32> for u32

    This operation satisfies n % d == n - (n / d) * d. The +result has the same sign as the left operand.

    +

    Panics

    +

    This operation will panic if other == 0.

    +
    §

    type Output = u32

    The resulting type after applying the % operator.
    source§

    fn rem(self, other: u32) -> u32

    Performs the % operation. Read more
    1.22.0 · source§

    impl RemAssign<&u32> for u32

    source§

    fn rem_assign(&mut self, other: &u32)

    Performs the %= operation. Read more
    1.8.0 · source§

    impl RemAssign<u32> for u32

    source§

    fn rem_assign(&mut self, other: u32)

    Performs the %= operation. Read more
    source§

    impl Serialize for u32

    source§

    fn serialize<S>( + &self, + serializer: S +) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where + S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    1.0.0 · source§

    impl Shl<&i128> for u32

    §

    type Output = <u32 as Shl<i128>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &i128) -> <u32 as Shl<i128>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&i16> for u32

    §

    type Output = <u32 as Shl<i16>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &i16) -> <u32 as Shl<i16>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&i32> for u32

    §

    type Output = <u32 as Shl<i32>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &i32) -> <u32 as Shl<i32>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&i64> for u32

    §

    type Output = <u32 as Shl<i64>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &i64) -> <u32 as Shl<i64>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&i8> for u32

    §

    type Output = <u32 as Shl<i8>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &i8) -> <u32 as Shl<i8>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&isize> for u32

    §

    type Output = <u32 as Shl<isize>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &isize) -> <u32 as Shl<isize>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&u128> for u32

    §

    type Output = <u32 as Shl<u128>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &u128) -> <u32 as Shl<u128>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&u16> for u32

    §

    type Output = <u32 as Shl<u16>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &u16) -> <u32 as Shl<u16>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&u32> for u32

    §

    type Output = <u32 as Shl<u32>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &u32) -> <u32 as Shl<u32>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&u64> for u32

    §

    type Output = <u32 as Shl<u64>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &u64) -> <u32 as Shl<u64>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&u8> for u32

    §

    type Output = <u32 as Shl<u8>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &u8) -> <u32 as Shl<u8>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<&usize> for u32

    §

    type Output = <u32 as Shl<usize>>::Output

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: &usize) -> <u32 as Shl<usize>>::Output

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<i128> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: i128) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<i16> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: i16) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<i32> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: i32) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<i64> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: i64) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<i8> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: i8) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<isize> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: isize) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<u128> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: u128) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<u16> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: u16) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<u32> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: u32) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<u64> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: u64) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<u8> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: u8) -> u32

    Performs the << operation. Read more
    1.0.0 · source§

    impl Shl<usize> for u32

    §

    type Output = u32

    The resulting type after applying the << operator.
    source§

    fn shl(self, other: usize) -> u32

    Performs the << operation. Read more
    1.22.0 · source§

    impl ShlAssign<&i128> for u32

    source§

    fn shl_assign(&mut self, other: &i128)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&i16> for u32

    source§

    fn shl_assign(&mut self, other: &i16)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&i32> for u32

    source§

    fn shl_assign(&mut self, other: &i32)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&i64> for u32

    source§

    fn shl_assign(&mut self, other: &i64)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&i8> for u32

    source§

    fn shl_assign(&mut self, other: &i8)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&isize> for u32

    source§

    fn shl_assign(&mut self, other: &isize)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&u128> for u32

    source§

    fn shl_assign(&mut self, other: &u128)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&u16> for u32

    source§

    fn shl_assign(&mut self, other: &u16)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&u32> for u32

    source§

    fn shl_assign(&mut self, other: &u32)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&u64> for u32

    source§

    fn shl_assign(&mut self, other: &u64)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&u8> for u32

    source§

    fn shl_assign(&mut self, other: &u8)

    Performs the <<= operation. Read more
    1.22.0 · source§

    impl ShlAssign<&usize> for u32

    source§

    fn shl_assign(&mut self, other: &usize)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<i128> for u32

    source§

    fn shl_assign(&mut self, other: i128)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<i16> for u32

    source§

    fn shl_assign(&mut self, other: i16)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<i32> for u32

    source§

    fn shl_assign(&mut self, other: i32)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<i64> for u32

    source§

    fn shl_assign(&mut self, other: i64)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<i8> for u32

    source§

    fn shl_assign(&mut self, other: i8)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<isize> for u32

    source§

    fn shl_assign(&mut self, other: isize)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<u128> for u32

    source§

    fn shl_assign(&mut self, other: u128)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<u16> for u32

    source§

    fn shl_assign(&mut self, other: u16)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<u32> for u32

    source§

    fn shl_assign(&mut self, other: u32)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<u64> for u32

    source§

    fn shl_assign(&mut self, other: u64)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<u8> for u32

    source§

    fn shl_assign(&mut self, other: u8)

    Performs the <<= operation. Read more
    1.8.0 · source§

    impl ShlAssign<usize> for u32

    source§

    fn shl_assign(&mut self, other: usize)

    Performs the <<= operation. Read more
    1.0.0 · source§

    impl Shr<&i128> for u32

    §

    type Output = <u32 as Shr<i128>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &i128) -> <u32 as Shr<i128>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&i16> for u32

    §

    type Output = <u32 as Shr<i16>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &i16) -> <u32 as Shr<i16>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&i32> for u32

    §

    type Output = <u32 as Shr<i32>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &i32) -> <u32 as Shr<i32>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&i64> for u32

    §

    type Output = <u32 as Shr<i64>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &i64) -> <u32 as Shr<i64>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&i8> for u32

    §

    type Output = <u32 as Shr<i8>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &i8) -> <u32 as Shr<i8>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&isize> for u32

    §

    type Output = <u32 as Shr<isize>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &isize) -> <u32 as Shr<isize>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&u128> for u32

    §

    type Output = <u32 as Shr<u128>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &u128) -> <u32 as Shr<u128>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&u16> for u32

    §

    type Output = <u32 as Shr<u16>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &u16) -> <u32 as Shr<u16>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&u32> for u32

    §

    type Output = <u32 as Shr<u32>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &u32) -> <u32 as Shr<u32>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&u64> for u32

    §

    type Output = <u32 as Shr<u64>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &u64) -> <u32 as Shr<u64>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&u8> for u32

    §

    type Output = <u32 as Shr<u8>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &u8) -> <u32 as Shr<u8>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<&usize> for u32

    §

    type Output = <u32 as Shr<usize>>::Output

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: &usize) -> <u32 as Shr<usize>>::Output

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<i128> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: i128) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<i16> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: i16) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<i32> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: i32) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<i64> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: i64) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<i8> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: i8) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<isize> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: isize) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<u128> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: u128) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<u16> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: u16) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<u32> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: u32) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<u64> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: u64) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<u8> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: u8) -> u32

    Performs the >> operation. Read more
    1.0.0 · source§

    impl Shr<usize> for u32

    §

    type Output = u32

    The resulting type after applying the >> operator.
    source§

    fn shr(self, other: usize) -> u32

    Performs the >> operation. Read more
    1.22.0 · source§

    impl ShrAssign<&i128> for u32

    source§

    fn shr_assign(&mut self, other: &i128)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&i16> for u32

    source§

    fn shr_assign(&mut self, other: &i16)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&i32> for u32

    source§

    fn shr_assign(&mut self, other: &i32)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&i64> for u32

    source§

    fn shr_assign(&mut self, other: &i64)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&i8> for u32

    source§

    fn shr_assign(&mut self, other: &i8)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&isize> for u32

    source§

    fn shr_assign(&mut self, other: &isize)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&u128> for u32

    source§

    fn shr_assign(&mut self, other: &u128)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&u16> for u32

    source§

    fn shr_assign(&mut self, other: &u16)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&u32> for u32

    source§

    fn shr_assign(&mut self, other: &u32)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&u64> for u32

    source§

    fn shr_assign(&mut self, other: &u64)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&u8> for u32

    source§

    fn shr_assign(&mut self, other: &u8)

    Performs the >>= operation. Read more
    1.22.0 · source§

    impl ShrAssign<&usize> for u32

    source§

    fn shr_assign(&mut self, other: &usize)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<i128> for u32

    source§

    fn shr_assign(&mut self, other: i128)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<i16> for u32

    source§

    fn shr_assign(&mut self, other: i16)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<i32> for u32

    source§

    fn shr_assign(&mut self, other: i32)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<i64> for u32

    source§

    fn shr_assign(&mut self, other: i64)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<i8> for u32

    source§

    fn shr_assign(&mut self, other: i8)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<isize> for u32

    source§

    fn shr_assign(&mut self, other: isize)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<u128> for u32

    source§

    fn shr_assign(&mut self, other: u128)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<u16> for u32

    source§

    fn shr_assign(&mut self, other: u16)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<u32> for u32

    source§

    fn shr_assign(&mut self, other: u32)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<u64> for u32

    source§

    fn shr_assign(&mut self, other: u64)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<u8> for u32

    source§

    fn shr_assign(&mut self, other: u8)

    Performs the >>= operation. Read more
    1.8.0 · source§

    impl ShrAssign<usize> for u32

    source§

    fn shr_assign(&mut self, other: usize)

    Performs the >>= operation. Read more
    source§

    impl SimdElement for u32

    §

    type Mask = i32

    🔬This is a nightly-only experimental API. (portable_simd)
    The mask element type corresponding to this element type.
    source§

    impl Step for u32

    source§

    unsafe fn forward_unchecked(start: u32, n: usize) -> u32

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor +of self count times. Read more
    source§

    unsafe fn backward_unchecked(start: u32, n: usize) -> u32

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor +of self count times. Read more
    source§

    fn forward(start: u32, n: usize) -> u32

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor +of self count times. Read more
    source§

    fn backward(start: u32, n: usize) -> u32

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor +of self count times. Read more
    source§

    fn steps_between(start: &u32, end: &u32) -> Option<usize>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the number of successor steps required to get from start to end. Read more
    source§

    fn forward_checked(start: u32, n: usize) -> Option<u32>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor +of self count times. Read more
    source§

    fn backward_checked(start: u32, n: usize) -> Option<u32>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor +of self count times. Read more
    1.0.0 · source§

    impl Sub<&u32> for u32

    §

    type Output = <u32 as Sub<u32>>::Output

    The resulting type after applying the - operator.
    source§

    fn sub(self, other: &u32) -> <u32 as Sub<u32>>::Output

    Performs the - operation. Read more
    1.0.0 · source§

    impl Sub<u32> for u32

    §

    type Output = u32

    The resulting type after applying the - operator.
    source§

    fn sub(self, other: u32) -> u32

    Performs the - operation. Read more
    1.22.0 · source§

    impl SubAssign<&u32> for u32

    source§

    fn sub_assign(&mut self, other: &u32)

    Performs the -= operation. Read more
    1.8.0 · source§

    impl SubAssign<u32> for u32

    source§

    fn sub_assign(&mut self, other: u32)

    Performs the -= operation. Read more
    1.12.0 · source§

    impl<'a> Sum<&'a u32> for u32

    source§

    fn sum<I>(iter: I) -> u32where + I: Iterator<Item = &'a u32>,

    Method which takes an iterator and generates Self from the elements by +“summing up” the items.
    1.12.0 · source§

    impl Sum<u32> for u32

    source§

    fn sum<I>(iter: I) -> u32where + I: Iterator<Item = u32>,

    Method which takes an iterator and generates Self from the elements by +“summing up” the items.
    §

    impl ToUsize for u32

    §

    fn to_usize(&self) -> usize

    converts self to usize
    1.34.0 · source§

    impl TryFrom<i128> for u32

    source§

    fn try_from(u: i128) -> Result<u32, <u32 as TryFrom<i128>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<i16> for u32

    source§

    fn try_from(u: i16) -> Result<u32, <u32 as TryFrom<i16>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<i32> for u32

    source§

    fn try_from(u: i32) -> Result<u32, <u32 as TryFrom<i32>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<i64> for u32

    source§

    fn try_from(u: i64) -> Result<u32, <u32 as TryFrom<i64>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<i8> for u32

    source§

    fn try_from(u: i8) -> Result<u32, <u32 as TryFrom<i8>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<isize> for u32

    source§

    fn try_from(u: isize) -> Result<u32, <u32 as TryFrom<isize>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<u128> for u32

    source§

    fn try_from(u: u128) -> Result<u32, <u32 as TryFrom<u128>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<u64> for u32

    source§

    fn try_from(u: u64) -> Result<u32, <u32 as TryFrom<u64>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.34.0 · source§

    impl TryFrom<usize> for u32

    source§

    fn try_from(u: usize) -> Result<u32, <u32 as TryFrom<usize>>::Error>

    Try to create the target number type from a source +number type. This returns an error if the source value +is outside of the range of the target type.

    +
    §

    type Error = TryFromIntError

    The type returned in the event of a conversion error.
    1.42.0 · source§

    impl UpperExp for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    1.0.0 · source§

    impl UpperHex for u32

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    source§

    impl ConstParamTy for u32

    1.0.0 · source§

    impl Copy for u32

    1.0.0 · source§

    impl Eq for u32

    source§

    impl Integer for u32

    source§

    impl SimdCast for u32

    source§

    impl StructuralEq for u32

    source§

    impl StructuralPartialEq for u32

    source§

    impl TrustedStep for u32

    \ No newline at end of file diff --git a/docs/algebra/module/block_structure/index.html b/docs/algebra/module/block_structure/index.html index 6bec198eb..22d069544 100644 --- a/docs/algebra/module/block_structure/index.html +++ b/docs/algebra/module/block_structure/index.html @@ -1,4 +1,4 @@ -algebra::module::block_structure - Rust +algebra::module::block_structure - Rust @@ -23,7 +23,7 @@ }); -

    Structs

    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/block_structure/struct.GeneratorBasisEltPair.html b/docs/algebra/module/block_structure/struct.GeneratorBasisEltPair.html index c70d70ff7..c355290bb 100644 --- a/docs/algebra/module/block_structure/struct.GeneratorBasisEltPair.html +++ b/docs/algebra/module/block_structure/struct.GeneratorBasisEltPair.html @@ -1,4 +1,4 @@ -GeneratorBasisEltPair in algebra::module::block_structure - Rust +GeneratorBasisEltPair in algebra::module::block_structure - Rust @@ -23,18 +23,18 @@ }); -
    pub struct GeneratorBasisEltPair {
    -    pub generator_degree: i32,
    -    pub generator_index: usize,
    -    pub basis_index: usize,
    -}

    Fields§

    §generator_degree: i32§generator_index: usize§basis_index: usize

    Trait Implementations§

    source§

    impl Debug for GeneratorBasisEltPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct GeneratorBasisEltPair {
    +    pub generator_degree: i32,
    +    pub generator_index: usize,
    +    pub basis_index: usize,
    +}

    Fields§

    §generator_degree: i32§generator_index: usize§basis_index: usize

    Trait Implementations§

    source§

    impl Debug for GeneratorBasisEltPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/finite_dimensional_module/index.html b/docs/algebra/module/finite_dimensional_module/index.html index e56906c6e..da4b7bcc1 100644 --- a/docs/algebra/module/finite_dimensional_module/index.html +++ b/docs/algebra/module/finite_dimensional_module/index.html @@ -1,4 +1,4 @@ -algebra::module::finite_dimensional_module - Rust +algebra::module::finite_dimensional_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/finite_dimensional_module/struct.FiniteDimensionalModule.html b/docs/algebra/module/finite_dimensional_module/struct.FiniteDimensionalModule.html index b392ba07c..2bbdfcf9f 100644 --- a/docs/algebra/module/finite_dimensional_module/struct.FiniteDimensionalModule.html +++ b/docs/algebra/module/finite_dimensional_module/struct.FiniteDimensionalModule.html @@ -1,4 +1,4 @@ -FiniteDimensionalModule in algebra::module::finite_dimensional_module - Rust +FiniteDimensionalModule in algebra::module::finite_dimensional_module - Rust @@ -23,105 +23,105 @@ }); -
    pub struct FiniteDimensionalModule<A: Algebra> {
    -    algebra: Arc<A>,
    -    pub name: String,
    -    graded_dimension: BiVec<usize>,
    -    gen_names: BiVec<Vec<String>>,
    -    actions: BiVec<BiVec<Vec<Vec<FpVector>>>>,
    -}

    Fields§

    §algebra: Arc<A>§name: String§graded_dimension: BiVec<usize>§gen_names: BiVec<Vec<String>>§actions: BiVec<BiVec<Vec<Vec<FpVector>>>>

    Implementations§

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn test_equal(&self, other: &Self) -> Result<(), String>

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn new( - algebra: Arc<A>, - name: String, - graded_dimension: BiVec<usize> -) -> Self

    source

    pub fn set_basis_element_name(&mut self, degree: i32, idx: usize, name: String)

    source

    fn allocate_actions( - algebra: &Arc<A>, - graded_dimension: &BiVec<usize> -) -> BiVec<BiVec<Vec<Vec<FpVector>>>>

    source

    pub fn add_generator(&mut self, degree: i32, name: String)

    source

    pub fn string_to_basis_element(&self, string: &str) -> Option<(i32, usize)>

    source

    pub fn set_action( +
    pub struct FiniteDimensionalModule<A: Algebra> {
    +    algebra: Arc<A>,
    +    pub name: String,
    +    graded_dimension: BiVec<usize>,
    +    gen_names: BiVec<Vec<String>>,
    +    actions: BiVec<BiVec<Vec<Vec<FpVector>>>>,
    +}

    Fields§

    §algebra: Arc<A>§name: String§graded_dimension: BiVec<usize>§gen_names: BiVec<Vec<String>>§actions: BiVec<BiVec<Vec<Vec<FpVector>>>>

    Implementations§

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn test_equal(&self, other: &Self) -> Result<(), String>

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn new( + algebra: Arc<A>, + name: String, + graded_dimension: BiVec<usize> +) -> Self

    source

    pub fn set_basis_element_name(&mut self, degree: i32, idx: usize, name: String)

    source

    fn allocate_actions( + algebra: &Arc<A>, + graded_dimension: &BiVec<usize> +) -> BiVec<BiVec<Vec<Vec<FpVector>>>>

    source

    pub fn add_generator(&mut self, degree: i32, name: String)

    source

    pub fn string_to_basis_element(&self, string: &str) -> Option<(i32, usize)>

    source

    pub fn set_action( &mut self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize, - output: &[u32] -)

    source

    pub fn action( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize, + output: &[u32] +)

    source

    pub fn action( &self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize -) -> &FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    -
    source

    pub fn action_mut( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize +) -> &FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    +
    source

    pub fn action_mut( &mut self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize -) -> &mut FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    -
    source§

    impl<A: GeneratedAlgebra> FiniteDimensionalModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    source

    pub fn parse_action( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize +) -> &mut FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    +

    source§

    impl<A: GeneratedAlgebra> FiniteDimensionalModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    source

    pub fn parse_action( &mut self, - gen_to_idx: impl for<'a> Fn(&'a str) -> Result<(i32, usize)>, - entry: &str, - overwrite: bool -) -> Result<()>

    source

    pub fn check_validity( + gen_to_idx: impl for<'a> Fn(&'a str) -> Result<(i32, usize)>, + entry: &str, + overwrite: bool +) -> Result<()>

    source

    pub fn check_validity( &self, - input_deg: i32, - output_deg: i32 -) -> Result<(), ModuleFailedRelationError>

    source

    pub fn extend_actions(&mut self, input_deg: i32, output_deg: i32)

    source

    fn actions_to_json(&self) -> Value

    Trait Implementations§

    source§

    impl<A: Algebra> Clone for FiniteDimensionalModule<A>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Algebra> Display for FiniteDimensionalModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>

    source§

    fn from(module: &M) -> Self

    This should really by try_from but orphan rules prohibit this

    -
    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, _degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + input_deg: i32, + output_deg: i32 +) -> Result<(), ModuleFailedRelationError>

    source

    pub fn extend_actions(&mut self, input_deg: i32, output_deg: i32)

    source

    fn actions_to_json(&self) -> Value

    Trait Implementations§

    source§

    impl<A: Algebra> Clone for FiniteDimensionalModule<A>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Algebra> Display for FiniteDimensionalModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>

    source§

    fn from(module: &M) -> Self

    This should really by try_from but orphan rules prohibit this

    +
    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, _degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FiniteDimensionalModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FiniteDimensionalModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/finitely_presented_module/index.html b/docs/algebra/module/finitely_presented_module/index.html index ea166d669..17cbfa4f5 100644 --- a/docs/algebra/module/finitely_presented_module/index.html +++ b/docs/algebra/module/finitely_presented_module/index.html @@ -1,4 +1,4 @@ -algebra::module::finitely_presented_module - Rust +algebra::module::finitely_presented_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/finitely_presented_module/struct.FPMIndexTable.html b/docs/algebra/module/finitely_presented_module/struct.FPMIndexTable.html index d54ae6a54..14df77689 100644 --- a/docs/algebra/module/finitely_presented_module/struct.FPMIndexTable.html +++ b/docs/algebra/module/finitely_presented_module/struct.FPMIndexTable.html @@ -1,4 +1,4 @@ -FPMIndexTable in algebra::module::finitely_presented_module - Rust +FPMIndexTable in algebra::module::finitely_presented_module - Rust @@ -23,17 +23,17 @@ }); -
    struct FPMIndexTable {
    -    gen_idx_to_fp_idx: Vec<isize>,
    -    fp_idx_to_gen_idx: Vec<usize>,
    -}

    Fields§

    §gen_idx_to_fp_idx: Vec<isize>§fp_idx_to_gen_idx: Vec<usize>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    struct FPMIndexTable {
    +    gen_idx_to_fp_idx: Vec<isize>,
    +    fp_idx_to_gen_idx: Vec<usize>,
    +}

    Fields§

    §gen_idx_to_fp_idx: Vec<isize>§fp_idx_to_gen_idx: Vec<usize>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/finitely_presented_module/struct.FinitelyPresentedModule.html b/docs/algebra/module/finitely_presented_module/struct.FinitelyPresentedModule.html index 36cde467c..a23b3ae34 100644 --- a/docs/algebra/module/finitely_presented_module/struct.FinitelyPresentedModule.html +++ b/docs/algebra/module/finitely_presented_module/struct.FinitelyPresentedModule.html @@ -1,4 +1,4 @@ -FinitelyPresentedModule in algebra::module::finitely_presented_module - Rust +FinitelyPresentedModule in algebra::module::finitely_presented_module - Rust @@ -23,67 +23,67 @@ }); -
    pub struct FinitelyPresentedModule<A: Algebra> {
    -    name: String,
    -    min_degree: i32,
    -    generators: Arc<FreeModule<A>>,
    -    relations: Arc<FreeModule<A>>,
    -    map: Arc<FreeModuleHomomorphism<FreeModule<A>>>,
    -    index_table: OnceBiVec<FPMIndexTable>,
    -}

    Fields§

    §name: String§min_degree: i32§generators: Arc<FreeModule<A>>§relations: Arc<FreeModule<A>>§map: Arc<FreeModuleHomomorphism<FreeModule<A>>>§index_table: OnceBiVec<FPMIndexTable>

    Implementations§

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source

    pub fn generators(&self) -> Arc<FreeModule<A>>

    source

    pub fn add_generators(&mut self, degree: i32, gen_names: Vec<String>)

    source

    pub fn add_relations(&mut self, degree: i32, relations: Vec<FpVector>)

    source

    pub fn gen_idx_to_fp_idx(&self, degree: i32, idx: usize) -> isize

    source

    pub fn fp_idx_to_gen_idx(&self, degree: i32, idx: usize) -> usize

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    Trait Implementations§

    source§

    impl<A: Algebra> Display for FinitelyPresentedModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( +
    pub struct FinitelyPresentedModule<A: Algebra> {
    +    name: String,
    +    min_degree: i32,
    +    generators: Arc<FreeModule<A>>,
    +    relations: Arc<FreeModule<A>>,
    +    map: Arc<FreeModuleHomomorphism<FreeModule<A>>>,
    +    index_table: OnceBiVec<FPMIndexTable>,
    +}

    Fields§

    §name: String§min_degree: i32§generators: Arc<FreeModule<A>>§relations: Arc<FreeModule<A>>§map: Arc<FreeModuleHomomorphism<FreeModule<A>>>§index_table: OnceBiVec<FPMIndexTable>

    Implementations§

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source

    pub fn generators(&self) -> Arc<FreeModule<A>>

    source

    pub fn add_generators(&mut self, degree: i32, gen_names: Vec<String>)

    source

    pub fn add_relations(&mut self, degree: i32, relations: Vec<FpVector>)

    source

    pub fn gen_idx_to_fp_idx(&self, degree: i32, idx: usize) -> isize

    source

    pub fn fp_idx_to_gen_idx(&self, degree: i32, idx: usize) -> usize

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    Trait Implementations§

    source§

    impl<A: Algebra> Display for FinitelyPresentedModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>

    source§

    fn eq(&self, _other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FinitelyPresentedModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>

    source§

    fn eq(&self, _other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FinitelyPresentedModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/index.html b/docs/algebra/module/free_module/index.html index b333d883f..5e01049fa 100644 --- a/docs/algebra/module/free_module/index.html +++ b/docs/algebra/module/free_module/index.html @@ -1,4 +1,4 @@ -algebra::module::free_module - Rust +algebra::module::free_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/struct.GeneratorData.html b/docs/algebra/module/free_module/struct.GeneratorData.html index b125483e1..54789ede4 100644 --- a/docs/algebra/module/free_module/struct.GeneratorData.html +++ b/docs/algebra/module/free_module/struct.GeneratorData.html @@ -1,4 +1,4 @@ -GeneratorData in algebra::module::free_module - Rust +GeneratorData in algebra::module::free_module - Rust @@ -23,18 +23,18 @@ }); -
    pub struct GeneratorData<const N: usize> {
    -    pub gen_deg: i32,
    -    pub start: [usize; N],
    -    pub end: [usize; N],
    -}

    Fields§

    §gen_deg: i32§start: [usize; N]§end: [usize; N]

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for GeneratorData<N>

    §

    impl<const N: usize> Send for GeneratorData<N>

    §

    impl<const N: usize> Sync for GeneratorData<N>

    §

    impl<const N: usize> Unpin for GeneratorData<N>

    §

    impl<const N: usize> UnwindSafe for GeneratorData<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct GeneratorData<const N: usize> {
    +    pub gen_deg: i32,
    +    pub start: [usize; N],
    +    pub end: [usize; N],
    +}

    Fields§

    §gen_deg: i32§start: [usize; N]§end: [usize; N]

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for GeneratorData<N>

    §

    impl<const N: usize> Send for GeneratorData<N>

    §

    impl<const N: usize> Sync for GeneratorData<N>

    §

    impl<const N: usize> Unpin for GeneratorData<N>

    §

    impl<const N: usize> UnwindSafe for GeneratorData<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/struct.MuFreeModule.html b/docs/algebra/module/free_module/struct.MuFreeModule.html index 54bfe23f4..10f269680 100644 --- a/docs/algebra/module/free_module/struct.MuFreeModule.html +++ b/docs/algebra/module/free_module/struct.MuFreeModule.html @@ -1,4 +1,4 @@ -MuFreeModule in algebra::module::free_module - Rust +MuFreeModule in algebra::module::free_module - Rust @@ -23,121 +23,121 @@ }); -
    pub struct MuFreeModule<const U: bool, A: MuAlgebra<U>> {
    -    algebra: Arc<A>,
    -    name: String,
    -    min_degree: i32,
    -    gen_names: OnceBiVec<Vec<String>>,
    -    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    -    num_gens: OnceBiVec<usize>,
    -    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    -    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +
    pub struct MuFreeModule<const U: bool, A: MuAlgebra<U>> {
    +    algebra: Arc<A>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
     }
    Expand description

    A free module.

    A free module is uniquely determined by its list of generators. The generators are listed in increasing degrees, and the index in this list is the internal index.

    -

    Fields§

    §algebra: Arc<A>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    -
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    -

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( +

    Fields§

    §algebra: Arc<A>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( &self, - degree: i32, - num_gens: usize, - names: Option<Vec<String>> + degree: i32, + num_gens: usize, + names: Option<Vec<String>> )

    source

    pub fn internal_generator_offset( &self, - degree: i32, - internal_gen_idx: usize -) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with elements from the generator.

    -
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    -
    source

    pub fn iter_gen_offsets<const N: usize>( +

    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( &self, - degree: [i32; N] -) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    source

    pub fn generator_offset( &self, - degree: i32, - gen_deg: i32, - gen_idx: usize -) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with elements from the generator.

    source

    pub fn operation_generator_to_index( &self, - op_deg: i32, - op_idx: usize, - gen_deg: i32, - gen_idx: usize -) -> usize

    source

    pub fn index_to_op_gen( + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( &self, - degree: i32, - index: usize -) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( &self, - degree: i32, - gen_degree: i32, - gen_index: usize, - v: Slice<'a> -) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that represents the terms that correspond to the specified generator.

    source

    pub fn iter_slices<'a>( &'a self, - degree: i32, - slice: Slice<'a> -) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices that are zero length.

    -

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize )

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. -Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( +Missing entries are interpreted to be 0, while extra entries must be zero. Read more

    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where - A: RefUnwindSafe,

    §

    impl<const U: bool, A> Send for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Sync for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Unpin for MuFreeModule<U, A>

    §

    impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where - A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where + A: RefUnwindSafe,

    §

    impl<const U: bool, A> Send for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Sync for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Unpin for MuFreeModule<U, A>

    §

    impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where + A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/struct.OffsetIterator.html b/docs/algebra/module/free_module/struct.OffsetIterator.html index bea48bf85..658a8677d 100644 --- a/docs/algebra/module/free_module/struct.OffsetIterator.html +++ b/docs/algebra/module/free_module/struct.OffsetIterator.html @@ -1,4 +1,4 @@ -OffsetIterator in algebra::module::free_module - Rust +OffsetIterator in algebra::module::free_module - Rust @@ -23,526 +23,526 @@ }); -
    struct OffsetIterator<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> {
    +
    struct OffsetIterator<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> {
         module: &'a MuFreeModule<U, A>,
    -    degree: [i32; N],
    -    offset: [usize; N],
    +    degree: [i32; N],
    +    offset: [usize; N],
         gen_deg: T,
    -}

    Fields§

    §module: &'a MuFreeModule<U, A>§degree: [i32; N]§offset: [usize; N]§gen_deg: T

    Trait Implementations§

    source§

    impl<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> Iterator for OffsetIterator<'a, U, A, T, N>

    §

    type Item = GeneratorData<N>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +}

    Fields§

    §module: &'a MuFreeModule<U, A>§degree: [i32; N]§offset: [usize; N]§gen_deg: T

    Trait Implementations§

    source§

    impl<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> Iterator for OffsetIterator<'a, U, A, T, N>

    §

    type Item = GeneratorData<N>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const U: bool, A, T, const N: usize> RefUnwindSafe for OffsetIterator<'a, U, A, T, N>where - A: RefUnwindSafe, - T: RefUnwindSafe,

    §

    impl<'a, const U: bool, A, T, const N: usize> Send for OffsetIterator<'a, U, A, T, N>where - T: Send,

    §

    impl<'a, const U: bool, A, T, const N: usize> Sync for OffsetIterator<'a, U, A, T, N>where - T: Sync,

    §

    impl<'a, const U: bool, A, T, const N: usize> Unpin for OffsetIterator<'a, U, A, T, N>where - T: Unpin,

    §

    impl<'a, const U: bool, A, T, const N: usize> UnwindSafe for OffsetIterator<'a, U, A, T, N>where - A: RefUnwindSafe, - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const U: bool, A, T, const N: usize> RefUnwindSafe for OffsetIterator<'a, U, A, T, N>where + A: RefUnwindSafe, + T: RefUnwindSafe,

    §

    impl<'a, const U: bool, A, T, const N: usize> Send for OffsetIterator<'a, U, A, T, N>where + T: Send,

    §

    impl<'a, const U: bool, A, T, const N: usize> Sync for OffsetIterator<'a, U, A, T, N>where + T: Sync,

    §

    impl<'a, const U: bool, A, T, const N: usize> Unpin for OffsetIterator<'a, U, A, T, N>where + T: Unpin,

    §

    impl<'a, const U: bool, A, T, const N: usize> UnwindSafe for OffsetIterator<'a, U, A, T, N>where + A: RefUnwindSafe, + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/struct.OperationGeneratorPair.html b/docs/algebra/module/free_module/struct.OperationGeneratorPair.html index e7c37ce8c..eb8d6c81a 100644 --- a/docs/algebra/module/free_module/struct.OperationGeneratorPair.html +++ b/docs/algebra/module/free_module/struct.OperationGeneratorPair.html @@ -1,4 +1,4 @@ -OperationGeneratorPair in algebra::module::free_module - Rust +OperationGeneratorPair in algebra::module::free_module - Rust @@ -23,20 +23,20 @@ }); -
    pub struct OperationGeneratorPair {
    -    pub operation_degree: i32,
    -    pub operation_index: usize,
    -    pub generator_degree: i32,
    -    pub generator_index: usize,
    -}

    Fields§

    §operation_degree: i32§operation_index: usize§generator_degree: i32§generator_index: usize

    Trait Implementations§

    source§

    impl Clone for OperationGeneratorPair

    source§

    fn clone(&self) -> OperationGeneratorPair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OperationGeneratorPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct OperationGeneratorPair {
    +    pub operation_degree: i32,
    +    pub operation_index: usize,
    +    pub generator_degree: i32,
    +    pub generator_index: usize,
    +}

    Fields§

    §operation_degree: i32§operation_index: usize§generator_degree: i32§generator_index: usize

    Trait Implementations§

    source§

    impl Clone for OperationGeneratorPair

    source§

    fn clone(&self) -> OperationGeneratorPair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OperationGeneratorPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/free_module/type.FreeModule.html b/docs/algebra/module/free_module/type.FreeModule.html index e0e0fa459..2c645fd20 100644 --- a/docs/algebra/module/free_module/type.FreeModule.html +++ b/docs/algebra/module/free_module/type.FreeModule.html @@ -1,4 +1,4 @@ -FreeModule in algebra::module::free_module - Rust +FreeModule in algebra::module::free_module - Rust @@ -23,4 +23,100 @@ }); -

    Type Definition algebra::module::free_module::FreeModule

    source ·
    pub type FreeModule<A> = MuFreeModule<false, A>;
    \ No newline at end of file +
    pub type FreeModule<A> = MuFreeModule<false, A>;

    Aliased Type§

    struct FreeModule<A> {
    +    algebra: Arc<A, Global>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String, Global>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +}

    Fields§

    §algebra: Arc<A, Global>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String, Global>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( + &self, + degree: i32, + num_gens: usize, + names: Option<Vec<String>> +)

    source

    pub fn internal_generator_offset( + &self, + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( + &self, + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    +
    source

    pub fn generator_offset( + &self, + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn operation_generator_to_index( + &self, + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( + &self, + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + &self, + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that +represents the terms that correspond to the specified generator.

    +
    source

    pub fn iter_slices<'a>( + &'a self, + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. +Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices +that are zero length.

    +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn act( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> +)

    The length of input need not be equal to the dimension of the module in said degree. +Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn act_by_element_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/free_module/type.UnstableFreeModule.html b/docs/algebra/module/free_module/type.UnstableFreeModule.html index a7f1f9bdc..921353b7c 100644 --- a/docs/algebra/module/free_module/type.UnstableFreeModule.html +++ b/docs/algebra/module/free_module/type.UnstableFreeModule.html @@ -1,4 +1,4 @@ -UnstableFreeModule in algebra::module::free_module - Rust +UnstableFreeModule in algebra::module::free_module - Rust @@ -23,4 +23,100 @@ }); -
    pub type UnstableFreeModule<A> = MuFreeModule<true, A>;
    \ No newline at end of file +
    pub type UnstableFreeModule<A> = MuFreeModule<true, A>;

    Aliased Type§

    struct UnstableFreeModule<A> {
    +    algebra: Arc<A, Global>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String, Global>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +}

    Fields§

    §algebra: Arc<A, Global>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String, Global>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( + &self, + degree: i32, + num_gens: usize, + names: Option<Vec<String>> +)

    source

    pub fn internal_generator_offset( + &self, + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( + &self, + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    +
    source

    pub fn generator_offset( + &self, + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn operation_generator_to_index( + &self, + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( + &self, + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + &self, + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that +represents the terms that correspond to the specified generator.

    +
    source

    pub fn iter_slices<'a>( + &'a self, + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. +Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices +that are zero length.

    +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn act( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> +)

    The length of input need not be equal to the dimension of the module in said degree. +Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn act_by_element_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/hom_module/index.html b/docs/algebra/module/hom_module/index.html index 31bd2675d..19301d8ed 100644 --- a/docs/algebra/module/hom_module/index.html +++ b/docs/algebra/module/hom_module/index.html @@ -1,4 +1,4 @@ -algebra::module::hom_module - Rust +algebra::module::hom_module - Rust @@ -23,6 +23,6 @@ }); -

    Module algebra::module::hom_module

    source ·

    Structs

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/free_module_homomorphism/index.html b/docs/algebra/module/homomorphism/free_module_homomorphism/index.html index a238b5095..4258d5e72 100644 --- a/docs/algebra/module/homomorphism/free_module_homomorphism/index.html +++ b/docs/algebra/module/homomorphism/free_module_homomorphism/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism::free_module_homomorphism - Rust +algebra::module::homomorphism::free_module_homomorphism - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/free_module_homomorphism/struct.MuFreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/free_module_homomorphism/struct.MuFreeModuleHomomorphism.html index 50e3f1156..5ade5f6c2 100644 --- a/docs/algebra/module/homomorphism/free_module_homomorphism/struct.MuFreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/free_module_homomorphism/struct.MuFreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -MuFreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust +MuFreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust @@ -23,89 +23,89 @@ }); -
    pub struct MuFreeModuleHomomorphism<const U: bool, M: Module>where
    +
    pub struct MuFreeModuleHomomorphism<const U: bool, M: Module>where
         M::Algebra: MuAlgebra<U>,{
    -    source: Arc<MuFreeModule<U, M::Algebra>>,
    -    target: Arc<M>,
    -    outputs: OnceBiVec<Vec<FpVector>>,
    -    pub images: OnceBiVec<Option<Subspace>>,
    -    pub kernels: OnceBiVec<Option<Subspace>>,
    -    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    -    min_degree: i32,
    -    degree_shift: i32,
    -}

    Fields§

    §source: Arc<MuFreeModule<U, M::Algebra>>§target: Arc<M>§outputs: OnceBiVec<Vec<FpVector>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    -

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + outputs: OnceBiVec<Vec<FpVector>>, + pub images: OnceBiVec<Option<Subspace>>, + pub kernels: OnceBiVec<Option<Subspace>>, + pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>, + min_degree: i32, + degree_shift: i32, +}

    Fields§

    §source: Arc<MuFreeModule<U, M::Algebra>>§target: Arc<M>§outputs: OnceBiVec<Vec<FpVector>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source

    pub fn new( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( &self, - degree: i32, - outputs_vectors: Slice<'_> + degree: i32, + outputs_vectors: Slice<'_> )

    source

    pub fn add_generators_from_matrix_rows( &self, - degree: i32, - matrix: MatrixSliceMut<'_> + degree: i32, + matrix: MatrixSliceMut<'_> )

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist yet…

    -
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( +

    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( &self, - degree: i32, - rows: Vec<FpVector> -) -> Range<i32>

    Add the image of a bidegree out of order. See -OnceVec::push_ooo for details on return value.

    -
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    source

    pub fn apply_to_generator( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize -)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( &self, - degree: i32, - quasi_inverse: Option<QuasiInverse> -)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    -

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where - M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_index: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/free_module_homomorphism/type.FreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/free_module_homomorphism/type.FreeModuleHomomorphism.html index 508fc4b6a..3e68cd78e 100644 --- a/docs/algebra/module/homomorphism/free_module_homomorphism/type.FreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/free_module_homomorphism/type.FreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -FreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust +FreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust @@ -23,4 +23,74 @@ }); -
    pub type FreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<false, M>;
    \ No newline at end of file +
    pub type FreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<false, M>;

    Aliased Type§

    struct FreeModuleHomomorphism<M> {
    +    source: Arc<MuFreeModule<false, <M as Module>::Algebra>, Global>,
    +    target: Arc<M, Global>,
    +    outputs: OnceBiVec<Vec<FpVector, Global>>,
    +    pub images: OnceBiVec<Option<Subspace>>,
    +    pub kernels: OnceBiVec<Option<Subspace>>,
    +    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    +    min_degree: i32,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<MuFreeModule<false, <M as Module>::Algebra>, Global>§target: Arc<M, Global>§outputs: OnceBiVec<Vec<FpVector, Global>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source

    pub fn new( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + &self, + degree: i32, + outputs_vectors: Slice<'_> +)

    source

    pub fn add_generators_from_matrix_rows( + &self, + degree: i32, + matrix: MatrixSliceMut<'_> +)

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist +yet…

    +
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( + &self, + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    +
    source

    pub fn apply_to_generator( + &self, + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + &self, + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize +)

    Calling this function when input_idx < source().dimension(input_degree) results in +undefined behaviour. Implementations are encouraged to panic when this happens (this is +usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + &self, + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/free_module_homomorphism/type.UnstableFreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/free_module_homomorphism/type.UnstableFreeModuleHomomorphism.html index 4883232ba..c7b3efd5a 100644 --- a/docs/algebra/module/homomorphism/free_module_homomorphism/type.UnstableFreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/free_module_homomorphism/type.UnstableFreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -UnstableFreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust +UnstableFreeModuleHomomorphism in algebra::module::homomorphism::free_module_homomorphism - Rust @@ -23,4 +23,74 @@ }); -
    pub type UnstableFreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<true, M>;
    \ No newline at end of file +
    pub type UnstableFreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<true, M>;

    Aliased Type§

    struct UnstableFreeModuleHomomorphism<M> {
    +    source: Arc<MuFreeModule<true, <M as Module>::Algebra>, Global>,
    +    target: Arc<M, Global>,
    +    outputs: OnceBiVec<Vec<FpVector, Global>>,
    +    pub images: OnceBiVec<Option<Subspace>>,
    +    pub kernels: OnceBiVec<Option<Subspace>>,
    +    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    +    min_degree: i32,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<MuFreeModule<true, <M as Module>::Algebra>, Global>§target: Arc<M, Global>§outputs: OnceBiVec<Vec<FpVector, Global>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source

    pub fn new( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + &self, + degree: i32, + outputs_vectors: Slice<'_> +)

    source

    pub fn add_generators_from_matrix_rows( + &self, + degree: i32, + matrix: MatrixSliceMut<'_> +)

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist +yet…

    +
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( + &self, + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    +
    source

    pub fn apply_to_generator( + &self, + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + &self, + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize +)

    Calling this function when input_idx < source().dimension(input_degree) results in +undefined behaviour. Implementations are encouraged to panic when this happens (this is +usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + &self, + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/full_module_homomorphism/index.html b/docs/algebra/module/homomorphism/full_module_homomorphism/index.html index 30a2c62b9..41dc53357 100644 --- a/docs/algebra/module/homomorphism/full_module_homomorphism/index.html +++ b/docs/algebra/module/homomorphism/full_module_homomorphism/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism::full_module_homomorphism - Rust +algebra::module::homomorphism::full_module_homomorphism - Rust @@ -23,5 +23,5 @@ }); -

    Structs

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/generic_zero_homomorphism/index.html b/docs/algebra/module/homomorphism/generic_zero_homomorphism/index.html index 97d18386f..6fc75eed9 100644 --- a/docs/algebra/module/homomorphism/generic_zero_homomorphism/index.html +++ b/docs/algebra/module/homomorphism/generic_zero_homomorphism/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism::generic_zero_homomorphism - Rust +algebra::module::homomorphism::generic_zero_homomorphism - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/generic_zero_homomorphism/struct.GenericZeroHomomorphism.html b/docs/algebra/module/homomorphism/generic_zero_homomorphism/struct.GenericZeroHomomorphism.html index 25536bc4d..0a42634c0 100644 --- a/docs/algebra/module/homomorphism/generic_zero_homomorphism/struct.GenericZeroHomomorphism.html +++ b/docs/algebra/module/homomorphism/generic_zero_homomorphism/struct.GenericZeroHomomorphism.html @@ -1,4 +1,4 @@ -GenericZeroHomomorphism in algebra::module::homomorphism::generic_zero_homomorphism - Rust +GenericZeroHomomorphism in algebra::module::homomorphism::generic_zero_homomorphism - Rust @@ -23,37 +23,37 @@ }); -
    pub struct GenericZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>> {
    -    source: Arc<S>,
    -    target: Arc<T>,
    -    degree_shift: i32,
    -}

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32

    Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> GenericZeroHomomorphism<S, T>

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for GenericZeroHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element(&self, _: SliceMut<'_>, _: u32, _: i32, _: usize)

    Calling this function when input_idx < source().dimension(input_degree) results in +
    pub struct GenericZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>> {
    +    source: Arc<S>,
    +    target: Arc<T>,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32

    Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> GenericZeroHomomorphism<S, T>

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for GenericZeroHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element(&self, _: SliceMut<'_>, _: u32, _: i32, _: usize)

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    §

    impl<S, T> Send for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Sync for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Unpin for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    §

    impl<S, T> Send for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Sync for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Unpin for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/hom_pullback/index.html b/docs/algebra/module/homomorphism/hom_pullback/index.html index dfa6df115..5f7ea5fb6 100644 --- a/docs/algebra/module/homomorphism/hom_pullback/index.html +++ b/docs/algebra/module/homomorphism/hom_pullback/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism::hom_pullback - Rust +algebra::module::homomorphism::hom_pullback - Rust @@ -23,4 +23,4 @@ }); -

    Structs

    • Given a map $\mathtt{map}: A \to B$ and hom modules $\mathtt{source} = \Hom(B, X)$, $\mathtt{target} = \Hom(A, X)$, produce the induced pullback map $\Hom(B, X) \to \Hom(A, X)$.
    \ No newline at end of file +

    Structs

    • Given a map $\mathtt{map}: A \to B$ and hom modules $\mathtt{source} = \Hom(B, X)$, $\mathtt{target} = \Hom(A, X)$, produce the induced pullback map $\Hom(B, X) \to \Hom(A, X)$.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/hom_pullback/struct.HomPullback.html b/docs/algebra/module/homomorphism/hom_pullback/struct.HomPullback.html index 2553f70ef..105a2e96d 100644 --- a/docs/algebra/module/homomorphism/hom_pullback/struct.HomPullback.html +++ b/docs/algebra/module/homomorphism/hom_pullback/struct.HomPullback.html @@ -1,4 +1,4 @@ -HomPullback in algebra::module::homomorphism::hom_pullback - Rust +HomPullback in algebra::module::homomorphism::hom_pullback - Rust @@ -23,51 +23,51 @@ }); -
    pub struct HomPullback<M: Module> {
    -    source: Arc<HomModule<M>>,
    -    target: Arc<HomModule<M>>,
    -    map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>,
    -    images: OnceBiVec<Subspace>,
    -    kernels: OnceBiVec<Subspace>,
    -    quasi_inverses: OnceBiVec<QuasiInverse>,
    +
    pub struct HomPullback<M: Module> {
    +    source: Arc<HomModule<M>>,
    +    target: Arc<HomModule<M>>,
    +    map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>,
    +    images: OnceBiVec<Subspace>,
    +    kernels: OnceBiVec<Subspace>,
    +    quasi_inverses: OnceBiVec<QuasiInverse>,
     }
    Expand description

    Given a map $\mathtt{map}: A \to B$ and hom modules $\mathtt{source} = \Hom(B, X)$, $\mathtt{target} = \Hom(A, X)$, produce the induced pullback map $\Hom(B, X) \to \Hom(A, X)$.

    -

    Fields§

    §source: Arc<HomModule<M>>§target: Arc<HomModule<M>>§map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>§images: OnceBiVec<Subspace>§kernels: OnceBiVec<Subspace>§quasi_inverses: OnceBiVec<QuasiInverse>

    Implementations§

    source§

    impl<M: Module> HomPullback<M>

    source

    pub fn new( - source: Arc<HomModule<M>>, - target: Arc<HomModule<M>>, - map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>> -) -> Self

    Trait Implementations§

    source§

    impl<M: Module> ModuleHomomorphism for HomPullback<M>

    Fields§

    §source: Arc<HomModule<M>>§target: Arc<HomModule<M>>§map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>§images: OnceBiVec<Subspace>§kernels: OnceBiVec<Subspace>§quasi_inverses: OnceBiVec<QuasiInverse>

    Implementations§

    source§

    impl<M: Module> HomPullback<M>

    source

    pub fn new( + source: Arc<HomModule<M>>, + target: Arc<HomModule<M>>, + map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>> +) -> Self

    Trait Implementations§

    source§

    impl<M: Module> ModuleHomomorphism for HomPullback<M>

    §

    type Source = HomModule<M>

    §

    type Target = HomModule<M>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn min_degree(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - fn_degree: i32, - fn_idx: usize + result: SliceMut<'_>, + coeff: u32, + fn_degree: i32, + fn_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomPullback<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomPullback<M>

    §

    impl<M> Sync for HomPullback<M>

    §

    impl<M> Unpin for HomPullback<M>

    §

    impl<M> UnwindSafe for HomPullback<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomPullback<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomPullback<M>

    §

    impl<M> Sync for HomPullback<M>

    §

    impl<M> Unpin for HomPullback<M>

    §

    impl<M> UnwindSafe for HomPullback<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/index.html b/docs/algebra/module/homomorphism/index.html index 8abac3e3d..e91fc8c56 100644 --- a/docs/algebra/module/homomorphism/index.html +++ b/docs/algebra/module/homomorphism/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism - Rust +algebra::module::homomorphism - Rust @@ -23,10 +23,10 @@ }); -

    Modules

    Structs

    Type Aliases

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/quotient_homomorphism/index.html b/docs/algebra/module/homomorphism/quotient_homomorphism/index.html index 51364565a..854800ede 100644 --- a/docs/algebra/module/homomorphism/quotient_homomorphism/index.html +++ b/docs/algebra/module/homomorphism/quotient_homomorphism/index.html @@ -1,4 +1,4 @@ -algebra::module::homomorphism::quotient_homomorphism - Rust +algebra::module::homomorphism::quotient_homomorphism - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphism.html b/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphism.html index 1b92709b7..ae293a55f 100644 --- a/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphism.html +++ b/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphism.html @@ -1,4 +1,4 @@ -QuotientHomomorphism in algebra::module::homomorphism::quotient_homomorphism - Rust +QuotientHomomorphism in algebra::module::homomorphism::quotient_homomorphism - Rust @@ -23,49 +23,49 @@ }); -
    pub struct QuotientHomomorphism<F: ModuleHomomorphism> {
    -    f: Arc<F>,
    -    s: Arc<QuotientModule<F::Source>>,
    -    t: Arc<QuotientModule<F::Target>>,
    -}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>§t: Arc<QuotientModule<F::Target>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphism<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = QuotientModule<<F as ModuleHomomorphism>::Target>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( +
    pub struct QuotientHomomorphism<F: ModuleHomomorphism> {
    +    f: Arc<F>,
    +    s: Arc<QuotientModule<F::Source>>,
    +    t: Arc<QuotientModule<F::Target>>,
    +}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>§t: Arc<QuotientModule<F::Target>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphism<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = QuotientModule<<F as ModuleHomomorphism>::Target>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphismSource.html b/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphismSource.html index 714724ed9..57b0bfd8b 100644 --- a/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphismSource.html +++ b/docs/algebra/module/homomorphism/quotient_homomorphism/struct.QuotientHomomorphismSource.html @@ -1,4 +1,4 @@ -QuotientHomomorphismSource in algebra::module::homomorphism::quotient_homomorphism - Rust +QuotientHomomorphismSource in algebra::module::homomorphism::quotient_homomorphism - Rust @@ -23,42 +23,42 @@ }); -
    pub struct QuotientHomomorphismSource<F: ModuleHomomorphism> {
    -    f: Arc<F>,
    -    s: Arc<QuotientModule<F::Source>>,
    -}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphismSource<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = <F as ModuleHomomorphism>::Target

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( +
    pub struct QuotientHomomorphismSource<F: ModuleHomomorphism> {
    +    f: Arc<F>,
    +    s: Arc<QuotientModule<F::Source>>,
    +}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphismSource<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = <F as ModuleHomomorphism>::Target

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.FullModuleHomomorphism.html b/docs/algebra/module/homomorphism/struct.FullModuleHomomorphism.html index a0fc561aa..8390c55cd 100644 --- a/docs/algebra/module/homomorphism/struct.FullModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/struct.FullModuleHomomorphism.html @@ -1,4 +1,4 @@ -FullModuleHomomorphism in algebra::module::homomorphism - Rust +FullModuleHomomorphism in algebra::module::homomorphism - Rust @@ -23,69 +23,69 @@ }); -
    pub struct FullModuleHomomorphism<S: Module, T: Module<Algebra = S::Algebra> = S> {
    -    source: Arc<S>,
    -    target: Arc<T>,
    -    degree_shift: i32,
    -    matrices: OnceBiVec<Matrix>,
    -    quasi_inverses: OnceBiVec<QuasiInverse>,
    -    kernels: OnceBiVec<Subspace>,
    -    images: OnceBiVec<Subspace>,
    +
    pub struct FullModuleHomomorphism<S: Module, T: Module<Algebra = S::Algebra> = S> {
    +    source: Arc<S>,
    +    target: Arc<T>,
    +    degree_shift: i32,
    +    matrices: OnceBiVec<Matrix>,
    +    quasi_inverses: OnceBiVec<QuasiInverse>,
    +    kernels: OnceBiVec<Subspace>,
    +    images: OnceBiVec<Subspace>,
     }
    Expand description

    A ModuleHomomorphism that simply records the matrix of the homomorphism in every degree. This is currently rather bare bones.

    -

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32§matrices: OnceBiVec<Matrix>

    The matrices of the module homomorphism. Unspecified matrices are assumed to be zero

    -
    §quasi_inverses: OnceBiVec<QuasiInverse>§kernels: OnceBiVec<Subspace>§images: OnceBiVec<Subspace>

    Implementations§

    source§

    impl<A, S, T> FullModuleHomomorphism<S, T>where +

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32§matrices: OnceBiVec<Matrix>

    The matrices of the module homomorphism. Unspecified matrices are assumed to be zero

    +
    §quasi_inverses: OnceBiVec<QuasiInverse>§kernels: OnceBiVec<Subspace>§images: OnceBiVec<Subspace>

    Implementations§

    source§

    impl<A, S, T> FullModuleHomomorphism<S, T>where A: Algebra, S: Module<Algebra = A>, - T: Module<Algebra = A>,

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    source

    pub fn from_matrices( - source: Arc<S>, - target: Arc<T>, - degree_shift: i32, - matrices: BiVec<Matrix> -) -> Self

    source

    pub fn from<F: ModuleHomomorphism<Source = S, Target = T>>(f: &F) -> Self

    source

    pub fn replace_source<S_: Module<Algebra = A>>( + T: Module<Algebra = A>,

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    source

    pub fn from_matrices( + source: Arc<S>, + target: Arc<T>, + degree_shift: i32, + matrices: BiVec<Matrix> +) -> Self

    source

    pub fn from<F: ModuleHomomorphism<Source = S, Target = T>>(f: &F) -> Self

    source

    pub fn replace_source<S_: Module<Algebra = A>>( self, - source: Arc<S_> + source: Arc<S_> ) -> FullModuleHomomorphism<S_, T>

    This function replaces the source of the ModuleHomomorphism and does nothing else. This is useful for changing the type of the source (but not the mathematical module itself).

    source

    pub fn replace_target<T_: Module<Algebra = A>>( self, - target: Arc<T_> + target: Arc<T_> ) -> FullModuleHomomorphism<S, T_>

    See replace_source

    -

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> Clone for FullModuleHomomorphism<S, T>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<S: Module> IdentityHomomorphism<S> for FullModuleHomomorphism<S, S>

    source§

    fn identity_homomorphism(source: Arc<S>) -> Self

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for FullModuleHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( +

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> Clone for FullModuleHomomorphism<S, T>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<S: Module> IdentityHomomorphism<S> for FullModuleHomomorphism<S, S>

    source§

    fn identity_homomorphism(source: Arc<S>) -> Self

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for FullModuleHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for FullModuleHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for FullModuleHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    §

    impl<S, T> Send for FullModuleHomomorphism<S, T>

    §

    impl<S, T> Sync for FullModuleHomomorphism<S, T>

    §

    impl<S, T> Unpin for FullModuleHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for FullModuleHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for FullModuleHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for FullModuleHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    §

    impl<S, T> Send for FullModuleHomomorphism<S, T>

    §

    impl<S, T> Sync for FullModuleHomomorphism<S, T>

    §

    impl<S, T> Unpin for FullModuleHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for FullModuleHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.GenericZeroHomomorphism.html b/docs/algebra/module/homomorphism/struct.GenericZeroHomomorphism.html index 7cd0cff58..f2f3ad5e2 100644 --- a/docs/algebra/module/homomorphism/struct.GenericZeroHomomorphism.html +++ b/docs/algebra/module/homomorphism/struct.GenericZeroHomomorphism.html @@ -1,4 +1,4 @@ -GenericZeroHomomorphism in algebra::module::homomorphism - Rust +GenericZeroHomomorphism in algebra::module::homomorphism - Rust @@ -23,37 +23,37 @@ }); -
    pub struct GenericZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>> {
    -    source: Arc<S>,
    -    target: Arc<T>,
    -    degree_shift: i32,
    -}

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32

    Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> GenericZeroHomomorphism<S, T>

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for GenericZeroHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element(&self, _: SliceMut<'_>, _: u32, _: i32, _: usize)

    Calling this function when input_idx < source().dimension(input_degree) results in +
    pub struct GenericZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>> {
    +    source: Arc<S>,
    +    target: Arc<T>,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<S>§target: Arc<T>§degree_shift: i32

    Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> GenericZeroHomomorphism<S, T>

    source

    pub fn new(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Trait Implementations§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ModuleHomomorphism for GenericZeroHomomorphism<S, T>

    §

    type Source = S

    §

    type Target = T

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element(&self, _: SliceMut<'_>, _: u32, _: i32, _: usize)

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    §

    impl<S, T> Send for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Sync for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Unpin for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where - S: RefUnwindSafe, - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    fn zero_homomorphism(source: Arc<S>, target: Arc<T>, degree_shift: i32) -> Self

    Auto Trait Implementations§

    §

    impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    §

    impl<S, T> Send for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Sync for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> Unpin for GenericZeroHomomorphism<S, T>

    §

    impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where + S: RefUnwindSafe, + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.HomPullback.html b/docs/algebra/module/homomorphism/struct.HomPullback.html index a625ab5ce..66f94f252 100644 --- a/docs/algebra/module/homomorphism/struct.HomPullback.html +++ b/docs/algebra/module/homomorphism/struct.HomPullback.html @@ -1,4 +1,4 @@ -HomPullback in algebra::module::homomorphism - Rust +HomPullback in algebra::module::homomorphism - Rust @@ -23,51 +23,51 @@ }); -
    pub struct HomPullback<M: Module> {
    -    source: Arc<HomModule<M>>,
    -    target: Arc<HomModule<M>>,
    -    map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>,
    -    images: OnceBiVec<Subspace>,
    -    kernels: OnceBiVec<Subspace>,
    -    quasi_inverses: OnceBiVec<QuasiInverse>,
    +
    pub struct HomPullback<M: Module> {
    +    source: Arc<HomModule<M>>,
    +    target: Arc<HomModule<M>>,
    +    map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>,
    +    images: OnceBiVec<Subspace>,
    +    kernels: OnceBiVec<Subspace>,
    +    quasi_inverses: OnceBiVec<QuasiInverse>,
     }
    Expand description

    Given a map $\mathtt{map}: A \to B$ and hom modules $\mathtt{source} = \Hom(B, X)$, $\mathtt{target} = \Hom(A, X)$, produce the induced pullback map $\Hom(B, X) \to \Hom(A, X)$.

    -

    Fields§

    §source: Arc<HomModule<M>>§target: Arc<HomModule<M>>§map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>§images: OnceBiVec<Subspace>§kernels: OnceBiVec<Subspace>§quasi_inverses: OnceBiVec<QuasiInverse>

    Implementations§

    source§

    impl<M: Module> HomPullback<M>

    source

    pub fn new( - source: Arc<HomModule<M>>, - target: Arc<HomModule<M>>, - map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>> -) -> Self

    Trait Implementations§

    source§

    impl<M: Module> ModuleHomomorphism for HomPullback<M>

    Fields§

    §source: Arc<HomModule<M>>§target: Arc<HomModule<M>>§map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>>§images: OnceBiVec<Subspace>§kernels: OnceBiVec<Subspace>§quasi_inverses: OnceBiVec<QuasiInverse>

    Implementations§

    source§

    impl<M: Module> HomPullback<M>

    source

    pub fn new( + source: Arc<HomModule<M>>, + target: Arc<HomModule<M>>, + map: Arc<FreeModuleHomomorphism<FreeModule<M::Algebra>>> +) -> Self

    Trait Implementations§

    source§

    impl<M: Module> ModuleHomomorphism for HomPullback<M>

    §

    type Source = HomModule<M>

    §

    type Target = HomModule<M>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn min_degree(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - fn_degree: i32, - fn_idx: usize + result: SliceMut<'_>, + coeff: u32, + fn_degree: i32, + fn_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomPullback<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomPullback<M>

    §

    impl<M> Sync for HomPullback<M>

    §

    impl<M> Unpin for HomPullback<M>

    §

    impl<M> UnwindSafe for HomPullback<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomPullback<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomPullback<M>

    §

    impl<M> Sync for HomPullback<M>

    §

    impl<M> Unpin for HomPullback<M>

    §

    impl<M> UnwindSafe for HomPullback<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.MuFreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/struct.MuFreeModuleHomomorphism.html index 829cdf3f0..92dd78fa1 100644 --- a/docs/algebra/module/homomorphism/struct.MuFreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/struct.MuFreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -MuFreeModuleHomomorphism in algebra::module::homomorphism - Rust +MuFreeModuleHomomorphism in algebra::module::homomorphism - Rust @@ -23,89 +23,89 @@ }); -
    pub struct MuFreeModuleHomomorphism<const U: bool, M: Module>where
    +
    pub struct MuFreeModuleHomomorphism<const U: bool, M: Module>where
         M::Algebra: MuAlgebra<U>,{
    -    source: Arc<MuFreeModule<U, M::Algebra>>,
    -    target: Arc<M>,
    -    outputs: OnceBiVec<Vec<FpVector>>,
    -    pub images: OnceBiVec<Option<Subspace>>,
    -    pub kernels: OnceBiVec<Option<Subspace>>,
    -    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    -    min_degree: i32,
    -    degree_shift: i32,
    -}

    Fields§

    §source: Arc<MuFreeModule<U, M::Algebra>>§target: Arc<M>§outputs: OnceBiVec<Vec<FpVector>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    -

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + outputs: OnceBiVec<Vec<FpVector>>, + pub images: OnceBiVec<Option<Subspace>>, + pub kernels: OnceBiVec<Option<Subspace>>, + pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>, + min_degree: i32, + degree_shift: i32, +}

    Fields§

    §source: Arc<MuFreeModule<U, M::Algebra>>§target: Arc<M>§outputs: OnceBiVec<Vec<FpVector>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source

    pub fn new( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( &self, - degree: i32, - outputs_vectors: Slice<'_> + degree: i32, + outputs_vectors: Slice<'_> )

    source

    pub fn add_generators_from_matrix_rows( &self, - degree: i32, - matrix: MatrixSliceMut<'_> + degree: i32, + matrix: MatrixSliceMut<'_> )

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist yet…

    -
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( +

    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( &self, - degree: i32, - rows: Vec<FpVector> -) -> Range<i32>

    Add the image of a bidegree out of order. See -OnceVec::push_ooo for details on return value.

    -
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    source

    pub fn apply_to_generator( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize -)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( &self, - degree: i32, - quasi_inverse: Option<QuasiInverse> -)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    -

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where - M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_index: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>

    §

    impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.QuotientHomomorphism.html b/docs/algebra/module/homomorphism/struct.QuotientHomomorphism.html index f1185c6fd..f67c32679 100644 --- a/docs/algebra/module/homomorphism/struct.QuotientHomomorphism.html +++ b/docs/algebra/module/homomorphism/struct.QuotientHomomorphism.html @@ -1,4 +1,4 @@ -QuotientHomomorphism in algebra::module::homomorphism - Rust +QuotientHomomorphism in algebra::module::homomorphism - Rust @@ -23,49 +23,49 @@ }); -
    pub struct QuotientHomomorphism<F: ModuleHomomorphism> {
    -    f: Arc<F>,
    -    s: Arc<QuotientModule<F::Source>>,
    -    t: Arc<QuotientModule<F::Target>>,
    -}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>§t: Arc<QuotientModule<F::Target>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphism<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = QuotientModule<<F as ModuleHomomorphism>::Target>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( +
    pub struct QuotientHomomorphism<F: ModuleHomomorphism> {
    +    f: Arc<F>,
    +    s: Arc<QuotientModule<F::Source>>,
    +    t: Arc<QuotientModule<F::Target>>,
    +}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>§t: Arc<QuotientModule<F::Target>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphism<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = QuotientModule<<F as ModuleHomomorphism>::Target>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/struct.QuotientHomomorphismSource.html b/docs/algebra/module/homomorphism/struct.QuotientHomomorphismSource.html index 14b95325c..b6c897a0d 100644 --- a/docs/algebra/module/homomorphism/struct.QuotientHomomorphismSource.html +++ b/docs/algebra/module/homomorphism/struct.QuotientHomomorphismSource.html @@ -1,4 +1,4 @@ -QuotientHomomorphismSource in algebra::module::homomorphism - Rust +QuotientHomomorphismSource in algebra::module::homomorphism - Rust @@ -23,42 +23,42 @@ }); -
    pub struct QuotientHomomorphismSource<F: ModuleHomomorphism> {
    -    f: Arc<F>,
    -    s: Arc<QuotientModule<F::Source>>,
    -}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphismSource<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = <F as ModuleHomomorphism>::Target

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( +
    pub struct QuotientHomomorphismSource<F: ModuleHomomorphism> {
    +    f: Arc<F>,
    +    s: Arc<QuotientModule<F::Source>>,
    +}

    Fields§

    §f: Arc<F>§s: Arc<QuotientModule<F::Source>>

    Implementations§

    Trait Implementations§

    source§

    impl<F: ModuleHomomorphism> ModuleHomomorphism for QuotientHomomorphismSource<F>

    §

    type Source = QuotientModule<<F as ModuleHomomorphism>::Source>

    §

    type Target = <F as ModuleHomomorphism>::Target

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is -usually the case because of out-of-bounds errors.
    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( +usually the case because of out-of-bounds errors.

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns -it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was -successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool
    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/trait.IdentityHomomorphism.html b/docs/algebra/module/homomorphism/trait.IdentityHomomorphism.html index 13c7f7d40..4ac7d5648 100644 --- a/docs/algebra/module/homomorphism/trait.IdentityHomomorphism.html +++ b/docs/algebra/module/homomorphism/trait.IdentityHomomorphism.html @@ -1,4 +1,4 @@ -IdentityHomomorphism in algebra::module::homomorphism - Rust +IdentityHomomorphism in algebra::module::homomorphism - Rust @@ -23,7 +23,7 @@ }); -
    pub trait IdentityHomomorphism<S: Module>: ModuleHomomorphism<Source = S, Target = S> {
    +
    pub trait IdentityHomomorphism<S: Module>: ModuleHomomorphism<Source = S, Target = S> {
         // Required method
    -    fn identity_homomorphism(s: Arc<S>) -> Self;
    -}

    Required Methods§

    Implementors§

    \ No newline at end of file + fn identity_homomorphism(s: Arc<S>) -> Self; +}

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/trait.ModuleHomomorphism.html b/docs/algebra/module/homomorphism/trait.ModuleHomomorphism.html index 51571b476..043a7b67a 100644 --- a/docs/algebra/module/homomorphism/trait.ModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/trait.ModuleHomomorphism.html @@ -1,4 +1,4 @@ -ModuleHomomorphism in algebra::module::homomorphism - Rust +ModuleHomomorphism in algebra::module::homomorphism - Rust @@ -23,45 +23,45 @@ }); -
    pub trait ModuleHomomorphism: Send + Sync {
    +
    pub trait ModuleHomomorphism: Send + Sync {
         type Source: Module;
         type Target: Module<Algebra = <Self::Source as Module>::Algebra>;
     
     
    Show 15 methods // Required methods - fn source(&self) -> Arc<Self::Source>; - fn target(&self) -> Arc<Self::Target>; - fn degree_shift(&self) -> i32; + fn source(&self) -> Arc<Self::Source>; + fn target(&self) -> Arc<Self::Target>; + fn degree_shift(&self) -> i32; fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize ); // Provided methods - fn kernel(&self, degree: i32) -> Option<&Subspace> { ... } - fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse> { ... } - fn image(&self, degree: i32) -> Option<&Subspace> { ... } - fn compute_auxiliary_data_through_degree(&self, degree: i32) { ... } + fn kernel(&self, degree: i32) -> Option<&Subspace> { ... } + fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse> { ... } + fn image(&self, degree: i32) -> Option<&Subspace> { ... } + fn compute_auxiliary_data_through_degree(&self, degree: i32) { ... } fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> ) { ... } - fn prime(&self) -> ValidPrime { ... } - fn min_degree(&self) -> i32 { ... } - fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse) { ... } - fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32) { ... } - fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix { ... } + fn prime(&self) -> ValidPrime { ... } + fn min_degree(&self) -> i32 { ... } + fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse) { ... } + fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32) { ... } + fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix { ... } fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> - ) -> bool { ... } + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> + ) -> bool { ... }
    }
    Expand description

    Each ModuleHomomorphism may come with auxiliary data, namely the kernel, image and quasi_inverse at each degree (the quasi-inverse is a map that is a right inverse when restricted to the image). These are computed via @@ -70,33 +70,33 @@ ModuleHomomorphism::image.

    Note that an instance of a ModuleHomomorphism need not have the data available, even after compute_auxiliary_data_through_degree is invoked.

    -

    Required Associated Types§

    source

    type Source: Module

    source

    type Target: Module<Algebra = <Self::Source as Module>::Algebra>

    Required Methods§

    source

    fn source(&self) -> Arc<Self::Source>

    source

    fn target(&self) -> Arc<Self::Target>

    source

    fn degree_shift(&self) -> i32

    source

    fn apply_to_basis_element( +

    Required Associated Types§

    source

    type Source: Module

    source

    type Target: Module<Algebra = <Self::Source as Module>::Algebra>

    Required Methods§

    source

    fn source(&self) -> Arc<Self::Source>

    source

    fn target(&self) -> Arc<Self::Target>

    source

    fn degree_shift(&self) -> i32

    source

    fn apply_to_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input_idx: usize + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_idx: usize )

    Calling this function when input_idx < source().dimension(input_degree) results in undefined behaviour. Implementations are encouraged to panic when this happens (this is usually the case because of out-of-bounds errors.

    -

    Provided Methods§

    source

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source

    fn image(&self, degree: i32) -> Option<&Subspace>

    source

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source

    fn apply( +

    Provided Methods§

    source

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source

    fn image(&self, degree: i32) -> Option<&Subspace>

    source

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source

    fn apply( &self, - result: SliceMut<'_>, - coeff: u32, - input_degree: i32, - input: Slice<'_> -)

    source

    fn prime(&self) -> ValidPrime

    source

    fn min_degree(&self) -> i32

    source

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source

    fn prime(&self) -> ValidPrime

    source

    fn min_degree(&self) -> i32

    source

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns it in the order image, kernel, quasi_inverse

    -
    source

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix.

    +
    source

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix.

    The (sliced) dimensions of matrix must be equal to source_dimension x target_dimension

    -
    source

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.

    -
    source

    fn apply_quasi_inverse( +

    source

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.

    +
    source

    fn apply_quasi_inverse( &self, - result: SliceMut<'_>, - degree: i32, - input: Slice<'_> -) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was successful. This is required to either always succeed or always fail for each degree.

    -

    Implementors§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/trait.ZeroHomomorphism.html b/docs/algebra/module/homomorphism/trait.ZeroHomomorphism.html index 752c8e64d..0610d1720 100644 --- a/docs/algebra/module/homomorphism/trait.ZeroHomomorphism.html +++ b/docs/algebra/module/homomorphism/trait.ZeroHomomorphism.html @@ -1,4 +1,4 @@ -ZeroHomomorphism in algebra::module::homomorphism - Rust +ZeroHomomorphism in algebra::module::homomorphism - Rust @@ -23,8 +23,8 @@ }); -
    pub trait ZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>>: ModuleHomomorphism<Source = S, Target = T> {
    +
    pub trait ZeroHomomorphism<S: Module, T: Module<Algebra = S::Algebra>>: ModuleHomomorphism<Source = S, Target = T> {
         // Required method
    -    fn zero_homomorphism(s: Arc<S>, t: Arc<T>, degree_shift: i32) -> Self;
    -}

    Required Methods§

    source

    fn zero_homomorphism(s: Arc<S>, t: Arc<T>, degree_shift: i32) -> Self

    Implementors§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for FullModuleHomomorphism<S, T>

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + fn zero_homomorphism(s: Arc<S>, t: Arc<T>, degree_shift: i32) -> Self; +}

    Required Methods§

    source

    fn zero_homomorphism(s: Arc<S>, t: Arc<T>, degree_shift: i32) -> Self

    Implementors§

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for FullModuleHomomorphism<S, T>

    source§

    impl<S: Module, T: Module<Algebra = S::Algebra>> ZeroHomomorphism<S, T> for GenericZeroHomomorphism<S, T>

    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/type.FreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/type.FreeModuleHomomorphism.html index 7006e31ab..eac8ce7fa 100644 --- a/docs/algebra/module/homomorphism/type.FreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/type.FreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -FreeModuleHomomorphism in algebra::module::homomorphism - Rust +FreeModuleHomomorphism in algebra::module::homomorphism - Rust @@ -23,4 +23,74 @@ }); -
    pub type FreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<false, M>;
    \ No newline at end of file +
    pub type FreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<false, M>;

    Aliased Type§

    struct FreeModuleHomomorphism<M> {
    +    source: Arc<MuFreeModule<false, <M as Module>::Algebra>, Global>,
    +    target: Arc<M, Global>,
    +    outputs: OnceBiVec<Vec<FpVector, Global>>,
    +    pub images: OnceBiVec<Option<Subspace>>,
    +    pub kernels: OnceBiVec<Option<Subspace>>,
    +    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    +    min_degree: i32,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<MuFreeModule<false, <M as Module>::Algebra>, Global>§target: Arc<M, Global>§outputs: OnceBiVec<Vec<FpVector, Global>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source

    pub fn new( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + &self, + degree: i32, + outputs_vectors: Slice<'_> +)

    source

    pub fn add_generators_from_matrix_rows( + &self, + degree: i32, + matrix: MatrixSliceMut<'_> +)

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist +yet…

    +
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( + &self, + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    +
    source

    pub fn apply_to_generator( + &self, + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + &self, + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize +)

    Calling this function when input_idx < source().dimension(input_degree) results in +undefined behaviour. Implementations are encouraged to panic when this happens (this is +usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + &self, + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/homomorphism/type.UnstableFreeModuleHomomorphism.html b/docs/algebra/module/homomorphism/type.UnstableFreeModuleHomomorphism.html index bda5ae8dd..9bde42ce0 100644 --- a/docs/algebra/module/homomorphism/type.UnstableFreeModuleHomomorphism.html +++ b/docs/algebra/module/homomorphism/type.UnstableFreeModuleHomomorphism.html @@ -1,4 +1,4 @@ -UnstableFreeModuleHomomorphism in algebra::module::homomorphism - Rust +UnstableFreeModuleHomomorphism in algebra::module::homomorphism - Rust @@ -23,4 +23,74 @@ }); -
    pub type UnstableFreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<true, M>;
    \ No newline at end of file +
    pub type UnstableFreeModuleHomomorphism<M> = MuFreeModuleHomomorphism<true, M>;

    Aliased Type§

    struct UnstableFreeModuleHomomorphism<M> {
    +    source: Arc<MuFreeModule<true, <M as Module>::Algebra>, Global>,
    +    target: Arc<M, Global>,
    +    outputs: OnceBiVec<Vec<FpVector, Global>>,
    +    pub images: OnceBiVec<Option<Subspace>>,
    +    pub kernels: OnceBiVec<Option<Subspace>>,
    +    pub quasi_inverses: OnceBiVec<Option<QuasiInverse>>,
    +    min_degree: i32,
    +    degree_shift: i32,
    +}

    Fields§

    §source: Arc<MuFreeModule<true, <M as Module>::Algebra>, Global>§target: Arc<M, Global>§outputs: OnceBiVec<Vec<FpVector, Global>>§images: OnceBiVec<Option<Subspace>>§kernels: OnceBiVec<Option<Subspace>>§quasi_inverses: OnceBiVec<Option<QuasiInverse>>§min_degree: i32§degree_shift: i32

    degree shift, such that ouptut_degree = input_degree - degree_shift

    +

    Implementations§

    source§

    impl<const U: bool, M: Module> MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source

    pub fn new( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    source

    pub fn degree_shift(&self) -> i32

    source

    pub fn min_degree(&self) -> i32

    source

    pub fn next_degree(&self) -> i32

    source

    pub fn output(&self, generator_degree: i32, generator_index: usize) -> &FpVector

    source

    pub fn differential_density(&self, degree: i32) -> f32

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn add_generators_from_big_vector( + &self, + degree: i32, + outputs_vectors: Slice<'_> +)

    source

    pub fn add_generators_from_matrix_rows( + &self, + degree: i32, + matrix: MatrixSliceMut<'_> +)

    A MatrixSlice will do but there is no applicaiton of this struct, so it doesn’t exist +yet…

    +
    source

    pub fn add_generators_from_rows(&self, degree: i32, rows: Vec<FpVector>)

    source

    pub fn add_generators_from_rows_ooo( + &self, + degree: i32, + rows: Vec<FpVector> +) -> Range<i32>

    Add the image of a bidegree out of order. See +OnceVec::push_ooo for details on return value.

    +
    source

    pub fn ooo_outputs(&self) -> Vec<i32>

    List of outputs that have been added out of order

    +
    source

    pub fn apply_to_generator( + &self, + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)

    source

    pub fn set_image(&self, degree: i32, image: Option<Subspace>)

    source

    pub fn set_kernel(&self, degree: i32, kernel: Option<Subspace>)

    source

    pub fn set_quasi_inverse( + &self, + degree: i32, + quasi_inverse: Option<QuasiInverse> +)

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModuleHomomorphism<U, MuFreeModule<U, A>>

    source

    pub fn hom_k(&self, t: i32) -> Vec<Vec<u32>>

    Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, k) in source (N) degree t.

    +

    Trait Implementations§

    source§

    impl<const U: bool, M: Module> ModuleHomomorphism for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    §

    type Source = MuFreeModule<U, <M as Module>::Algebra>

    §

    type Target = M

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn degree_shift(&self) -> i32

    source§

    fn apply_to_basis_element( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input_index: usize +)

    Calling this function when input_idx < source().dimension(input_degree) results in +undefined behaviour. Implementations are encouraged to panic when this happens (this is +usually the case because of out-of-bounds errors.
    source§

    fn quasi_inverse(&self, degree: i32) -> Option<&QuasiInverse>

    source§

    fn kernel(&self, degree: i32) -> Option<&Subspace>

    source§

    fn image(&self, degree: i32) -> Option<&Subspace>

    source§

    fn compute_auxiliary_data_through_degree(&self, degree: i32)

    source§

    fn apply( + &self, + result: SliceMut<'_>, + coeff: u32, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn min_degree(&self) -> i32

    source§

    fn auxiliary_data(&self, degree: i32) -> (Subspace, Subspace, QuasiInverse)

    Compute the auxiliary data associated to the homomorphism at input degree degree. Returns +it in the order image, kernel, quasi_inverse
    source§

    fn get_matrix(&self, matrix: MatrixSliceMut<'_>, degree: i32)

    Write the matrix of the homomorphism at input degree degree to matrix. Read more
    source§

    fn get_partial_matrix(&self, degree: i32, inputs: &[usize]) -> Matrix

    Get the values of the homomorphism on the specified inputs to matrix.
    source§

    fn apply_quasi_inverse( + &self, + result: SliceMut<'_>, + degree: i32, + input: Slice<'_> +) -> bool

    Attempt to apply quasi inverse to the input. Returns whether the operation was +successful. This is required to either always succeed or always fail for each degree.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/index.html b/docs/algebra/module/index.html index 55b2550ac..ce0642f53 100644 --- a/docs/algebra/module/index.html +++ b/docs/algebra/module/index.html @@ -1,4 +1,4 @@ -algebra::module - Rust +algebra::module - Rust @@ -23,9 +23,9 @@ }); -

    Module algebra::module

    source ·

    Re-exports

    Modules

    Structs

    Type Aliases

    \ No newline at end of file diff --git a/docs/algebra/module/module_trait/index.html b/docs/algebra/module/module_trait/index.html index 00d41aef0..030dfa09b 100644 --- a/docs/algebra/module/module_trait/index.html +++ b/docs/algebra/module/module_trait/index.html @@ -1,4 +1,4 @@ -algebra::module::module_trait - Rust +algebra::module::module_trait - Rust @@ -23,6 +23,6 @@ }); -

    Structs

    Traits

    \ No newline at end of file + N: Module<Algebra = A>,
    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    §

    type Algebra = A

    source§

    impl<M: Module> Module for HomModule<M>

    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    \ No newline at end of file diff --git a/docs/algebra/module/quotient_module/index.html b/docs/algebra/module/quotient_module/index.html index 28b1a6169..22335170d 100644 --- a/docs/algebra/module/quotient_module/index.html +++ b/docs/algebra/module/quotient_module/index.html @@ -1,4 +1,4 @@ -algebra::module::quotient_module - Rust +algebra::module::quotient_module - Rust @@ -23,4 +23,4 @@ }); -

    Structs

    \ No newline at end of file +

    Structs

    \ No newline at end of file diff --git a/docs/algebra/module/quotient_module/struct.QuotientModule.html b/docs/algebra/module/quotient_module/struct.QuotientModule.html index cceb2d99f..98e5e650c 100644 --- a/docs/algebra/module/quotient_module/struct.QuotientModule.html +++ b/docs/algebra/module/quotient_module/struct.QuotientModule.html @@ -1,4 +1,4 @@ -QuotientModule in algebra::module::quotient_module - Rust +QuotientModule in algebra::module::quotient_module - Rust @@ -23,86 +23,86 @@ }); -
    pub struct QuotientModule<M: Module> {
    -    pub module: Arc<M>,
    -    pub subspaces: BiVec<Subspace>,
    -    pub basis_list: BiVec<Vec<usize>>,
    -    pub truncation: i32,
    +
    pub struct QuotientModule<M: Module> {
    +    pub module: Arc<M>,
    +    pub subspaces: BiVec<Subspace>,
    +    pub basis_list: BiVec<Vec<usize>>,
    +    pub truncation: i32,
     }
    Expand description

    A quotient of a module truncated below a fix degree.

    -

    Fields§

    §module: Arc<M>

    The underlying module

    -
    §subspaces: BiVec<Subspace>

    The subspaces that we quotient out by

    -
    §basis_list: BiVec<Vec<usize>>

    For each degree d, basis_list[d] is a list of basis elements of self.module that +

    Fields§

    §module: Arc<M>

    The underlying module

    +
    §subspaces: BiVec<Subspace>

    The subspaces that we quotient out by

    +
    §basis_list: BiVec<Vec<usize>>

    For each degree d, basis_list[d] is a list of basis elements of self.module that generates the quotient.

    -
    §truncation: i32

    Everything above this degree is quotiented out.

    -

    Implementations§

    source§

    impl<M: Module> QuotientModule<M>

    source

    pub fn new(module: Arc<M>, truncation: i32) -> Self

    source

    pub fn quotient(&mut self, degree: i32, element: Slice<'_>)

    source

    pub fn quotient_basis_elements( +

    §truncation: i32

    Everything above this degree is quotiented out.

    +

    Implementations§

    source§

    impl<M: Module> QuotientModule<M>

    source

    pub fn new(module: Arc<M>, truncation: i32) -> Self

    source

    pub fn quotient(&mut self, degree: i32, element: Slice<'_>)

    source

    pub fn quotient_basis_elements( &mut self, - degree: i32, - elements: impl Iterator<Item = usize> + degree: i32, + elements: impl Iterator<Item = usize> )

    source

    pub fn quotient_vectors( &mut self, - degree: i32, - vecs: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> + degree: i32, + vecs: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> )

    Arguments
    -
    source

    fn flush(&mut self, degree: i32)

    source

    pub fn quotient_all(&mut self, degree: i32)

    source

    pub fn act_on_original_basis( +

    source

    fn flush(&mut self, degree: i32)

    source

    pub fn quotient_all(&mut self, degree: i32)

    source

    pub fn act_on_original_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source

    pub fn reduce(&self, degree: i32, vec: SliceMut<'_>)

    source

    pub fn old_basis_to_new(&self, degree: i32, new: SliceMut<'_>, old: Slice<'_>)

    Trait Implementations§

    source§

    impl<M: Module> Display for QuotientModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source

    pub fn reduce(&self, degree: i32, vec: SliceMut<'_>)

    source

    pub fn old_basis_to_new(&self, degree: i32, new: SliceMut<'_>, old: Slice<'_>)

    Trait Implementations§

    source§

    impl<M: Module> Display for QuotientModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    fn zero_module(algebra: Arc<M::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for QuotientModule<M>where - M: RefUnwindSafe,

    §

    impl<M> Send for QuotientModule<M>

    §

    impl<M> Sync for QuotientModule<M>

    §

    impl<M> Unpin for QuotientModule<M>

    §

    impl<M> UnwindSafe for QuotientModule<M>where - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    fn zero_module(algebra: Arc<M::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for QuotientModule<M>where + M: RefUnwindSafe,

    §

    impl<M> Send for QuotientModule<M>

    §

    impl<M> Sync for QuotientModule<M>

    §

    impl<M> Unpin for QuotientModule<M>

    §

    impl<M> UnwindSafe for QuotientModule<M>where + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/rpn/fn.coef_adem.html b/docs/algebra/module/rpn/fn.coef_adem.html index 403e1f274..bf3f85e1f 100644 --- a/docs/algebra/module/rpn/fn.coef_adem.html +++ b/docs/algebra/module/rpn/fn.coef_adem.html @@ -1,4 +1,4 @@ -coef_adem in algebra::module::rpn - Rust +coef_adem in algebra::module::rpn - Rust @@ -23,4 +23,4 @@ }); -

    Function algebra::module::rpn::coef_adem

    source ·
    fn coef_adem(algebra: &AdemAlgebra, op_deg: i32, op_idx: usize, j: i32) -> bool
    \ No newline at end of file +

    Function algebra::module::rpn::coef_adem

    source ·
    fn coef_adem(algebra: &AdemAlgebra, op_deg: i32, op_idx: usize, j: i32) -> bool
    \ No newline at end of file diff --git a/docs/algebra/module/rpn/fn.coef_milnor.html b/docs/algebra/module/rpn/fn.coef_milnor.html index 6970a980d..b4acf89fc 100644 --- a/docs/algebra/module/rpn/fn.coef_milnor.html +++ b/docs/algebra/module/rpn/fn.coef_milnor.html @@ -1,4 +1,4 @@ -coef_milnor in algebra::module::rpn - Rust +coef_milnor in algebra::module::rpn - Rust @@ -23,9 +23,9 @@ }); -

    Function algebra::module::rpn::coef_milnor

    source ·
    fn coef_milnor(
    +

    Function algebra::module::rpn::coef_milnor

    source ·
    fn coef_milnor(
         algebra: &MilnorAlgebra,
    -    op_deg: i32,
    -    op_idx: usize,
    -    mod_degree: i32
    -) -> bool
    \ No newline at end of file + op_deg: i32, + op_idx: usize, + mod_degree: i32 +) -> bool
    \ No newline at end of file diff --git a/docs/algebra/module/rpn/index.html b/docs/algebra/module/rpn/index.html index ef8be7bae..db4913708 100644 --- a/docs/algebra/module/rpn/index.html +++ b/docs/algebra/module/rpn/index.html @@ -1,4 +1,4 @@ -algebra::module::rpn - Rust +algebra::module::rpn - Rust @@ -23,5 +23,5 @@ }); -

    Module algebra::module::rpn

    source ·

    Structs

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/steenrod_module/fn.from_json.html b/docs/algebra/module/steenrod_module/fn.from_json.html index 4e92556a2..06ff65a80 100644 --- a/docs/algebra/module/steenrod_module/fn.from_json.html +++ b/docs/algebra/module/steenrod_module/fn.from_json.html @@ -1,4 +1,4 @@ -from_json in algebra::module::steenrod_module - Rust +from_json in algebra::module::steenrod_module - Rust @@ -23,7 +23,7 @@ }); -
    pub fn from_json(
    -    algebra: Arc<SteenrodAlgebra>,
    -    json: &Value
    +
    pub fn from_json(
    +    algebra: Arc<SteenrodAlgebra>,
    +    json: &Value
     ) -> Result<SteenrodModule>
    \ No newline at end of file diff --git a/docs/algebra/module/steenrod_module/index.html b/docs/algebra/module/steenrod_module/index.html index e75b37899..2068cb1bb 100644 --- a/docs/algebra/module/steenrod_module/index.html +++ b/docs/algebra/module/steenrod_module/index.html @@ -1,4 +1,4 @@ -algebra::module::steenrod_module - Rust +algebra::module::steenrod_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/steenrod_module/json/fn.from_json.html b/docs/algebra/module/steenrod_module/json/fn.from_json.html index 9bc98b5d1..96cc401a4 100644 --- a/docs/algebra/module/steenrod_module/json/fn.from_json.html +++ b/docs/algebra/module/steenrod_module/json/fn.from_json.html @@ -1,4 +1,4 @@ -from_json in algebra::module::steenrod_module::json - Rust +from_json in algebra::module::steenrod_module::json - Rust @@ -23,7 +23,7 @@ }); -
    pub fn from_json(
    -    algebra: Arc<SteenrodAlgebra>,
    -    json: &Value
    +
    pub fn from_json(
    +    algebra: Arc<SteenrodAlgebra>,
    +    json: &Value
     ) -> Result<SteenrodModule>
    \ No newline at end of file diff --git a/docs/algebra/module/steenrod_module/json/index.html b/docs/algebra/module/steenrod_module/json/index.html index 2cddcdfbf..fd4c3fe83 100644 --- a/docs/algebra/module/steenrod_module/json/index.html +++ b/docs/algebra/module/steenrod_module/json/index.html @@ -1,4 +1,4 @@ -algebra::module::steenrod_module::json - Rust +algebra::module::steenrod_module::json - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/steenrod_module/type.SteenrodModule.html b/docs/algebra/module/steenrod_module/type.SteenrodModule.html index 17c3f5bfb..2ee929fc4 100644 --- a/docs/algebra/module/steenrod_module/type.SteenrodModule.html +++ b/docs/algebra/module/steenrod_module/type.SteenrodModule.html @@ -1,4 +1,4 @@ -SteenrodModule in algebra::module::steenrod_module - Rust +SteenrodModule in algebra::module::steenrod_module - Rust @@ -23,4 +23,45 @@ }); -
    pub type SteenrodModule = Box<dyn Module<Algebra = SteenrodAlgebra>>;

    Trait Implementations§

    source§

    impl ZeroModule for SteenrodModule

    source§

    fn zero_module(algebra: Arc<SteenrodAlgebra>, min_degree: i32) -> Self

    \ No newline at end of file +
    pub type SteenrodModule = Box<dyn Module<Algebra = SteenrodAlgebra>>;

    Aliased Type§

    struct SteenrodModule(Unique<dyn Module<Algebra = SteenrodAlgebra>>, Global);

    Fields§

    §0: Unique<dyn Module<Algebra = SteenrodAlgebra>>§1: Global

    Trait Implementations§

    1.0.0 · source§

    impl<T, A> Deref for Box<T, A>where + A: Allocator, + T: ?Sized,

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &T

    Dereferences the value.
    1.8.0 · source§

    impl<T> Error for Box<T, Global>where + T: Error,

    source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl<T: Module + ?Sized> Module for Box<T>where + Box<T>: Display + Any + Send + Sync,

    §

    type Algebra = <T as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> +)

    The length of input need not be equal to the dimension of the module in said degree. +Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn act_by_element_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl ZeroModule for SteenrodModule

    source§

    fn zero_module(algebra: Arc<SteenrodAlgebra>, min_degree: i32) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/struct.FDModule.html b/docs/algebra/module/struct.FDModule.html index 3fc91a257..a53d17f26 100644 --- a/docs/algebra/module/struct.FDModule.html +++ b/docs/algebra/module/struct.FDModule.html @@ -1,4 +1,4 @@ -FDModule in algebra::module - Rust +FDModule in algebra::module - Rust @@ -23,105 +23,105 @@ }); -

    Struct algebra::module::FDModule

    source ·
    pub struct FDModule<A: Algebra> {
    -    algebra: Arc<A>,
    -    pub name: String,
    -    graded_dimension: BiVec<usize>,
    -    gen_names: BiVec<Vec<String>>,
    -    actions: BiVec<BiVec<Vec<Vec<FpVector>>>>,
    -}

    Fields§

    §algebra: Arc<A>§name: String§graded_dimension: BiVec<usize>§gen_names: BiVec<Vec<String>>§actions: BiVec<BiVec<Vec<Vec<FpVector>>>>

    Implementations§

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn test_equal(&self, other: &Self) -> Result<(), String>

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn new( - algebra: Arc<A>, - name: String, - graded_dimension: BiVec<usize> -) -> Self

    source

    pub fn set_basis_element_name(&mut self, degree: i32, idx: usize, name: String)

    source

    fn allocate_actions( - algebra: &Arc<A>, - graded_dimension: &BiVec<usize> -) -> BiVec<BiVec<Vec<Vec<FpVector>>>>

    source

    pub fn add_generator(&mut self, degree: i32, name: String)

    source

    pub fn string_to_basis_element(&self, string: &str) -> Option<(i32, usize)>

    source

    pub fn set_action( +

    Struct algebra::module::FDModule

    source ·
    pub struct FDModule<A: Algebra> {
    +    algebra: Arc<A>,
    +    pub name: String,
    +    graded_dimension: BiVec<usize>,
    +    gen_names: BiVec<Vec<String>>,
    +    actions: BiVec<BiVec<Vec<Vec<FpVector>>>>,
    +}

    Fields§

    §algebra: Arc<A>§name: String§graded_dimension: BiVec<usize>§gen_names: BiVec<Vec<String>>§actions: BiVec<BiVec<Vec<Vec<FpVector>>>>

    Implementations§

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn test_equal(&self, other: &Self) -> Result<(), String>

    source§

    impl<A: Algebra> FiniteDimensionalModule<A>

    source

    pub fn new( + algebra: Arc<A>, + name: String, + graded_dimension: BiVec<usize> +) -> Self

    source

    pub fn set_basis_element_name(&mut self, degree: i32, idx: usize, name: String)

    source

    fn allocate_actions( + algebra: &Arc<A>, + graded_dimension: &BiVec<usize> +) -> BiVec<BiVec<Vec<Vec<FpVector>>>>

    source

    pub fn add_generator(&mut self, degree: i32, name: String)

    source

    pub fn string_to_basis_element(&self, string: &str) -> Option<(i32, usize)>

    source

    pub fn set_action( &mut self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize, - output: &[u32] -)

    source

    pub fn action( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize, + output: &[u32] +)

    source

    pub fn action( &self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize -) -> &FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    -
    source

    pub fn action_mut( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize +) -> &FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    +
    source

    pub fn action_mut( &mut self, - operation_degree: i32, - operation_idx: usize, - input_degree: i32, - input_idx: usize -) -> &mut FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    -
    source§

    impl<A: GeneratedAlgebra> FiniteDimensionalModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    source

    pub fn parse_action( + operation_degree: i32, + operation_idx: usize, + input_degree: i32, + input_idx: usize +) -> &mut FpVector

    This function will panic if you call it with input such that module.dimension(input_degree + operation_degree) = 0.

    +

    source§

    impl<A: GeneratedAlgebra> FiniteDimensionalModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    source

    pub fn parse_action( &mut self, - gen_to_idx: impl for<'a> Fn(&'a str) -> Result<(i32, usize)>, - entry: &str, - overwrite: bool -) -> Result<()>

    source

    pub fn check_validity( + gen_to_idx: impl for<'a> Fn(&'a str) -> Result<(i32, usize)>, + entry: &str, + overwrite: bool +) -> Result<()>

    source

    pub fn check_validity( &self, - input_deg: i32, - output_deg: i32 -) -> Result<(), ModuleFailedRelationError>

    source

    pub fn extend_actions(&mut self, input_deg: i32, output_deg: i32)

    source

    fn actions_to_json(&self) -> Value

    Trait Implementations§

    source§

    impl<A: Algebra> Clone for FiniteDimensionalModule<A>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Algebra> Display for FiniteDimensionalModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>

    source§

    fn from(module: &M) -> Self

    This should really by try_from but orphan rules prohibit this

    -
    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, _degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + input_deg: i32, + output_deg: i32 +) -> Result<(), ModuleFailedRelationError>

    source

    pub fn extend_actions(&mut self, input_deg: i32, output_deg: i32)

    source

    fn actions_to_json(&self) -> Value

    Trait Implementations§

    source§

    impl<A: Algebra> Clone for FiniteDimensionalModule<A>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Algebra> Display for FiniteDimensionalModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>

    source§

    fn from(module: &M) -> Self

    This should really by try_from but orphan rules prohibit this

    +
    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, _degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FiniteDimensionalModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FiniteDimensionalModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.FPModule.html b/docs/algebra/module/struct.FPModule.html index 67de18da5..7708d01be 100644 --- a/docs/algebra/module/struct.FPModule.html +++ b/docs/algebra/module/struct.FPModule.html @@ -1,4 +1,4 @@ -FPModule in algebra::module - Rust +FPModule in algebra::module - Rust @@ -23,67 +23,67 @@ }); -

    Struct algebra::module::FPModule

    source ·
    pub struct FPModule<A: Algebra> {
    -    name: String,
    -    min_degree: i32,
    -    generators: Arc<FreeModule<A>>,
    -    relations: Arc<FreeModule<A>>,
    -    map: Arc<FreeModuleHomomorphism<FreeModule<A>>>,
    -    index_table: OnceBiVec<FPMIndexTable>,
    -}

    Fields§

    §name: String§min_degree: i32§generators: Arc<FreeModule<A>>§relations: Arc<FreeModule<A>>§map: Arc<FreeModuleHomomorphism<FreeModule<A>>>§index_table: OnceBiVec<FPMIndexTable>

    Implementations§

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source

    pub fn generators(&self) -> Arc<FreeModule<A>>

    source

    pub fn add_generators(&mut self, degree: i32, gen_names: Vec<String>)

    source

    pub fn add_relations(&mut self, degree: i32, relations: Vec<FpVector>)

    source

    pub fn gen_idx_to_fp_idx(&self, degree: i32, idx: usize) -> isize

    source

    pub fn fp_idx_to_gen_idx(&self, degree: i32, idx: usize) -> usize

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    Trait Implementations§

    source§

    impl<A: Algebra> Display for FinitelyPresentedModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( +

    Struct algebra::module::FPModule

    source ·
    pub struct FPModule<A: Algebra> {
    +    name: String,
    +    min_degree: i32,
    +    generators: Arc<FreeModule<A>>,
    +    relations: Arc<FreeModule<A>>,
    +    map: Arc<FreeModuleHomomorphism<FreeModule<A>>>,
    +    index_table: OnceBiVec<FPMIndexTable>,
    +}

    Fields§

    §name: String§min_degree: i32§generators: Arc<FreeModule<A>>§relations: Arc<FreeModule<A>>§map: Arc<FreeModuleHomomorphism<FreeModule<A>>>§index_table: OnceBiVec<FPMIndexTable>

    Implementations§

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source

    pub fn generators(&self) -> Arc<FreeModule<A>>

    source

    pub fn add_generators(&mut self, degree: i32, gen_names: Vec<String>)

    source

    pub fn add_relations(&mut self, degree: i32, relations: Vec<FpVector>)

    source

    pub fn gen_idx_to_fp_idx(&self, degree: i32, idx: usize) -> isize

    source

    pub fn fp_idx_to_gen_idx(&self, degree: i32, idx: usize) -> usize

    source§

    impl<A: Algebra> FinitelyPresentedModule<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    Trait Implementations§

    source§

    impl<A: Algebra> Display for FinitelyPresentedModule<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>

    source§

    fn eq(&self, _other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FinitelyPresentedModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>

    source§

    fn eq(&self, _other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for FinitelyPresentedModule<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.GeneratorData.html b/docs/algebra/module/struct.GeneratorData.html index bf0931ead..b4bee98ad 100644 --- a/docs/algebra/module/struct.GeneratorData.html +++ b/docs/algebra/module/struct.GeneratorData.html @@ -1,4 +1,4 @@ -GeneratorData in algebra::module - Rust +GeneratorData in algebra::module - Rust @@ -23,18 +23,18 @@ }); -
    pub struct GeneratorData<const N: usize> {
    -    pub gen_deg: i32,
    -    pub start: [usize; N],
    -    pub end: [usize; N],
    -}

    Fields§

    §gen_deg: i32§start: [usize; N]§end: [usize; N]

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for GeneratorData<N>

    §

    impl<const N: usize> Send for GeneratorData<N>

    §

    impl<const N: usize> Sync for GeneratorData<N>

    §

    impl<const N: usize> Unpin for GeneratorData<N>

    §

    impl<const N: usize> UnwindSafe for GeneratorData<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct GeneratorData<const N: usize> {
    +    pub gen_deg: i32,
    +    pub start: [usize; N],
    +    pub end: [usize; N],
    +}

    Fields§

    §gen_deg: i32§start: [usize; N]§end: [usize; N]

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for GeneratorData<N>

    §

    impl<const N: usize> Send for GeneratorData<N>

    §

    impl<const N: usize> Sync for GeneratorData<N>

    §

    impl<const N: usize> Unpin for GeneratorData<N>

    §

    impl<const N: usize> UnwindSafe for GeneratorData<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.HomModule.html b/docs/algebra/module/struct.HomModule.html index 1950c46a9..63cab84be 100644 --- a/docs/algebra/module/struct.HomModule.html +++ b/docs/algebra/module/struct.HomModule.html @@ -1,4 +1,4 @@ -HomModule in algebra::module - Rust +HomModule in algebra::module - Rust @@ -23,64 +23,64 @@ }); -

    Struct algebra::module::HomModule

    source ·
    pub struct HomModule<M: Module> {
    -    algebra: Arc<Field>,
    -    source: Arc<FreeModule<M::Algebra>>,
    -    target: Arc<M>,
    -    pub block_structures: OnceBiVec<BlockStructure>,
    +

    Struct algebra::module::HomModule

    source ·
    pub struct HomModule<M: Module> {
    +    algebra: Arc<Field>,
    +    source: Arc<FreeModule<M::Algebra>>,
    +    target: Arc<M>,
    +    pub block_structures: OnceBiVec<BlockStructure>,
     }
    Expand description

    Given a module N and a free module M, this is the module Hom(M, N) as a module over the ground field. This requires N to be bounded, and is graded opposite to the usual grading so that Hom(M, N) is bounded below.

    -

    Fields§

    §algebra: Arc<Field>§source: Arc<FreeModule<M::Algebra>>§target: Arc<M>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<M: Module> HomModule<M>

    source

    pub fn new(source: Arc<FreeModule<M::Algebra>>, target: Arc<M>) -> Self

    source

    pub fn source(&self) -> Arc<FreeModule<M::Algebra>>

    source

    pub fn target(&self) -> Arc<M>

    Trait Implementations§

    source§

    impl<M: Module> Display for HomModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for HomModule<M>

    §

    type Algebra = Field

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( +

    Fields§

    §algebra: Arc<Field>§source: Arc<FreeModule<M::Algebra>>§target: Arc<M>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<M: Module> HomModule<M>

    source

    pub fn new(source: Arc<FreeModule<M::Algebra>>, target: Arc<M>) -> Self

    source

    pub fn source(&self) -> Arc<FreeModule<M::Algebra>>

    source

    pub fn target(&self) -> Arc<M>

    Trait Implementations§

    source§

    impl<M: Module> Display for HomModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for HomModule<M>

    §

    type Algebra = Field

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - _mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + _mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomModule<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomModule<M>

    §

    impl<M> Sync for HomModule<M>

    §

    impl<M> Unpin for HomModule<M>

    §

    impl<M> UnwindSafe for HomModule<M>where - M: RefUnwindSafe, - <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for HomModule<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    §

    impl<M> Send for HomModule<M>

    §

    impl<M> Sync for HomModule<M>

    §

    impl<M> Unpin for HomModule<M>

    §

    impl<M> UnwindSafe for HomModule<M>where + M: RefUnwindSafe, + <M as Module>::Algebra: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.ModuleFailedRelationError.html b/docs/algebra/module/struct.ModuleFailedRelationError.html index 2ae404b7c..e16ee7968 100644 --- a/docs/algebra/module/struct.ModuleFailedRelationError.html +++ b/docs/algebra/module/struct.ModuleFailedRelationError.html @@ -1,4 +1,4 @@ -ModuleFailedRelationError in algebra::module - Rust +ModuleFailedRelationError in algebra::module - Rust @@ -23,18 +23,18 @@ }); -
    pub struct ModuleFailedRelationError {
    -    pub relation: String,
    -    pub value: String,
    -}

    Fields§

    §relation: String§value: String

    Trait Implementations§

    source§

    impl Debug for ModuleFailedRelationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for ModuleFailedRelationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for ModuleFailedRelationError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct ModuleFailedRelationError {
    +    pub relation: String,
    +    pub value: String,
    +}

    Fields§

    §relation: String§value: String

    Trait Implementations§

    source§

    impl Debug for ModuleFailedRelationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for ModuleFailedRelationError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for ModuleFailedRelationError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.MuFreeModule.html b/docs/algebra/module/struct.MuFreeModule.html index e83cc30f1..d9446d846 100644 --- a/docs/algebra/module/struct.MuFreeModule.html +++ b/docs/algebra/module/struct.MuFreeModule.html @@ -1,4 +1,4 @@ -MuFreeModule in algebra::module - Rust +MuFreeModule in algebra::module - Rust @@ -23,121 +23,121 @@ }); -
    pub struct MuFreeModule<const U: bool, A: MuAlgebra<U>> {
    -    algebra: Arc<A>,
    -    name: String,
    -    min_degree: i32,
    -    gen_names: OnceBiVec<Vec<String>>,
    -    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    -    num_gens: OnceBiVec<usize>,
    -    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    -    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +
    pub struct MuFreeModule<const U: bool, A: MuAlgebra<U>> {
    +    algebra: Arc<A>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
     }
    Expand description

    A free module.

    A free module is uniquely determined by its list of generators. The generators are listed in increasing degrees, and the index in this list is the internal index.

    -

    Fields§

    §algebra: Arc<A>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    -
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    -

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( +

    Fields§

    §algebra: Arc<A>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( &self, - degree: i32, - num_gens: usize, - names: Option<Vec<String>> + degree: i32, + num_gens: usize, + names: Option<Vec<String>> )

    source

    pub fn internal_generator_offset( &self, - degree: i32, - internal_gen_idx: usize -) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with elements from the generator.

    -
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    -
    source

    pub fn iter_gen_offsets<const N: usize>( +

    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( &self, - degree: [i32; N] -) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    source

    pub fn generator_offset( &self, - degree: i32, - gen_deg: i32, - gen_idx: usize -) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with elements from the generator.

    source

    pub fn operation_generator_to_index( &self, - op_deg: i32, - op_idx: usize, - gen_deg: i32, - gen_idx: usize -) -> usize

    source

    pub fn index_to_op_gen( + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( &self, - degree: i32, - index: usize -) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( &self, - degree: i32, - gen_degree: i32, - gen_index: usize, - v: Slice<'a> -) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that represents the terms that correspond to the specified generator.

    source

    pub fn iter_slices<'a>( &'a self, - degree: i32, - slice: Slice<'a> -) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices that are zero length.

    -

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize )

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. -Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( +Missing entries are interpreted to be 0, while extra entries must be zero. Read more

    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, M: Module> ZeroHomomorphism<MuFreeModule<U, <M as Module>::Algebra>, M> for MuFreeModuleHomomorphism<U, M>where M::Algebra: MuAlgebra<U>,

    source§

    fn zero_homomorphism( - source: Arc<MuFreeModule<U, M::Algebra>>, - target: Arc<M>, - degree_shift: i32 -) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where - A: RefUnwindSafe,

    §

    impl<const U: bool, A> Send for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Sync for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Unpin for MuFreeModule<U, A>

    §

    impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where - A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: Arc<MuFreeModule<U, M::Algebra>>, + target: Arc<M>, + degree_shift: i32 +) -> Self
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where + A: RefUnwindSafe,

    §

    impl<const U: bool, A> Send for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Sync for MuFreeModule<U, A>

    §

    impl<const U: bool, A> Unpin for MuFreeModule<U, A>

    §

    impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where + A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.OperationGeneratorPair.html b/docs/algebra/module/struct.OperationGeneratorPair.html index 79aa15961..9575b45df 100644 --- a/docs/algebra/module/struct.OperationGeneratorPair.html +++ b/docs/algebra/module/struct.OperationGeneratorPair.html @@ -1,4 +1,4 @@ -OperationGeneratorPair in algebra::module - Rust +OperationGeneratorPair in algebra::module - Rust @@ -23,20 +23,20 @@ }); -
    pub struct OperationGeneratorPair {
    -    pub operation_degree: i32,
    -    pub operation_index: usize,
    -    pub generator_degree: i32,
    -    pub generator_index: usize,
    -}

    Fields§

    §operation_degree: i32§operation_index: usize§generator_degree: i32§generator_index: usize

    Trait Implementations§

    source§

    impl Clone for OperationGeneratorPair

    source§

    fn clone(&self) -> OperationGeneratorPair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OperationGeneratorPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct OperationGeneratorPair {
    +    pub operation_degree: i32,
    +    pub operation_index: usize,
    +    pub generator_degree: i32,
    +    pub generator_index: usize,
    +}

    Fields§

    §operation_degree: i32§operation_index: usize§generator_degree: i32§generator_index: usize

    Trait Implementations§

    source§

    impl Clone for OperationGeneratorPair

    source§

    fn clone(&self) -> OperationGeneratorPair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OperationGeneratorPair

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.QuotientModule.html b/docs/algebra/module/struct.QuotientModule.html index ed96568fd..5becc8474 100644 --- a/docs/algebra/module/struct.QuotientModule.html +++ b/docs/algebra/module/struct.QuotientModule.html @@ -1,4 +1,4 @@ -QuotientModule in algebra::module - Rust +QuotientModule in algebra::module - Rust @@ -23,86 +23,86 @@ }); -
    pub struct QuotientModule<M: Module> {
    -    pub module: Arc<M>,
    -    pub subspaces: BiVec<Subspace>,
    -    pub basis_list: BiVec<Vec<usize>>,
    -    pub truncation: i32,
    +
    pub struct QuotientModule<M: Module> {
    +    pub module: Arc<M>,
    +    pub subspaces: BiVec<Subspace>,
    +    pub basis_list: BiVec<Vec<usize>>,
    +    pub truncation: i32,
     }
    Expand description

    A quotient of a module truncated below a fix degree.

    -

    Fields§

    §module: Arc<M>

    The underlying module

    -
    §subspaces: BiVec<Subspace>

    The subspaces that we quotient out by

    -
    §basis_list: BiVec<Vec<usize>>

    For each degree d, basis_list[d] is a list of basis elements of self.module that +

    Fields§

    §module: Arc<M>

    The underlying module

    +
    §subspaces: BiVec<Subspace>

    The subspaces that we quotient out by

    +
    §basis_list: BiVec<Vec<usize>>

    For each degree d, basis_list[d] is a list of basis elements of self.module that generates the quotient.

    -
    §truncation: i32

    Everything above this degree is quotiented out.

    -

    Implementations§

    source§

    impl<M: Module> QuotientModule<M>

    source

    pub fn new(module: Arc<M>, truncation: i32) -> Self

    source

    pub fn quotient(&mut self, degree: i32, element: Slice<'_>)

    source

    pub fn quotient_basis_elements( +

    §truncation: i32

    Everything above this degree is quotiented out.

    +

    Implementations§

    source§

    impl<M: Module> QuotientModule<M>

    source

    pub fn new(module: Arc<M>, truncation: i32) -> Self

    source

    pub fn quotient(&mut self, degree: i32, element: Slice<'_>)

    source

    pub fn quotient_basis_elements( &mut self, - degree: i32, - elements: impl Iterator<Item = usize> + degree: i32, + elements: impl Iterator<Item = usize> )

    source

    pub fn quotient_vectors( &mut self, - degree: i32, - vecs: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> + degree: i32, + vecs: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> )

    Arguments
    -
    source

    fn flush(&mut self, degree: i32)

    source

    pub fn quotient_all(&mut self, degree: i32)

    source

    pub fn act_on_original_basis( +

    source

    fn flush(&mut self, degree: i32)

    source

    pub fn quotient_all(&mut self, degree: i32)

    source

    pub fn act_on_original_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source

    pub fn reduce(&self, degree: i32, vec: SliceMut<'_>)

    source

    pub fn old_basis_to_new(&self, degree: i32, new: SliceMut<'_>, old: Slice<'_>)

    Trait Implementations§

    source§

    impl<M: Module> Display for QuotientModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source

    pub fn reduce(&self, degree: i32, vec: SliceMut<'_>)

    source

    pub fn old_basis_to_new(&self, degree: i32, new: SliceMut<'_>, old: Slice<'_>)

    Trait Implementations§

    source§

    impl<M: Module> Display for QuotientModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    fn zero_module(algebra: Arc<M::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for QuotientModule<M>where - M: RefUnwindSafe,

    §

    impl<M> Send for QuotientModule<M>

    §

    impl<M> Sync for QuotientModule<M>

    §

    impl<M> Unpin for QuotientModule<M>

    §

    impl<M> UnwindSafe for QuotientModule<M>where - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    fn zero_module(algebra: Arc<M::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for QuotientModule<M>where + M: RefUnwindSafe,

    §

    impl<M> Send for QuotientModule<M>

    §

    impl<M> Sync for QuotientModule<M>

    §

    impl<M> Unpin for QuotientModule<M>

    §

    impl<M> UnwindSafe for QuotientModule<M>where + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.RealProjectiveSpace.html b/docs/algebra/module/struct.RealProjectiveSpace.html index 2e3425f5c..e926e3339 100644 --- a/docs/algebra/module/struct.RealProjectiveSpace.html +++ b/docs/algebra/module/struct.RealProjectiveSpace.html @@ -1,4 +1,4 @@ -RealProjectiveSpace in algebra::module - Rust +RealProjectiveSpace in algebra::module - Rust @@ -23,79 +23,79 @@ }); -
    pub struct RealProjectiveSpace<A: Algebra> {
    -    algebra: Arc<A>,
    -    pub min: i32,
    -    pub max: Option<i32>,
    -    pub clear_bottom: bool,
    +
    pub struct RealProjectiveSpace<A: Algebra> {
    +    algebra: Arc<A>,
    +    pub min: i32,
    +    pub max: Option<i32>,
    +    pub clear_bottom: bool,
     }
    Expand description

    This is $\mathbb{RP}_{\mathrm{min}}^{\mathrm{max}}$. The cohomology is the subquotient of $\mathbb{F}_2[x^\pm]$ given by elements of degree between min and max (inclusive)

    The clear_bottom option, if selected, mods out by the elements in the $A(2)$ submodule generated by degrees less than min. This is useful for approximating $\mathrm{tmf} \wedge \mathbb{RP}_{-\infty}^n$, c.f. Proposition 2.2 of Bailey and Ricka. Note that this quotient always has minimum degree -1 mod 8.

    -

    Fields§

    §algebra: Arc<A>§min: i32§max: Option<i32>§clear_bottom: bool

    Implementations§

    source§

    impl<A: Algebra> RealProjectiveSpace<A>where - for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source

    pub fn new( - algebra: Arc<A>, - min: i32, - max: Option<i32>, - clear_bottom: bool -) -> Self

    source§

    impl<A: Algebra> RealProjectiveSpace<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    Trait Implementations§

    source§

    impl<A: Algebra> Display for RealProjectiveSpace<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for RealProjectiveSpace<A>where - for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( +

    Fields§

    §algebra: Arc<A>§min: i32§max: Option<i32>§clear_bottom: bool

    Implementations§

    source§

    impl<A: Algebra> RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source

    pub fn new( + algebra: Arc<A>, + min: i32, + max: Option<i32>, + clear_bottom: bool +) -> Self

    source§

    impl<A: Algebra> RealProjectiveSpace<A>

    source

    pub fn from_json(algebra: Arc<A>, json: &Value) -> Result<Self>

    source

    pub fn to_json(&self, json: &mut Value)

    Trait Implementations§

    source§

    impl<A: Algebra> Display for RealProjectiveSpace<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A: Algebra> Module for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<RealProjectiveSpace<A>> for RealProjectiveSpace<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for RealProjectiveSpace<A>where - for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for RealProjectiveSpace<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<A: Algebra> PartialEq<RealProjectiveSpace<A>> for RealProjectiveSpace<A>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<A: Algebra> ZeroModule for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    source§

    impl<A: Algebra> Eq for RealProjectiveSpace<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.SuspensionModule.html b/docs/algebra/module/struct.SuspensionModule.html index b7718628e..0752840e1 100644 --- a/docs/algebra/module/struct.SuspensionModule.html +++ b/docs/algebra/module/struct.SuspensionModule.html @@ -1,4 +1,4 @@ -SuspensionModule in algebra::module - Rust +SuspensionModule in algebra::module - Rust @@ -23,57 +23,57 @@ }); -
    pub struct SuspensionModule<M: Module> {
    -    inner: Arc<M>,
    -    shift: i32,
    -}

    Fields§

    §inner: Arc<M>§shift: i32

    Implementations§

    source§

    impl<M: Module> SuspensionModule<M>

    source

    pub fn new(inner: Arc<M>, shift: i32) -> Self

    Trait Implementations§

    source§

    impl<M: Module> Display for SuspensionModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( +
    pub struct SuspensionModule<M: Module> {
    +    inner: Arc<M>,
    +    shift: i32,
    +}

    Fields§

    §inner: Arc<M>§shift: i32

    Implementations§

    source§

    impl<M: Module> SuspensionModule<M>

    source

    pub fn new(inner: Arc<M>, shift: i32) -> Self

    Trait Implementations§

    source§

    impl<M: Module> Display for SuspensionModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for SuspensionModule<M>where - M: RefUnwindSafe,

    §

    impl<M> Send for SuspensionModule<M>

    §

    impl<M> Sync for SuspensionModule<M>

    §

    impl<M> Unpin for SuspensionModule<M>

    §

    impl<M> UnwindSafe for SuspensionModule<M>where - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for SuspensionModule<M>where + M: RefUnwindSafe,

    §

    impl<M> Send for SuspensionModule<M>

    §

    impl<M> Sync for SuspensionModule<M>

    §

    impl<M> Unpin for SuspensionModule<M>

    §

    impl<M> UnwindSafe for SuspensionModule<M>where + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/struct.TensorModule.html b/docs/algebra/module/struct.TensorModule.html index 0c0518f3f..0a62464bb 100644 --- a/docs/algebra/module/struct.TensorModule.html +++ b/docs/algebra/module/struct.TensorModule.html @@ -1,4 +1,4 @@ -TensorModule in algebra::module - Rust +TensorModule in algebra::module - Rust @@ -23,77 +23,77 @@ }); -
    pub struct TensorModule<M: Module, N: Module<Algebra = M::Algebra>> {
    -    pub left: Arc<M>,
    -    pub right: Arc<N>,
    -    block_structures: OnceBiVec<BlockStructure>,
    -}

    Fields§

    §left: Arc<M>§right: Arc<N>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<A, M, N> TensorModule<M, N>where +
    pub struct TensorModule<M: Module, N: Module<Algebra = M::Algebra>> {
    +    pub left: Arc<M>,
    +    pub right: Arc<N>,
    +    block_structures: OnceBiVec<BlockStructure>,
    +}

    Fields§

    §left: Arc<M>§right: Arc<N>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<A, M, N> TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A>, - N: Module<Algebra = A>,

    source

    pub fn new(left: Arc<M>, right: Arc<N>) -> Self

    source

    pub fn seek_module_num(&self, degree: i32, index: usize) -> i32

    source

    pub fn offset(&self, degree: i32, left_degree: i32) -> usize

    source

    fn act_helper( + N: Module<Algebra = A>,

    source

    pub fn new(left: Arc<M>, right: Arc<N>) -> Self

    source

    pub fn seek_module_num(&self, degree: i32, index: usize) -> i32

    source

    pub fn offset(&self, degree: i32, left_degree: i32) -> usize

    source

    fn act_helper( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - input: Slice<'_> -)

    Trait Implementations§

    source§

    impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A, M, N> Module for TensorModule<M, N>where + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + input: Slice<'_> +)

    Trait Implementations§

    source§

    impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A, M, N> Module for TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A>, - N: Module<Algebra = A>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + N: Module<Algebra = A>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize )

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. -Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( +Missing entries are interpreted to be 0, while extra entries must be zero. Read more

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from Module::basis_element_to_string in the obvious way.
    source§

    impl<A, M, N> ZeroModule for TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A> + ZeroModule, - N: Module<Algebra = A> + ZeroModule,

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M, N> RefUnwindSafe for TensorModule<M, N>where - M: RefUnwindSafe, - N: RefUnwindSafe,

    §

    impl<M, N> Send for TensorModule<M, N>

    §

    impl<M, N> Sync for TensorModule<M, N>

    §

    impl<M, N> Unpin for TensorModule<M, N>

    §

    impl<M, N> UnwindSafe for TensorModule<M, N>where - M: RefUnwindSafe, - N: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + N: Module<Algebra = A> + ZeroModule,
    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M, N> RefUnwindSafe for TensorModule<M, N>where + M: RefUnwindSafe, + N: RefUnwindSafe,

    §

    impl<M, N> Send for TensorModule<M, N>

    §

    impl<M, N> Sync for TensorModule<M, N>

    §

    impl<M, N> Unpin for TensorModule<M, N>

    §

    impl<M, N> UnwindSafe for TensorModule<M, N>where + M: RefUnwindSafe, + N: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/suspension_module/index.html b/docs/algebra/module/suspension_module/index.html index d9f904f1b..38b28dd16 100644 --- a/docs/algebra/module/suspension_module/index.html +++ b/docs/algebra/module/suspension_module/index.html @@ -1,4 +1,4 @@ -algebra::module::suspension_module - Rust +algebra::module::suspension_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/suspension_module/struct.SuspensionModule.html b/docs/algebra/module/suspension_module/struct.SuspensionModule.html index 8f5da5964..143fcba22 100644 --- a/docs/algebra/module/suspension_module/struct.SuspensionModule.html +++ b/docs/algebra/module/suspension_module/struct.SuspensionModule.html @@ -1,4 +1,4 @@ -SuspensionModule in algebra::module::suspension_module - Rust +SuspensionModule in algebra::module::suspension_module - Rust @@ -23,57 +23,57 @@ }); -
    pub struct SuspensionModule<M: Module> {
    -    inner: Arc<M>,
    -    shift: i32,
    -}

    Fields§

    §inner: Arc<M>§shift: i32

    Implementations§

    source§

    impl<M: Module> SuspensionModule<M>

    source

    pub fn new(inner: Arc<M>, shift: i32) -> Self

    Trait Implementations§

    source§

    impl<M: Module> Display for SuspensionModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( +
    pub struct SuspensionModule<M: Module> {
    +    inner: Arc<M>,
    +    shift: i32,
    +}

    Fields§

    §inner: Arc<M>§shift: i32

    Implementations§

    source§

    impl<M: Module> SuspensionModule<M>

    source

    pub fn new(inner: Arc<M>, shift: i32) -> Self

    Trait Implementations§

    source§

    impl<M: Module> Display for SuspensionModule<M>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from -Module::basis_element_to_string in the obvious way.
    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for SuspensionModule<M>where - M: RefUnwindSafe,

    §

    impl<M> Send for SuspensionModule<M>

    §

    impl<M> Sync for SuspensionModule<M>

    §

    impl<M> Unpin for SuspensionModule<M>

    §

    impl<M> UnwindSafe for SuspensionModule<M>where - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for SuspensionModule<M>where + M: RefUnwindSafe,

    §

    impl<M> Send for SuspensionModule<M>

    §

    impl<M> Sync for SuspensionModule<M>

    §

    impl<M> Unpin for SuspensionModule<M>

    §

    impl<M> UnwindSafe for SuspensionModule<M>where + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/tensor_module/index.html b/docs/algebra/module/tensor_module/index.html index eb9cd8c32..109bea405 100644 --- a/docs/algebra/module/tensor_module/index.html +++ b/docs/algebra/module/tensor_module/index.html @@ -1,4 +1,4 @@ -algebra::module::tensor_module - Rust +algebra::module::tensor_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/tensor_module/struct.TensorModule.html b/docs/algebra/module/tensor_module/struct.TensorModule.html index 1b77eb996..55a0313c4 100644 --- a/docs/algebra/module/tensor_module/struct.TensorModule.html +++ b/docs/algebra/module/tensor_module/struct.TensorModule.html @@ -1,4 +1,4 @@ -TensorModule in algebra::module::tensor_module - Rust +TensorModule in algebra::module::tensor_module - Rust @@ -23,77 +23,77 @@ }); -
    pub struct TensorModule<M: Module, N: Module<Algebra = M::Algebra>> {
    -    pub left: Arc<M>,
    -    pub right: Arc<N>,
    -    block_structures: OnceBiVec<BlockStructure>,
    -}

    Fields§

    §left: Arc<M>§right: Arc<N>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<A, M, N> TensorModule<M, N>where +
    pub struct TensorModule<M: Module, N: Module<Algebra = M::Algebra>> {
    +    pub left: Arc<M>,
    +    pub right: Arc<N>,
    +    block_structures: OnceBiVec<BlockStructure>,
    +}

    Fields§

    §left: Arc<M>§right: Arc<N>§block_structures: OnceBiVec<BlockStructure>

    Implementations§

    source§

    impl<A, M, N> TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A>, - N: Module<Algebra = A>,

    source

    pub fn new(left: Arc<M>, right: Arc<N>) -> Self

    source

    pub fn seek_module_num(&self, degree: i32, index: usize) -> i32

    source

    pub fn offset(&self, degree: i32, left_degree: i32) -> usize

    source

    fn act_helper( + N: Module<Algebra = A>,

    source

    pub fn new(left: Arc<M>, right: Arc<N>) -> Self

    source

    pub fn seek_module_num(&self, degree: i32, index: usize) -> i32

    source

    pub fn offset(&self, degree: i32, left_degree: i32) -> usize

    source

    fn act_helper( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - input: Slice<'_> -)

    Trait Implementations§

    source§

    impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A, M, N> Module for TensorModule<M, N>where + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + input: Slice<'_> +)

    Trait Implementations§

    source§

    impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A, M, N> Module for TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A>, - N: Module<Algebra = A>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation -for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. -This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( + N: Module<Algebra = A>,

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize )

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. -Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree -must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( +Missing entries are interpreted to be 0, while extra entries must be zero. Read more

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from Module::basis_element_to_string in the obvious way.
    source§

    impl<A, M, N> ZeroModule for TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A> + ZeroModule, - N: Module<Algebra = A> + ZeroModule,

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M, N> RefUnwindSafe for TensorModule<M, N>where - M: RefUnwindSafe, - N: RefUnwindSafe,

    §

    impl<M, N> Send for TensorModule<M, N>

    §

    impl<M, N> Sync for TensorModule<M, N>

    §

    impl<M, N> Unpin for TensorModule<M, N>

    §

    impl<M, N> UnwindSafe for TensorModule<M, N>where - M: RefUnwindSafe, - N: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + N: Module<Algebra = A> + ZeroModule,
    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    Auto Trait Implementations§

    §

    impl<M, N> RefUnwindSafe for TensorModule<M, N>where + M: RefUnwindSafe, + N: RefUnwindSafe,

    §

    impl<M, N> Send for TensorModule<M, N>

    §

    impl<M, N> Sync for TensorModule<M, N>

    §

    impl<M, N> Unpin for TensorModule<M, N>

    §

    impl<M, N> UnwindSafe for TensorModule<M, N>where + M: RefUnwindSafe, + N: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/module/trait.Module.html b/docs/algebra/module/trait.Module.html index e49036bd5..5c1ba3362 100644 --- a/docs/algebra/module/trait.Module.html +++ b/docs/algebra/module/trait.Module.html @@ -1,4 +1,4 @@ -Module in algebra::module - Rust +Module in algebra::module - Rust @@ -23,60 +23,60 @@ }); -

    Trait algebra::module::Module

    source ·
    pub trait Module: Display + Any + Send + Sync {
    +

    Trait algebra::module::Module

    source ·
    pub trait Module: Display + Any + Send + Sync {
         type Algebra: Algebra;
     
     
    Show 16 methods // Required methods - fn algebra(&self) -> Arc<Self::Algebra>; - fn min_degree(&self) -> i32; - fn max_computed_degree(&self) -> i32; - fn dimension(&self, degree: i32) -> usize; + fn algebra(&self) -> Arc<Self::Algebra>; + fn min_degree(&self) -> i32; + fn max_computed_degree(&self) -> i32; + fn dimension(&self, degree: i32) -> usize; fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize ); - fn basis_element_to_string(&self, degree: i32, idx: usize) -> String; + fn basis_element_to_string(&self, degree: i32, idx: usize) -> String; // Provided methods - fn compute_basis(&self, degree: i32) { ... } - fn is_unit(&self) -> bool { ... } - fn prime(&self) -> ValidPrime { ... } - fn max_degree(&self) -> Option<i32> { ... } - fn max_generator_degree(&self) -> Option<i32> { ... } - fn total_dimension(&self) -> usize { ... } + fn compute_basis(&self, degree: i32) { ... } + fn is_unit(&self) -> bool { ... } + fn prime(&self) -> ValidPrime { ... } + fn max_degree(&self) -> Option<i32> { ... } + fn max_generator_degree(&self) -> Option<i32> { ... } + fn total_dimension(&self) -> usize { ... } fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> ) { ... } fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> ) { ... } fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize ) { ... } - fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String { ... } + fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String { ... }
    }
    Expand description

    A bounded below module over an algebra. To accommodate for infinite modules (e.g. modules in a free resolution), every module is potentially only define up to a degree. The extent to which the module is defined is kept track by two functions:

    @@ -94,37 +94,37 @@ specified the generators up to some degree t. Then t is the max computed degree, while compute_basis computes data such as the offset of existing generators in potentially higher degrees.

    -

    Required Associated Types§

    Required Methods§

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.

    -
    source

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below

    -
    source

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +

    Required Associated Types§

    Required Methods§

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    The algebra the module is over.

    +
    source

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below

    +
    source

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation for more details.

    -
    source

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree

    +
    source

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree

    source

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.

    -

    Provided Methods§

    source

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.

    +

    Provided Methods§

    source

    fn compute_basis(&self, degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. This should be run by the user whenever they want to query such information.

    This function must be idempotent, and defaults to a no-op.

    See Module documentation for more details.

    -
    source

    fn is_unit(&self) -> bool

    Whether this is the unit module.

    -
    source

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.

    -
    source

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.

    -
    source

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +

    source

    fn is_unit(&self) -> bool

    Whether this is the unit module.

    +
    source

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.

    +
    source

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.

    +
    source

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree must be obtainable from applying a Steenrod action to a lower degree element.

    -
    source

    fn total_dimension(&self) -> usize

    source

    fn act( +

    source

    fn total_dimension(&self) -> usize

    source

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    The length of input need not be equal to the dimension of the module in said degree. Missing entries are interpreted to be 0, while extra entries must be zero.

    This flexibility is useful when resolving to a stem. The point is that we have elements in @@ -132,57 +132,57 @@ what generators will be added in degree t yet.

    source

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from Module::basis_element_to_string in the obvious way.

    -

    Implementations on Foreign Types§

    source§

    impl<T: Module + ?Sized> Module for Box<T>where - Box<T>: Display + Any + Send + Sync,

    §

    type Algebra = <T as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn compute_basis(&self, degree: i32)

    source§

    fn max_computed_degree(&self) -> i32

    source§

    fn dimension(&self, degree: i32) -> usize

    source§

    fn act_on_basis( +

    Implementations on Foreign Types§

    source§

    impl<T: Module + ?Sized> Module for Box<T>where + Box<T>: Display + Any + Send + Sync,

    §

    type Algebra = <T as Module>::Algebra

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn compute_basis(&self, degree: i32)

    source§

    fn max_computed_degree(&self) -> i32

    source§

    fn dimension(&self, degree: i32) -> usize

    source§

    fn act_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - mod_degree: i32, - mod_index: usize -)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    source§

    fn is_unit(&self) -> bool

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn max_degree(&self) -> Option<i32>

    source§

    fn max_generator_degree(&self) -> Option<i32>

    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    source§

    fn is_unit(&self) -> bool

    source§

    fn prime(&self) -> ValidPrime

    source§

    fn max_degree(&self) -> Option<i32>

    source§

    fn max_generator_degree(&self) -> Option<i32>

    source§

    fn total_dimension(&self) -> usize

    source§

    fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op_index: usize, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> )

    source§

    fn act_by_element_on_basis( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_>, - input_degree: i32, - input_index: usize -)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Implementors§

    source§

    impl<A, M, N> Module for TensorModule<M, N>where + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Implementors§

    source§

    impl<A, M, N> Module for TensorModule<M, N>where A: Algebra + Bialgebra, M: Module<Algebra = A>, - N: Module<Algebra = A>,

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for RealProjectiveSpace<A>where - for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    §

    type Algebra = A

    source§

    impl<M: Module> Module for HomModule<M>

    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    \ No newline at end of file + N: Module<Algebra = A>,
    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FiniteDimensionalModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for FinitelyPresentedModule<A>

    §

    type Algebra = A

    source§

    impl<A: Algebra> Module for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    §

    type Algebra = A

    source§

    impl<M: Module> Module for HomModule<M>

    source§

    impl<M: Module> Module for QuotientModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<M: Module> Module for SuspensionModule<M>

    §

    type Algebra = <M as Module>::Algebra

    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    \ No newline at end of file diff --git a/docs/algebra/module/trait.ZeroModule.html b/docs/algebra/module/trait.ZeroModule.html index 1a6cec86d..50a711efc 100644 --- a/docs/algebra/module/trait.ZeroModule.html +++ b/docs/algebra/module/trait.ZeroModule.html @@ -1,4 +1,4 @@ -ZeroModule in algebra::module - Rust +ZeroModule in algebra::module - Rust @@ -23,11 +23,11 @@ }); -
    pub trait ZeroModule: Module {
    +
    pub trait ZeroModule: Module {
         // Required method
    -    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self;
    -}

    Required Methods§

    source

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Implementors§

    source§

    impl ZeroModule for SteenrodModule

    source§

    impl<A, M, N> ZeroModule for TensorModule<M, N>where + fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self; +}

    Required Methods§

    source

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Implementors§

    \ No newline at end of file + N: Module<Algebra = A> + ZeroModule,
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    impl<A: Algebra> ZeroModule for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    \ No newline at end of file diff --git a/docs/algebra/module/type.FreeModule.html b/docs/algebra/module/type.FreeModule.html index 0e3f82db9..58b0323b8 100644 --- a/docs/algebra/module/type.FreeModule.html +++ b/docs/algebra/module/type.FreeModule.html @@ -1,4 +1,4 @@ -FreeModule in algebra::module - Rust +FreeModule in algebra::module - Rust @@ -23,4 +23,100 @@ }); -

    Type Definition algebra::module::FreeModule

    source ·
    pub type FreeModule<A> = MuFreeModule<false, A>;
    \ No newline at end of file +

    Type Alias algebra::module::FreeModule

    source ·
    pub type FreeModule<A> = MuFreeModule<false, A>;

    Aliased Type§

    struct FreeModule<A> {
    +    algebra: Arc<A, Global>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String, Global>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +}

    Fields§

    §algebra: Arc<A, Global>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String, Global>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( + &self, + degree: i32, + num_gens: usize, + names: Option<Vec<String>> +)

    source

    pub fn internal_generator_offset( + &self, + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( + &self, + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    +
    source

    pub fn generator_offset( + &self, + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn operation_generator_to_index( + &self, + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( + &self, + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + &self, + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that +represents the terms that correspond to the specified generator.

    +
    source

    pub fn iter_slices<'a>( + &'a self, + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. +Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices +that are zero length.

    +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn act( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> +)

    The length of input need not be equal to the dimension of the module in said degree. +Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn act_by_element_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/type.UnstableFreeModule.html b/docs/algebra/module/type.UnstableFreeModule.html index 765c2b116..6197f9228 100644 --- a/docs/algebra/module/type.UnstableFreeModule.html +++ b/docs/algebra/module/type.UnstableFreeModule.html @@ -1,4 +1,4 @@ -UnstableFreeModule in algebra::module - Rust +UnstableFreeModule in algebra::module - Rust @@ -23,4 +23,100 @@ }); -

    Type Definition algebra::module::UnstableFreeModule

    source ·
    pub type UnstableFreeModule<A> = MuFreeModule<true, A>;
    \ No newline at end of file +
    pub type UnstableFreeModule<A> = MuFreeModule<true, A>;

    Aliased Type§

    struct UnstableFreeModule<A> {
    +    algebra: Arc<A, Global>,
    +    name: String,
    +    min_degree: i32,
    +    gen_names: OnceBiVec<Vec<String, Global>>,
    +    gen_deg_idx_to_internal_idx: OnceBiVec<usize>,
    +    num_gens: OnceBiVec<usize>,
    +    basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>,
    +    generator_to_index: OnceBiVec<OnceVec<usize>>,
    +}

    Fields§

    §algebra: Arc<A, Global>§name: String§min_degree: i32§gen_names: OnceBiVec<Vec<String, Global>>§gen_deg_idx_to_internal_idx: OnceBiVec<usize>

    degree -> internal index of first generator in degree

    +
    §num_gens: OnceBiVec<usize>§basis_element_to_opgen: OnceBiVec<OnceVec<OperationGeneratorPair>>§generator_to_index: OnceBiVec<OnceVec<usize>>

    degree -> internal_gen_idx -> the offset of the generator in degree

    +

    Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn new(algebra: Arc<A>, name: String, min_degree: i32) -> Self

    source§

    impl<const U: bool, A: MuAlgebra<U>> MuFreeModule<U, A>

    source

    pub fn gen_names(&self) -> &OnceBiVec<Vec<String>>

    source

    pub fn number_of_gens_in_degree(&self, degree: i32) -> usize

    source

    pub fn add_generators( + &self, + degree: i32, + num_gens: usize, + names: Option<Vec<String>> +)

    source

    pub fn internal_generator_offset( + &self, + degree: i32, + internal_gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn iter_gens(&self, degree: i32) -> impl Iterator<Item = (i32, usize)> + '_

    Iterate the degrees and indices of each generator up to degree degree.

    +
    source

    pub fn iter_gen_offsets<const N: usize>( + &self, + degree: [i32; N] +) -> impl Iterator<Item = GeneratorData<N>> + '_

    Iterate the degrees and offsets of each generator up to degree degree.

    +
    source

    pub fn generator_offset( + &self, + degree: i32, + gen_deg: i32, + gen_idx: usize +) -> usize

    Given a generator (gen_deg, gen_idx), find the first index in degree degree with +elements from the generator.

    +
    source

    pub fn operation_generator_to_index( + &self, + op_deg: i32, + op_idx: usize, + gen_deg: i32, + gen_idx: usize +) -> usize

    source

    pub fn index_to_op_gen( + &self, + degree: i32, + index: usize +) -> &OperationGeneratorPair

    source

    pub fn extend_by_zero(&self, degree: i32)

    source

    pub fn slice_vector<'a>( + &self, + degree: i32, + gen_degree: i32, + gen_index: usize, + v: Slice<'a> +) -> Slice<'a>

    Given a vector that represents an element in degree degree, slice it to the part that +represents the terms that correspond to the specified generator.

    +
    source

    pub fn iter_slices<'a>( + &'a self, + degree: i32, + slice: Slice<'a> +) -> impl Iterator<Item = (i32, usize, i32, Slice<'a>)> + 'a

    Given an element in a degree, iterate through the slices corresponding to each generator. +Each item of the iterator is (gen_degree, gen_index, op_degree, slice). This skips slices +that are zero length.

    +

    Trait Implementations§

    source§

    impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const U: bool, A: MuAlgebra<U>> Module for MuFreeModule<U, A>

    §

    type Algebra = A

    source§

    fn algebra(&self) -> Arc<A>

    The algebra the module is over.
    source§

    fn min_degree(&self) -> i32

    The minimum degree of the module, which is required to be bounded below
    source§

    fn max_computed_degree(&self) -> i32

    The maximum t for which the module is fully defined at t. See Module documentation +for more details.
    source§

    fn max_generator_degree(&self) -> Option<i32>

    Maximum degree of a generator under the Steenrod action. Every element in higher degree +must be obtainable from applying a Steenrod action to a lower degree element.
    source§

    fn compute_basis(&self, max_degree: i32)

    Compute internal data of the module so that we can query information up to degree degree. +This should be run by the user whenever they want to query such information. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    The dimension of a module at the given degree
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    The name of a basis element. This is useful for debugging and printing results.
    source§

    fn act_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + mod_degree: i32, + mod_index: usize +)

    source§

    fn act( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op_index: usize, + input_degree: i32, + input: Slice<'_> +)

    The length of input need not be equal to the dimension of the module in said degree. +Missing entries are interpreted to be 0, while extra entries must be zero. Read more
    source§

    fn is_unit(&self) -> bool

    Whether this is the unit module.
    source§

    fn prime(&self) -> ValidPrime

    The prime the module is over, which should be equal to the prime of the algebra.
    source§

    fn max_degree(&self) -> Option<i32>

    max_degree is the a degree such that if t > max_degree, then self.dimension(t) = 0.
    source§

    fn total_dimension(&self) -> usize

    source§

    fn act_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input: Slice<'_> +)

    source§

    fn act_by_element_on_basis( + &self, + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_>, + input_degree: i32, + input_index: usize +)

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Gives the name of an element. The default implementation is derived from +Module::basis_element_to_string in the obvious way.
    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    source§

    fn zero_module(algebra: Arc<A>, min_degree: i32) -> Self

    \ No newline at end of file diff --git a/docs/algebra/module/zero_module/index.html b/docs/algebra/module/zero_module/index.html index e8647828a..638109720 100644 --- a/docs/algebra/module/zero_module/index.html +++ b/docs/algebra/module/zero_module/index.html @@ -1,4 +1,4 @@ -algebra::module::zero_module - Rust +algebra::module::zero_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/module/zero_module/trait.ZeroModule.html b/docs/algebra/module/zero_module/trait.ZeroModule.html index 53029edd8..f721cbe6b 100644 --- a/docs/algebra/module/zero_module/trait.ZeroModule.html +++ b/docs/algebra/module/zero_module/trait.ZeroModule.html @@ -1,4 +1,4 @@ -ZeroModule in algebra::module::zero_module - Rust +ZeroModule in algebra::module::zero_module - Rust @@ -23,11 +23,11 @@ }); -
    pub trait ZeroModule: Module {
    +
    pub trait ZeroModule: Module {
         // Required method
    -    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self;
    -}

    Required Methods§

    source

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Implementors§

    source§

    impl ZeroModule for SteenrodModule

    source§

    impl<A, M, N> ZeroModule for TensorModule<M, N>where + fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self; +}

    Required Methods§

    source

    fn zero_module(algebra: Arc<Self::Algebra>, min_degree: i32) -> Self

    Implementors§

    \ No newline at end of file + N: Module<Algebra = A> + ZeroModule,
    source§

    impl<A: Algebra> ZeroModule for FiniteDimensionalModule<A>

    source§

    impl<A: Algebra> ZeroModule for FinitelyPresentedModule<A>

    source§

    impl<A: Algebra> ZeroModule for RealProjectiveSpace<A>where + for<'a> &'a A: TryInto<&'a SteenrodAlgebra>,

    source§

    impl<M: ZeroModule> ZeroModule for QuotientModule<M>

    source§

    impl<M: ZeroModule> ZeroModule for SuspensionModule<M>

    source§

    impl<const U: bool, A: MuAlgebra<U>> ZeroModule for MuFreeModule<U, A>

    \ No newline at end of file diff --git a/docs/algebra/pair_algebra/index.html b/docs/algebra/pair_algebra/index.html index 1dc1f7c66..1162af611 100644 --- a/docs/algebra/pair_algebra/index.html +++ b/docs/algebra/pair_algebra/index.html @@ -1,4 +1,4 @@ -algebra::pair_algebra - Rust +algebra::pair_algebra - Rust @@ -23,7 +23,7 @@ }); -

    Module algebra::pair_algebra

    source ·
    Expand description

    This implements the notion of a split pair algebra in the sense of +

    Module algebra::pair_algebra

    source ·
    Expand description

    This implements the notion of a split pair algebra in the sense of https://arxiv.org/abs/2105.07628, whose notation we will use throughout. The Steenrod algebra admits a lift to a split pair algebra, which can be used to compute d2 differentials algorithmically.

    diff --git a/docs/algebra/pair_algebra/struct.MilnorPairElement.html b/docs/algebra/pair_algebra/struct.MilnorPairElement.html index 2a1aeeea7..d394f5a80 100644 --- a/docs/algebra/pair_algebra/struct.MilnorPairElement.html +++ b/docs/algebra/pair_algebra/struct.MilnorPairElement.html @@ -1,4 +1,4 @@ -MilnorPairElement in algebra::pair_algebra - Rust +MilnorPairElement in algebra::pair_algebra - Rust @@ -23,19 +23,19 @@ }); -
    pub struct MilnorPairElement {
    -    ones: FpVector,
    -    twos: FpVector,
    -    degree: i32,
    -    ys: Vec<Vec<FpVector>>,
    -}

    Fields§

    §ones: FpVector§twos: FpVector§degree: i32§ys: Vec<Vec<FpVector>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct MilnorPairElement {
    +    ones: FpVector,
    +    twos: FpVector,
    +    degree: i32,
    +    ys: Vec<Vec<FpVector>>,
    +}

    Fields§

    §ones: FpVector§twos: FpVector§degree: i32§ys: Vec<Vec<FpVector>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/pair_algebra/trait.PairAlgebra.html b/docs/algebra/pair_algebra/trait.PairAlgebra.html index d25f66341..2b8cf1e83 100644 --- a/docs/algebra/pair_algebra/trait.PairAlgebra.html +++ b/docs/algebra/pair_algebra/trait.PairAlgebra.html @@ -1,4 +1,4 @@ -PairAlgebra in algebra::pair_algebra - Rust +PairAlgebra in algebra::pair_algebra - Rust @@ -23,96 +23,96 @@ }); -
    pub trait PairAlgebra: Algebra {
    -    type Element: Send + Sync;
    +
    pub trait PairAlgebra: Algebra {
    +    type Element: Send + Sync;
     
         // Required methods
    -    fn element_is_zero(elt: &Self::Element) -> bool;
    -    fn new_pair_element(&self, degree: i32) -> Self::Element;
    +    fn element_is_zero(elt: &Self::Element) -> bool;
    +    fn new_pair_element(&self, degree: i32) -> Self::Element;
         fn sigma_multiply_basis(
             &self,
             result: &mut Self::Element,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_idx: usize,
    -        s_degree: i32,
    -        s_idx: usize
    +        coeff: u32,
    +        r_degree: i32,
    +        r_idx: usize,
    +        s_degree: i32,
    +        s_idx: usize
         );
         fn a_multiply(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
             s: &Self::Element
         );
    -    fn p_tilde(&self) -> usize;
    +    fn p_tilde(&self) -> usize;
         fn element_to_bytes(
             &self,
             elt: &Self::Element,
    -        buffer: &mut impl Write
    -    ) -> Result<()>;
    +        buffer: &mut impl Write
    +    ) -> Result<()>;
         fn element_from_bytes(
             &self,
    -        degree: i32,
    -        buffer: &mut impl Read
    -    ) -> Result<Self::Element>;
    +        degree: i32,
    +        buffer: &mut impl Read
    +    ) -> Result<Self::Element>;
     
         // Provided methods
         fn finalize_element(_elt: &mut Self::Element) { ... }
         fn sigma_multiply(
             &self,
             result: &mut Self::Element,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s: Slice<'_>
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s: Slice<'_>
         ) { ... }
     }
    Expand description

    A lift of an algebra to a split pair algebra. See module introduction for more.

    -

    Required Associated Types§

    source

    type Element: Send + Sync

    An element in the cohomological degree zero part of the pair algebra. This tends to not be +

    Required Associated Types§

    source

    type Element: Send + Sync

    An element in the cohomological degree zero part of the pair algebra. This tends to not be a ring over Fp, so we let the algebra specify how it wants to represent the elements.

    -

    Required Methods§

    source

    fn element_is_zero(elt: &Self::Element) -> bool

    source

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.

    +

    Required Methods§

    source

    fn element_is_zero(elt: &Self::Element) -> bool

    source

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.

    source

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.

    source

    fn a_multiply( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element )

    Compute $A(r, s)$ and write the result to result.

    -
    source

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, +

    source

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.

    source

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source

    fn element_from_bytes( + buffer: &mut impl Write +) -> Result<()>

    source

    fn element_from_bytes( &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    Provided Methods§

    source

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    Provided Methods§

    source

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the complement of the image of the differential.

    source

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/steenrod_evaluator/index.html b/docs/algebra/steenrod_evaluator/index.html index 6ee6098eb..1c2257b89 100644 --- a/docs/algebra/steenrod_evaluator/index.html +++ b/docs/algebra/steenrod_evaluator/index.html @@ -1,4 +1,4 @@ -algebra::steenrod_evaluator - Rust +algebra::steenrod_evaluator - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/algebra/steenrod_evaluator/struct.SteenrodEvaluator.html b/docs/algebra/steenrod_evaluator/struct.SteenrodEvaluator.html index 2825c2a71..e6181627b 100644 --- a/docs/algebra/steenrod_evaluator/struct.SteenrodEvaluator.html +++ b/docs/algebra/steenrod_evaluator/struct.SteenrodEvaluator.html @@ -1,4 +1,4 @@ -SteenrodEvaluator in algebra::steenrod_evaluator - Rust +SteenrodEvaluator in algebra::steenrod_evaluator - Rust @@ -23,70 +23,70 @@ }); -
    pub struct SteenrodEvaluator {
    +
    pub struct SteenrodEvaluator {
         pub adem: AdemAlgebra,
         pub milnor: MilnorAlgebra,
    -}

    Fields§

    §adem: AdemAlgebra§milnor: MilnorAlgebra

    Implementations§

    source§

    impl SteenrodEvaluator

    source

    pub fn new(p: ValidPrime) -> Self

    source

    pub fn milnor_to_adem( +}

    Fields§

    §adem: AdemAlgebra§milnor: MilnorAlgebra

    Implementations§

    source§

    impl SteenrodEvaluator

    source

    pub fn new(p: ValidPrime) -> Self

    source

    pub fn milnor_to_adem( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - input: &FpVector + result: &mut FpVector, + coeff: u32, + degree: i32, + input: &FpVector )

    source

    pub fn adem_to_milnor( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - input: &FpVector -)

    source

    pub fn evaluate_algebra_adem(&self, input: &str) -> Result<(i32, FpVector)>

    source

    pub fn evaluate_algebra_milnor(&self, input: &str) -> Result<(i32, FpVector)>

    source

    pub fn evaluate_module_adem( + result: &mut FpVector, + coeff: u32, + degree: i32, + input: &FpVector +)

    source

    pub fn evaluate_algebra_adem(&self, input: &str) -> Result<(i32, FpVector)>

    source

    pub fn evaluate_algebra_milnor(&self, input: &str) -> Result<(i32, FpVector)>

    source

    pub fn evaluate_module_adem( &self, - items: &str -) -> Result<BTreeMap<String, (i32, FpVector)>>

    Returns
    -

    This returns a BTreeMap so that we get deterministic outputs for testing purposes

    -
    source

    fn prime(&self) -> ValidPrime

    source

    fn compute_basis(&self, degree: i32)

    source

    fn dimension(&self, degree: i32) -> usize

    source

    fn evaluate_algebra_node( + items: &str +) -> Result<BTreeMap<String, (i32, FpVector)>>

    Returns
    +

    This returns a BTreeMap so that we get deterministic outputs for testing purposes

    +
    source

    fn prime(&self) -> ValidPrime

    source

    fn compute_basis(&self, degree: i32)

    source

    fn dimension(&self, degree: i32) -> usize

    source

    fn evaluate_algebra_node( &self, - output_degree: Option<i32>, + output_degree: Option<i32>, tree: AlgebraNode -) -> Result<(i32, FpVector)>

    source

    fn evaluate_basis_element( +) -> Result<(i32, FpVector)>

    source

    fn evaluate_basis_element( &self, - output_degree: Option<i32>, + output_degree: Option<i32>, basis_elt: AlgebraBasisElt -) -> Result<(i32, FpVector)>

    source

    fn adem_to_milnor_on_basis( +) -> Result<(i32, FpVector)>

    source

    fn adem_to_milnor_on_basis( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize )

    Translate from the adem basis to the milnor basis, adding coeff times the result to result. This uses the fact that that $P^n = P(n)$ and $Q_1 = \beta$ and multiplies out the admissible monomial.

    source

    fn milnor_to_adem_on_basis( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize )

    source

    fn milnor_to_adem_on_basis_2( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize )

    source

    fn milnor_to_adem_on_basis_generic( &self, - result: &mut FpVector, - coeff: u32, - degree: i32, - idx: usize -)

    source

    fn adem_q(&self, result: &mut FpVector, coeff: u32, qi: u32)

    Express $Q_{qi}$ in the adem basis.

    -
    source

    fn evaluate_p_or_b_list(&self, list: &[BocksteinOrSq]) -> (i32, FpVector)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: &mut FpVector, + coeff: u32, + degree: i32, + idx: usize +)
    source

    fn adem_q(&self, result: &mut FpVector, coeff: u32, qi: u32)

    Express $Q_{qi}$ in the adem basis.

    +
    source

    fn evaluate_p_or_b_list(&self, list: &[BocksteinOrSq]) -> (i32, FpVector)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/enum.AlgebraBasisElt.html b/docs/algebra/steenrod_parser/enum.AlgebraBasisElt.html index 5244d1843..85057e030 100644 --- a/docs/algebra/steenrod_parser/enum.AlgebraBasisElt.html +++ b/docs/algebra/steenrod_parser/enum.AlgebraBasisElt.html @@ -1,4 +1,4 @@ -AlgebraBasisElt in algebra::steenrod_parser - Rust +AlgebraBasisElt in algebra::steenrod_parser - Rust @@ -23,20 +23,20 @@ }); -
    pub enum AlgebraBasisElt {
    -    AList(Vec<BocksteinOrSq>),
    +
    pub enum AlgebraBasisElt {
    +    AList(Vec<BocksteinOrSq>),
         PList(PPart),
    -    P(u32),
    -    Q(u32),
    -}

    Variants§

    Trait Implementations§

    source§

    impl Clone for AlgebraBasisElt

    source§

    fn clone(&self) -> AlgebraBasisElt

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraBasisElt

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + P(u32), + Q(u32), +}

    Variants§

    Trait Implementations§

    source§

    impl Clone for AlgebraBasisElt

    source§

    fn clone(&self) -> AlgebraBasisElt

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraBasisElt

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/enum.AlgebraNode.html b/docs/algebra/steenrod_parser/enum.AlgebraNode.html index 7cfbe507e..a717d08b9 100644 --- a/docs/algebra/steenrod_parser/enum.AlgebraNode.html +++ b/docs/algebra/steenrod_parser/enum.AlgebraNode.html @@ -1,4 +1,4 @@ -AlgebraNode in algebra::steenrod_parser - Rust +AlgebraNode in algebra::steenrod_parser - Rust @@ -23,20 +23,20 @@ }); -
    pub enum AlgebraNode {
    -    Product(Box<AlgebraNode>, Box<AlgebraNode>),
    -    Sum(Box<AlgebraNode>, Box<AlgebraNode>),
    +
    pub enum AlgebraNode {
    +    Product(Box<AlgebraNode>, Box<AlgebraNode>),
    +    Sum(Box<AlgebraNode>, Box<AlgebraNode>),
         BasisElt(AlgebraBasisElt),
    -    Scalar(i32),
    -}

    Variants§

    Trait Implementations§

    source§

    impl Clone for AlgebraNode

    source§

    fn clone(&self) -> AlgebraNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraNode

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + Scalar(i32), +}

    Variants§

    Trait Implementations§

    source§

    impl Clone for AlgebraNode

    source§

    fn clone(&self) -> AlgebraNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AlgebraNode

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/enum.BocksteinOrSq.html b/docs/algebra/steenrod_parser/enum.BocksteinOrSq.html index c9468b1ba..9d4efcbd4 100644 --- a/docs/algebra/steenrod_parser/enum.BocksteinOrSq.html +++ b/docs/algebra/steenrod_parser/enum.BocksteinOrSq.html @@ -1,4 +1,4 @@ -BocksteinOrSq in algebra::steenrod_parser - Rust +BocksteinOrSq in algebra::steenrod_parser - Rust @@ -23,18 +23,18 @@ }); -
    pub enum BocksteinOrSq {
    +
    pub enum BocksteinOrSq {
         Bockstein,
    -    Sq(u32),
    -}

    Variants§

    §

    Bockstein

    §

    Sq(u32)

    Implementations§

    Trait Implementations§

    source§

    impl Clone for BocksteinOrSq

    source§

    fn clone(&self) -> BocksteinOrSq

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BocksteinOrSq

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Copy for BocksteinOrSq

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + Sq(u32), +}

    Variants§

    §

    Bockstein

    §

    Sq(u32)

    Implementations§

    Trait Implementations§

    source§

    impl Clone for BocksteinOrSq

    source§

    fn clone(&self) -> BocksteinOrSq

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BocksteinOrSq

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Copy for BocksteinOrSq

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.algebra_expr.html b/docs/algebra/steenrod_parser/fn.algebra_expr.html index 964b53b58..2006a1a0d 100644 --- a/docs/algebra/steenrod_parser/fn.algebra_expr.html +++ b/docs/algebra/steenrod_parser/fn.algebra_expr.html @@ -1,4 +1,4 @@ -algebra_expr in algebra::steenrod_parser - Rust +algebra_expr in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn algebra_expr(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file +
    fn algebra_expr(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.algebra_factor.html b/docs/algebra/steenrod_parser/fn.algebra_factor.html index d0344203b..12f8686cf 100644 --- a/docs/algebra/steenrod_parser/fn.algebra_factor.html +++ b/docs/algebra/steenrod_parser/fn.algebra_factor.html @@ -1,4 +1,4 @@ -algebra_factor in algebra::steenrod_parser - Rust +algebra_factor in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn algebra_factor(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file +
    fn algebra_factor(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.algebra_generator.html b/docs/algebra/steenrod_parser/fn.algebra_generator.html index 628bc4ea4..3027e17d7 100644 --- a/docs/algebra/steenrod_parser/fn.algebra_generator.html +++ b/docs/algebra/steenrod_parser/fn.algebra_generator.html @@ -1,4 +1,4 @@ -algebra_generator in algebra::steenrod_parser - Rust +algebra_generator in algebra::steenrod_parser - Rust @@ -23,6 +23,6 @@ }); -
    fn algebra_generator(
    -    i: &str
    -) -> IResult<&str, AlgebraBasisElt, VerboseError<&str>>
    \ No newline at end of file +
    fn algebra_generator(
    +    i: &str
    +) -> IResult<&str, AlgebraBasisElt, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.algebra_term.html b/docs/algebra/steenrod_parser/fn.algebra_term.html index 17debf7e1..67be773ec 100644 --- a/docs/algebra/steenrod_parser/fn.algebra_term.html +++ b/docs/algebra/steenrod_parser/fn.algebra_term.html @@ -1,4 +1,4 @@ -algebra_term in algebra::steenrod_parser - Rust +algebra_term in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn algebra_term(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file +
    fn algebra_term(i: &str) -> IResult<&str, AlgebraNode, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.brackets.html b/docs/algebra/steenrod_parser/fn.brackets.html index 39fbf8bc0..2a1b0ecb7 100644 --- a/docs/algebra/steenrod_parser/fn.brackets.html +++ b/docs/algebra/steenrod_parser/fn.brackets.html @@ -1,4 +1,4 @@ -brackets in algebra::steenrod_parser - Rust +brackets in algebra::steenrod_parser - Rust @@ -23,7 +23,7 @@ }); -
    pub(crate) fn brackets<'a, O, E: ParseError<&'a str>, F: Parser<&'a str, O, E>>(
    +
    pub(crate) fn brackets<'a, O, E: ParseError<&'a str>, F: Parser<&'a str, O, E>>(
         f: F
    -) -> impl FnMut(&'a str) -> IResultBase<&'a str, O, E>
    Expand description

    Surround with brackets

    +) -> impl FnMut(&'a str) -> IResultBase<&'a str, O, E>
    Expand description

    Surround with brackets

    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.convert_error.html b/docs/algebra/steenrod_parser/fn.convert_error.html index 6882e1ffe..0562c3fcb 100644 --- a/docs/algebra/steenrod_parser/fn.convert_error.html +++ b/docs/algebra/steenrod_parser/fn.convert_error.html @@ -1,4 +1,4 @@ -convert_error in algebra::steenrod_parser - Rust +convert_error in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn convert_error(i: &str) -> impl FnOnce(Err<VerboseError<&str>>) -> Error + '_
    \ No newline at end of file +
    fn convert_error(i: &str) -> impl FnOnce(Err<VerboseError<&str>>) -> Error + '_
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.digits.html b/docs/algebra/steenrod_parser/fn.digits.html index 7c6cf8b2d..ae5450cdb 100644 --- a/docs/algebra/steenrod_parser/fn.digits.html +++ b/docs/algebra/steenrod_parser/fn.digits.html @@ -1,4 +1,4 @@ -digits in algebra::steenrod_parser - Rust +digits in algebra::steenrod_parser - Rust @@ -23,6 +23,6 @@ }); -
    pub(crate) fn digits<T: FromStr + Copy>(
    -    i: &str
    -) -> IResult<&str, T, VerboseError<&str>>
    \ No newline at end of file +
    pub(crate) fn digits<T: FromStr + Copy>(
    +    i: &str
    +) -> IResult<&str, T, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.fold_separated.html b/docs/algebra/steenrod_parser/fn.fold_separated.html index 1a3496a65..692683be1 100644 --- a/docs/algebra/steenrod_parser/fn.fold_separated.html +++ b/docs/algebra/steenrod_parser/fn.fold_separated.html @@ -1,4 +1,4 @@ -fold_separated in algebra::steenrod_parser - Rust +fold_separated in algebra::steenrod_parser - Rust @@ -23,8 +23,8 @@ }); -
    fn fold_separated<I: Clone, OS, O, E>(
    +
    fn fold_separated<I: Clone, OS, O, E>(
         sep: impl Parser<I, OS, E>,
         f: impl Parser<I, O, E>,
    -    acc: impl FnMut(O, O) -> O
    -) -> impl FnMut(I) -> IResultBase<I, O, E>
    \ No newline at end of file + acc: impl FnMut(O, O) -> O +) -> impl FnMut(I) -> IResultBase<I, O, E>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.module_expr.html b/docs/algebra/steenrod_parser/fn.module_expr.html index 6f90b31ff..72665cd7d 100644 --- a/docs/algebra/steenrod_parser/fn.module_expr.html +++ b/docs/algebra/steenrod_parser/fn.module_expr.html @@ -1,4 +1,4 @@ -module_expr in algebra::steenrod_parser - Rust +module_expr in algebra::steenrod_parser - Rust @@ -23,6 +23,6 @@ }); -
    fn module_expr(
    -    i: &str
    -) -> IResult<&str, Vec<(AlgebraNode, String)>, VerboseError<&str>>
    \ No newline at end of file +
    fn module_expr(
    +    i: &str
    +) -> IResult<&str, Vec<(AlgebraNode, String)>, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.module_generator.html b/docs/algebra/steenrod_parser/fn.module_generator.html index c5468f4a1..186cc36f1 100644 --- a/docs/algebra/steenrod_parser/fn.module_generator.html +++ b/docs/algebra/steenrod_parser/fn.module_generator.html @@ -1,4 +1,4 @@ -module_generator in algebra::steenrod_parser - Rust +module_generator in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn module_generator(i: &str) -> IResult<&str, String, VerboseError<&str>>
    \ No newline at end of file +
    fn module_generator(i: &str) -> IResult<&str, String, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.module_term.html b/docs/algebra/steenrod_parser/fn.module_term.html index 40879fe0b..07cd3174d 100644 --- a/docs/algebra/steenrod_parser/fn.module_term.html +++ b/docs/algebra/steenrod_parser/fn.module_term.html @@ -1,4 +1,4 @@ -module_term in algebra::steenrod_parser - Rust +module_term in algebra::steenrod_parser - Rust @@ -23,6 +23,6 @@ }); -
    fn module_term(
    -    i: &str
    -) -> IResult<&str, Vec<(AlgebraNode, String)>, VerboseError<&str>>
    \ No newline at end of file +
    fn module_term(
    +    i: &str
    +) -> IResult<&str, Vec<(AlgebraNode, String)>, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.p_or_sq.html b/docs/algebra/steenrod_parser/fn.p_or_sq.html index 3dace16b0..600090a59 100644 --- a/docs/algebra/steenrod_parser/fn.p_or_sq.html +++ b/docs/algebra/steenrod_parser/fn.p_or_sq.html @@ -1,4 +1,4 @@ -p_or_sq in algebra::steenrod_parser - Rust +p_or_sq in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    pub(crate) fn p_or_sq(i: &str) -> IResult<&str, &str, VerboseError<&str>>
    \ No newline at end of file +
    pub(crate) fn p_or_sq(i: &str) -> IResult<&str, &str, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.parse_algebra.html b/docs/algebra/steenrod_parser/fn.parse_algebra.html index 72dbfe0c1..f9018ec37 100644 --- a/docs/algebra/steenrod_parser/fn.parse_algebra.html +++ b/docs/algebra/steenrod_parser/fn.parse_algebra.html @@ -1,4 +1,4 @@ -parse_algebra in algebra::steenrod_parser - Rust +parse_algebra in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    pub fn parse_algebra(i: &str) -> Result<AlgebraNode>
    \ No newline at end of file +
    pub fn parse_algebra(i: &str) -> Result<AlgebraNode>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.parse_module.html b/docs/algebra/steenrod_parser/fn.parse_module.html index afec8b892..24f5a1534 100644 --- a/docs/algebra/steenrod_parser/fn.parse_module.html +++ b/docs/algebra/steenrod_parser/fn.parse_module.html @@ -1,4 +1,4 @@ -parse_module in algebra::steenrod_parser - Rust +parse_module in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    pub fn parse_module(i: &str) -> Result<Vec<(AlgebraNode, String)>>
    \ No newline at end of file +
    pub fn parse_module(i: &str) -> Result<Vec<(AlgebraNode, String)>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.scalar.html b/docs/algebra/steenrod_parser/fn.scalar.html index 22bfab2e2..7ea758b5f 100644 --- a/docs/algebra/steenrod_parser/fn.scalar.html +++ b/docs/algebra/steenrod_parser/fn.scalar.html @@ -1,4 +1,4 @@ -scalar in algebra::steenrod_parser - Rust +scalar in algebra::steenrod_parser - Rust @@ -23,4 +23,4 @@ }); -
    fn scalar(i: &str) -> IResult<&str, i32, VerboseError<&str>>
    \ No newline at end of file +
    fn scalar(i: &str) -> IResult<&str, i32, VerboseError<&str>>
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/fn.space.html b/docs/algebra/steenrod_parser/fn.space.html index a44530c0f..0ca22204d 100644 --- a/docs/algebra/steenrod_parser/fn.space.html +++ b/docs/algebra/steenrod_parser/fn.space.html @@ -1,4 +1,4 @@ -space in algebra::steenrod_parser - Rust +space in algebra::steenrod_parser - Rust @@ -23,7 +23,7 @@ }); -

    Function algebra::steenrod_parser::space

    source ·
    pub(crate) fn space<'a, O, E: ParseError<&'a str>, F: Parser<&'a str, O, E>>(
    +

    Function algebra::steenrod_parser::space

    source ·
    pub(crate) fn space<'a, O, E: ParseError<&'a str>, F: Parser<&'a str, O, E>>(
         f: F
    -) -> impl FnMut(&'a str) -> IResultBase<&'a str, O, E>
    Expand description

    Pad both ends with whitespace

    +) -> impl FnMut(&'a str) -> IResultBase<&'a str, O, E>
    Expand description

    Pad both ends with whitespace

    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/index.html b/docs/algebra/steenrod_parser/index.html index 67bae90bb..7a6775692 100644 --- a/docs/algebra/steenrod_parser/index.html +++ b/docs/algebra/steenrod_parser/index.html @@ -1,4 +1,4 @@ -algebra::steenrod_parser - Rust +algebra::steenrod_parser - Rust @@ -23,6 +23,6 @@ }); -
    Expand description

    This module includes code for parsing an expression in the Steenrod algebra into an abstract +

    Expand description

    This module includes code for parsing an expression in the Steenrod algebra into an abstract syntax tree.

    -

    Enums

    Functions

    Type Definitions

    \ No newline at end of file +

    Enums

    Functions

    Type Aliases

    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/type.IResult.html b/docs/algebra/steenrod_parser/type.IResult.html index 4c19803ca..d5677868f 100644 --- a/docs/algebra/steenrod_parser/type.IResult.html +++ b/docs/algebra/steenrod_parser/type.IResult.html @@ -1,4 +1,4 @@ -IResult in algebra::steenrod_parser - Rust +IResult in algebra::steenrod_parser - Rust @@ -23,4 +23,9 @@ }); -

    Type Definition algebra::steenrod_parser::IResult

    source ·
    type IResult<I, O> = IResult<I, O, VerboseError<I>>;
    \ No newline at end of file +

    Type Alias algebra::steenrod_parser::IResult

    source ·
    type IResult<I, O> = IResult<I, O, VerboseError<I>>;

    Aliased Type§

    enum IResult<I, O> {
    +    Ok((I, O)),
    +    Err(Err<VerboseError<I>>),
    +}

    Variants§

    §1.0.0

    Ok((I, O))

    Contains the success value

    +
    §1.0.0

    Err(Err<VerboseError<I>>)

    Contains the error value

    +
    \ No newline at end of file diff --git a/docs/algebra/steenrod_parser/type.ModuleNode.html b/docs/algebra/steenrod_parser/type.ModuleNode.html index bb599970c..8fcf74ec2 100644 --- a/docs/algebra/steenrod_parser/type.ModuleNode.html +++ b/docs/algebra/steenrod_parser/type.ModuleNode.html @@ -1,4 +1,4 @@ -ModuleNode in algebra::steenrod_parser - Rust +ModuleNode in algebra::steenrod_parser - Rust @@ -23,4 +23,1066 @@ }); -

    Type Definition algebra::steenrod_parser::ModuleNode

    source ·
    pub type ModuleNode = Vec<(AlgebraNode, String)>;
    \ No newline at end of file +
    pub type ModuleNode = Vec<(AlgebraNode, String)>;

    Aliased Type§

    struct ModuleNode {
    +    buf: RawVec<(AlgebraNode, String), Global>,
    +    len: usize,
    +}

    Fields§

    §buf: RawVec<(AlgebraNode, String), Global>§len: usize

    Methods from Deref<Target = [T]>§

    source

    pub fn as_str(&self) -> &str

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a UTF-8 str.

    +
    source

    pub fn as_bytes(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a slice of u8 bytes.

    +
    1.23.0 · source

    pub fn is_ascii(&self) -> bool

    Checks if all bytes in this slice are within the ASCII range.

    +
    source

    pub fn as_ascii(&self) -> Option<&[AsciiChar]>

    🔬This is a nightly-only experimental API. (ascii_char)

    If this slice is_ascii, returns it as a slice of +ASCII characters, otherwise returns None.

    +
    source

    pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar]

    🔬This is a nightly-only experimental API. (ascii_char)

    Converts this slice of bytes into a slice of ASCII characters, +without checking whether they’re valid.

    +
    Safety
    +

    Every byte in the slice must be in 0..=127, or else this is UB.

    +
    1.23.0 · source

    pub fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool

    Checks that two slices are an ASCII case-insensitive match.

    +

    Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), +but without allocating and copying temporaries.

    +
    1.60.0 · source

    pub fn escape_ascii(&self) -> EscapeAscii<'_>

    Returns an iterator that produces an escaped version of this slice, +treating it as an ASCII string.

    +
    Examples
    +
    
    +let s = b"0\t\r\n'\"\\\x9d";
    +let escaped = s.escape_ascii().to_string();
    +assert_eq!(escaped, "0\\t\\r\\n\\'\\\"\\\\\\x9d");
    +
    source

    pub fn trim_ascii_start(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b" \t hello world\n".trim_ascii_start(), b"hello world\n");
    +assert_eq!(b"  ".trim_ascii_start(), b"");
    +assert_eq!(b"".trim_ascii_start(), b"");
    +
    source

    pub fn trim_ascii_end(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with trailing ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii_end(), b"\r hello world");
    +assert_eq!(b"  ".trim_ascii_end(), b"");
    +assert_eq!(b"".trim_ascii_end(), b"");
    +
    source

    pub fn trim_ascii(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading and trailing ASCII whitespace bytes +removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii(), b"hello world");
    +assert_eq!(b"  ".trim_ascii(), b"");
    +assert_eq!(b"".trim_ascii(), b"");
    +
    source

    pub fn flatten(&self) -> &[T]

    🔬This is a nightly-only experimental API. (slice_flatten)

    Takes a &[[T; N]], and flattens it to a &[T].

    +
    Panics
    +

    This panics if the length of the resulting slice would overflow a usize.

    +

    This is only possible when flattening a slice of arrays of zero-sized +types, and thus tends to be irrelevant in practice. If +size_of::<T>() > 0, this will never panic.

    +
    Examples
    +
    #![feature(slice_flatten)]
    +
    +assert_eq!([[1, 2, 3], [4, 5, 6]].flatten(), &[1, 2, 3, 4, 5, 6]);
    +
    +assert_eq!(
    +    [[1, 2, 3], [4, 5, 6]].flatten(),
    +    [[1, 2], [3, 4], [5, 6]].flatten(),
    +);
    +
    +let slice_of_empty_arrays: &[[i32; 0]] = &[[], [], [], [], []];
    +assert!(slice_of_empty_arrays.flatten().is_empty());
    +
    +let empty_slice_of_arrays: &[[u32; 10]] = &[];
    +assert!(empty_slice_of_arrays.flatten().is_empty());
    +
    1.0.0 · source

    pub fn len(&self) -> usize

    Returns the number of elements in the slice.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert_eq!(a.len(), 3);
    +
    1.0.0 · source

    pub fn is_empty(&self) -> bool

    Returns true if the slice has a length of 0.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert!(!a.is_empty());
    +
    1.0.0 · source

    pub fn first(&self) -> Option<&T>

    Returns the first element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&10), v.first());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.first());
    +
    1.5.0 · source

    pub fn split_first(&self) -> Option<(&T, &[T])>

    Returns the first and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first() {
    +    assert_eq!(first, &0);
    +    assert_eq!(elements, &[1, 2]);
    +}
    +
    1.5.0 · source

    pub fn split_last(&self) -> Option<(&T, &[T])>

    Returns the last and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last() {
    +    assert_eq!(last, &2);
    +    assert_eq!(elements, &[0, 1]);
    +}
    +
    1.0.0 · source

    pub fn last(&self) -> Option<&T>

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&30), v.last());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.last());
    +
    source

    pub fn first_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice, or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[10, 40]), u.first_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.first_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.first_chunk::<0>());
    +
    source

    pub fn split_first_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first_chunk::<2>() {
    +    assert_eq!(first, &[0, 1]);
    +    assert_eq!(elements, &[2]);
    +}
    +
    source

    pub fn split_last_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last_chunk::<2>() {
    +    assert_eq!(last, &[1, 2]);
    +    assert_eq!(elements, &[0]);
    +}
    +
    source

    pub fn last_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[40, 30]), u.last_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.last_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.last_chunk::<0>());
    +
    1.0.0 · source

    pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>where + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice depending on the type of +index.

    +
      +
    • If given a position, returns a reference to the element at that +position or None if out of bounds.
    • +
    • If given a range, returns the subslice corresponding to that range, +or None if out of bounds.
    • +
    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&40), v.get(1));
    +assert_eq!(Some(&[10, 40][..]), v.get(0..2));
    +assert_eq!(None, v.get(3));
    +assert_eq!(None, v.get(0..4));
    +
    1.0.0 · source

    pub unsafe fn get_unchecked<I>( + &self, + index: I +) -> &<I as SliceIndex<[T]>>::Outputwhere + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice, without doing bounds +checking.

    +

    For a safe alternative see get.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +
    +unsafe {
    +    assert_eq!(x.get_unchecked(1), &2);
    +}
    +
    1.0.0 · source

    pub fn as_ptr(&self) -> *const T

    Returns a raw pointer to the slice’s buffer.

    +

    The caller must ensure that the slice outlives the pointer this +function returns, or else it will end up pointing to garbage.

    +

    The caller must also ensure that the memory the pointer (non-transitively) points to +is never written to (except inside an UnsafeCell) using this pointer or any pointer +derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

    +

    Modifying the container referenced by this slice may cause its buffer +to be reallocated, which would also make any pointers to it invalid.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let x_ptr = x.as_ptr();
    +
    +unsafe {
    +    for i in 0..x.len() {
    +        assert_eq!(x.get_unchecked(i), &*x_ptr.add(i));
    +    }
    +}
    +
    1.48.0 · source

    pub fn as_ptr_range(&self) -> Range<*const T>

    Returns the two raw pointers spanning the slice.

    +

    The returned range is half-open, which means that the end pointer +points one past the last element of the slice. This way, an empty +slice is represented by two equal pointers, and the difference between +the two pointers represents the size of the slice.

    +

    See as_ptr for warnings on using these pointers. The end pointer +requires extra caution, as it does not point to a valid element in the +slice.

    +

    This function is useful for interacting with foreign interfaces which +use two pointers to refer to a range of elements in memory, as is +common in C++.

    +

    It can also be useful to check if a pointer to an element refers to an +element of this slice:

    + +
    let a = [1, 2, 3];
    +let x = &a[1] as *const _;
    +let y = &5 as *const _;
    +
    +assert!(a.as_ptr_range().contains(&x));
    +assert!(!a.as_ptr_range().contains(&y));
    +
    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, T>

    Returns an iterator over the slice.

    +

    The iterator yields all items from start to end.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let mut iterator = x.iter();
    +
    +assert_eq!(iterator.next(), Some(&1));
    +assert_eq!(iterator.next(), Some(&2));
    +assert_eq!(iterator.next(), Some(&4));
    +assert_eq!(iterator.next(), None);
    +
    1.0.0 · source

    pub fn windows(&self, size: usize) -> Windows<'_, T>

    Returns an iterator over all contiguous windows of length +size. The windows overlap. If the slice is shorter than +size, the iterator returns no values.

    +
    Panics
    +

    Panics if size is 0.

    +
    Examples
    +
    let slice = ['r', 'u', 's', 't'];
    +let mut iter = slice.windows(2);
    +assert_eq!(iter.next().unwrap(), &['r', 'u']);
    +assert_eq!(iter.next().unwrap(), &['u', 's']);
    +assert_eq!(iter.next().unwrap(), &['s', 't']);
    +assert!(iter.next().is_none());
    +

    If the slice is shorter than size:

    + +
    let slice = ['f', 'o', 'o'];
    +let mut iter = slice.windows(4);
    +assert!(iter.next().is_none());
    +

    There’s no windows_mut, as that existing would let safe code violate the +“only one &mut at a time to the same thing” rule. However, you can sometimes +use Cell::as_slice_of_cells in +conjunction with windows to accomplish something similar:

    + +
    use std::cell::Cell;
    +
    +let mut array = ['R', 'u', 's', 't', ' ', '2', '0', '1', '5'];
    +let slice = &mut array[..];
    +let slice_of_cells: &[Cell<char>] = Cell::from_mut(slice).as_slice_of_cells();
    +for w in slice_of_cells.windows(3) {
    +    Cell::swap(&w[0], &w[2]);
    +}
    +assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
    +
    1.0.0 · source

    pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See chunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and rchunks for the same iterator but starting at the end of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert_eq!(iter.next().unwrap(), &['m']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of chunks.

    +

    See chunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and rchunks_exact for the same iterator but starting at the end of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub unsafe fn as_chunks_unchecked<const N: usize>(&self) -> &[[T; N]]

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +assuming that there’s no remainder.

    +
    Safety
    +

    This may only be called when

    +
      +
    • The slice splits exactly into N-element chunks (aka self.len() % N == 0).
    • +
    • N != 0.
    • +
    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice: &[char] = &['l', 'o', 'r', 'e', 'm', '!'];
    +let chunks: &[[char; 1]] =
    +    // SAFETY: 1-element chunks never have remainder
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l'], ['o'], ['r'], ['e'], ['m'], ['!']]);
    +let chunks: &[[char; 3]] =
    +    // SAFETY: The slice length (6) is a multiple of 3
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l', 'o', 'r'], ['e', 'm', '!']]);
    +
    +// These would be unsound:
    +// let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5
    +// let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed
    +
    source

    pub fn as_chunks<const N: usize>(&self) -> (&[[T; N]], &[T])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the beginning of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (chunks, remainder) = slice.as_chunks();
    +assert_eq!(chunks, &[['l', 'o'], ['r', 'e']]);
    +assert_eq!(remainder, &['m']);
    +

    If you expect the slice to be an exact multiple, you can combine +let-else with an empty slice pattern:

    + +
    #![feature(slice_as_chunks)]
    +let slice = ['R', 'u', 's', 't'];
    +let (chunks, []) = slice.as_chunks::<2>() else {
    +    panic!("slice didn't have even length")
    +};
    +assert_eq!(chunks, &[['R', 'u'], ['s', 't']]);
    +
    source

    pub fn as_rchunks<const N: usize>(&self) -> (&[T], &[[T; N]])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the end of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (remainder, chunks) = slice.as_rchunks();
    +assert_eq!(remainder, &['l']);
    +assert_eq!(chunks, &[['o', 'r'], ['e', 'm']]);
    +
    source

    pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N>

    🔬This is a nightly-only experimental API. (array_chunks)

    Returns an iterator over N elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are array references and do not overlap. If N does not divide the +length of the slice, then the last up to N-1 elements will be omitted and can be +retrieved from the remainder function of the iterator.

    +

    This method is the const generic equivalent of chunks_exact.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.array_chunks();
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N>

    🔬This is a nightly-only experimental API. (array_windows)

    Returns an iterator over overlapping windows of N elements of a slice, +starting at the beginning of the slice.

    +

    This is the const generic equivalent of windows.

    +

    If N is greater than the size of the slice, it will return no windows.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_windows)]
    +let slice = [0, 1, 2, 3];
    +let mut iter = slice.array_windows();
    +assert_eq!(iter.next().unwrap(), &[0, 1]);
    +assert_eq!(iter.next().unwrap(), &[1, 2]);
    +assert_eq!(iter.next().unwrap(), &[2, 3]);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the end +of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See rchunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and chunks for the same iterator but starting at the beginning +of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert_eq!(iter.next().unwrap(), &['l']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +end of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of rchunks.

    +

    See rchunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and chunks_exact for the same iterator but starting at the beginning of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['l']);
    +
    source

    pub fn group_by<F>(&self, pred: F) -> GroupBy<'_, T, F>where + F: FnMut(&T, &T) -> bool,

    🔬This is a nightly-only experimental API. (slice_group_by)

    Returns an iterator over the slice producing non-overlapping runs +of elements using the predicate to separate them.

    +

    The predicate is called on two elements following themselves, +it means the predicate is called on slice[0] and slice[1] +then on slice[1] and slice[2] and so on.

    +
    Examples
    +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
    +
    +let mut iter = slice.group_by(|a, b| a == b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
    +assert_eq!(iter.next(), Some(&[3, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
    +assert_eq!(iter.next(), None);
    +

    This method can be used to extract the sorted subslices:

    + +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 2, 3, 2, 3, 2, 3, 4];
    +
    +let mut iter = slice.group_by(|a, b| a <= b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3, 4][..]));
    +assert_eq!(iter.next(), None);
    +
    1.0.0 · source

    pub fn split_at(&self, mid: usize) -> (&[T], &[T])

    Divides one slice into two at an index.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if mid > len.

    +
    Examples
    +
    let v = [1, 2, 3, 4, 5, 6];
    +
    +{
    +   let (left, right) = v.split_at(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T])

    🔬This is a nightly-only experimental API. (slice_split_at_unchecked)

    Divides one slice into two at an index, without doing bounds checking.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +

    For a safe alternative see split_at.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used. The caller has to ensure that +0 <= mid <= self.len().

    +
    Examples
    +
    #![feature(slice_split_at_unchecked)]
    +
    +let v = [1, 2, 3, 4, 5, 6];
    +
    +unsafe {
    +   let (left, right) = v.split_at_unchecked(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn split_array_ref<const N: usize>(&self) -> (&[T; N], &[T])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index.

    +

    The array will contain all indices from [0, N) (excluding +the index N itself) and the slice will contain all +indices from [N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.split_array_ref::<0>();
    +   assert_eq!(left, &[]);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<2>();
    +    assert_eq!(left, &[1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<6>();
    +    assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn rsplit_array_ref<const N: usize>(&self) -> (&[T], &[T; N])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index from +the end.

    +

    The slice will contain all indices from [0, len - N) (excluding +the index len - N itself) and the array will contain all +indices from [len - N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.rsplit_array_ref::<0>();
    +   assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +   assert_eq!(right, &[]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<2>();
    +    assert_eq!(left, [1, 2, 3, 4]);
    +    assert_eq!(right, &[5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<6>();
    +    assert_eq!(left, []);
    +    assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
    +}
    +
    1.0.0 · source

    pub fn split<F>(&self, pred: F) -> Split<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the first element is matched, an empty slice will be the first item +returned by the iterator. Similarly, if the last element in the slice +is matched, an empty slice will be the last item returned by the +iterator:

    + +
    let slice = [10, 40, 33];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert!(iter.next().is_none());
    +

    If two matched elements are directly adjacent, an empty slice will be +present between them:

    + +
    let slice = [10, 6, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +
    1.51.0 · source

    pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is contained in the end of the previous +subslice as a terminator.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the last element of the slice is matched, +that element will be considered the terminator of the preceding slice. +That slice will be the last item returned by the iterator.

    + +
    let slice = [3, 10, 40, 33];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[3]);
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert!(iter.next().is_none());
    +
    1.27.0 · source

    pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, starting at the end of the slice and working backwards. +The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [11, 22, 33, 0, 44, 55];
    +let mut iter = slice.rsplit(|num| *num == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[44, 55]);
    +assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
    +assert_eq!(iter.next(), None);
    +

    As with split(), if the first or last element is matched, an empty +slice will be the first (or last) item returned by the iterator.

    + +
    let v = &[0, 1, 1, 2, 3, 5, 8];
    +let mut it = v.rsplit(|n| *n % 2 == 0);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next().unwrap(), &[3, 5]);
    +assert_eq!(it.next().unwrap(), &[1, 1]);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next(), None);
    +
    1.0.0 · source

    pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, limited to returning at most n items. The matched element is +not contained in the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once by numbers divisible by 3 (i.e., [10, 40], +[20, 60, 50]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.splitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred limited to returning at most n items. This starts at the end of +the slice and works backwards. The matched element is not contained in +the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once, starting from the end, by numbers divisible +by 3 (i.e., [50], [10, 40, 30, 20]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.rsplitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn contains(&self, x: &T) -> boolwhere + T: PartialEq<T>,

    Returns true if the slice contains an element with the given value.

    +

    This operation is O(n).

    +

    Note that if you have a sorted slice, binary_search may be faster.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.contains(&30));
    +assert!(!v.contains(&50));
    +

    If you do not have a &T, but some other value that you can compare +with one (for example, String implements PartialEq<str>), you can +use iter().any:

    + +
    let v = [String::from("hello"), String::from("world")]; // slice of `String`
    +assert!(v.iter().any(|e| e == "hello")); // search with `&str`
    +assert!(!v.iter().any(|e| e == "hi"));
    +
    1.0.0 · source

    pub fn starts_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a prefix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.starts_with(&[10]));
    +assert!(v.starts_with(&[10, 40]));
    +assert!(!v.starts_with(&[50]));
    +assert!(!v.starts_with(&[10, 50]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.starts_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.starts_with(&[]));
    +
    1.0.0 · source

    pub fn ends_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a suffix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.ends_with(&[30]));
    +assert!(v.ends_with(&[40, 30]));
    +assert!(!v.ends_with(&[50]));
    +assert!(!v.ends_with(&[50, 30]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.ends_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.ends_with(&[]));
    +
    1.51.0 · source

    pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the prefix removed.

    +

    If the slice starts with prefix, returns the subslice after the prefix, wrapped in Some. +If prefix is empty, simply returns the original slice.

    +

    If the slice does not start with prefix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
    +assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
    +assert_eq!(v.strip_prefix(&[50]), None);
    +assert_eq!(v.strip_prefix(&[10, 50]), None);
    +
    +let prefix : &str = "he";
    +assert_eq!(b"hello".strip_prefix(prefix.as_bytes()),
    +           Some(b"llo".as_ref()));
    +
    1.51.0 · source

    pub fn strip_suffix<P>(&self, suffix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the suffix removed.

    +

    If the slice ends with suffix, returns the subslice before the suffix, wrapped in Some. +If suffix is empty, simply returns the original slice.

    +

    If the slice does not end with suffix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
    +assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
    +assert_eq!(v.strip_suffix(&[50]), None);
    +assert_eq!(v.strip_suffix(&[50, 30]), None);
    +

    Binary searches this slice for a given element. +If the slice is not sorted, the returned result is unspecified and +meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search_by, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +assert_eq!(s.binary_search(&13),  Ok(9));
    +assert_eq!(s.binary_search(&4),   Err(7));
    +assert_eq!(s.binary_search(&100), Err(13));
    +let r = s.binary_search(&1);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +

    If you want to find that whole range of matching items, rather than +an arbitrary matching one, that can be done using partition_point:

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let low = s.partition_point(|x| x < &1);
    +assert_eq!(low, 1);
    +let high = s.partition_point(|x| x <= &1);
    +assert_eq!(high, 5);
    +let r = s.binary_search(&1);
    +assert!((low..high).contains(&r.unwrap()));
    +
    +assert!(s[..low].iter().all(|&x| x < 1));
    +assert!(s[low..high].iter().all(|&x| x == 1));
    +assert!(s[high..].iter().all(|&x| x > 1));
    +
    +// For something not found, the "range" of equal items is empty
    +assert_eq!(s.partition_point(|x| x < &11), 9);
    +assert_eq!(s.partition_point(|x| x <= &11), 9);
    +assert_eq!(s.binary_search(&11), Err(9));
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order, consider using partition_point:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +// The above is equivalent to `let idx = s.binary_search(&num).unwrap_or_else(|x| x);`
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize>where + F: FnMut(&'a T) -> Ordering,

    Binary searches this slice with a comparator function.

    +

    The comparator function should return an order code that indicates +whether its argument is Less, Equal or Greater the desired +target. +If the slice is not sorted or if the comparator function does not +implement an order consistent with the sort order of the underlying +slice, the returned result is unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let seek = 13;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
    +let seek = 4;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
    +let seek = 100;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
    +let seek = 1;
    +let r = s.binary_search_by(|probe| probe.cmp(&seek));
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.10.0 · source

    pub fn binary_search_by_key<'a, B, F>( + &'a self, + b: &B, + f: F +) -> Result<usize, usize>where + F: FnMut(&'a T) -> B, + B: Ord,

    Binary searches this slice with a key extraction function.

    +

    Assumes that the slice is sorted by the key, for instance with +sort_by_key using the same key extraction function. +If the slice is not sorted by the key, the returned result is +unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements in a slice of pairs sorted by +their second elements. The first is found, with a uniquely +determined position; the second and third are not found; the +fourth could match any position in [1, 4].

    + +
    let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
    +         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
    +         (1, 21), (2, 34), (4, 55)];
    +
    +assert_eq!(s.binary_search_by_key(&13, |&(a, b)| b),  Ok(9));
    +assert_eq!(s.binary_search_by_key(&4, |&(a, b)| b),   Err(7));
    +assert_eq!(s.binary_search_by_key(&100, |&(a, b)| b), Err(13));
    +let r = s.binary_search_by_key(&1, |&(a, b)| b);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.30.0 · source

    pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])

    Transmute the slice to a slice of another type, ensuring alignment of the types is +maintained.

    +

    This method splits the slice into three distinct slices: prefix, correctly aligned middle +slice of a new type, and the suffix slice. How exactly the slice is split up is not +specified; the middle part may be smaller than necessary. However, if this fails to return a +maximal middle part, that is because code is running in a context where performance does not +matter, such as a sanitizer attempting to find alignment bugs. Regular code running +in a default (debug or release) execution will return a maximal middle part.

    +

    This method has no purpose when either input element T or output element U are +zero-sized and will return the original slice without splitting anything.

    +
    Safety
    +

    This method is essentially a transmute with respect to the elements in the returned +middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

    +
    Examples
    +

    Basic usage:

    + +
    unsafe {
    +    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    +    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
    +    // less_efficient_algorithm_for_bytes(prefix);
    +    // more_efficient_algorithm_for_aligned_shorts(shorts);
    +    // less_efficient_algorithm_for_bytes(suffix);
    +}
    +
    source

    pub fn as_simd<const LANES: usize>(&self) -> (&[T], &[Simd<T, LANES>], &[T])where + Simd<T, LANES>: AsRef<[T; LANES]>, + T: SimdElement, + LaneCount<LANES>: SupportedLaneCount,

    🔬This is a nightly-only experimental API. (portable_simd)

    Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.

    +

    This is a safe wrapper around slice::align_to, so has the same weak +postconditions as that method. You’re only assured that +self.len() == prefix.len() + middle.len() * LANES + suffix.len().

    +

    Notably, all of the following are possible:

    +
      +
    • prefix.len() >= LANES.
    • +
    • middle.is_empty() despite self.len() >= 3 * LANES.
    • +
    • suffix.len() >= LANES.
    • +
    +

    That said, this is a safe method, so if you’re only writing safe code, +then this can at most cause incorrect logic, not unsoundness.

    +
    Panics
    +

    This will panic if the size of the SIMD type is different from +LANES times that of the scalar.

    +

    At the time of writing, the trait restrictions on Simd<T, LANES> keeps +that from ever happening, as only power-of-two numbers of lanes are +supported. It’s possible that, in the future, those restrictions might +be lifted in a way that would make it possible to see panics from this +method for something like LANES == 3.

    +
    Examples
    +
    #![feature(portable_simd)]
    +use core::simd::SimdFloat;
    +
    +let short = &[1, 2, 3];
    +let (prefix, middle, suffix) = short.as_simd::<4>();
    +assert_eq!(middle, []); // Not enough elements for anything in the middle
    +
    +// They might be split in any possible way between prefix and suffix
    +let it = prefix.iter().chain(suffix).copied();
    +assert_eq!(it.collect::<Vec<_>>(), vec![1, 2, 3]);
    +
    +fn basic_simd_sum(x: &[f32]) -> f32 {
    +    use std::ops::Add;
    +    use std::simd::f32x4;
    +    let (prefix, middle, suffix) = x.as_simd();
    +    let sums = f32x4::from_array([
    +        prefix.iter().copied().sum(),
    +        0.0,
    +        0.0,
    +        suffix.iter().copied().sum(),
    +    ]);
    +    let sums = middle.iter().copied().fold(sums, f32x4::add);
    +    sums.reduce_sum()
    +}
    +
    +let numbers: Vec<f32> = (1..101).map(|x| x as _).collect();
    +assert_eq!(basic_simd_sum(&numbers[1..99]), 4949.0);
    +
    source

    pub fn is_sorted(&self) -> boolwhere + T: PartialOrd<T>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted.

    +

    That is, for each element a and its following element b, a <= b must hold. If the +slice yields exactly zero or one element, true is returned.

    +

    Note that if Self::Item is only PartialOrd, but not Ord, the above definition +implies that this function returns false if any two consecutive items are not +comparable.

    +
    Examples
    +
    #![feature(is_sorted)]
    +let empty: [i32; 0] = [];
    +
    +assert!([1, 2, 2, 9].is_sorted());
    +assert!(![1, 3, 2, 4].is_sorted());
    +assert!([0].is_sorted());
    +assert!(empty.is_sorted());
    +assert!(![0.0, 1.0, f32::NAN].is_sorted());
    +
    source

    pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> boolwhere + F: FnMut(&'a T, &'a T) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given comparator function.

    +

    Instead of using PartialOrd::partial_cmp, this function uses the given compare +function to determine the ordering of two elements. Apart from that, it’s equivalent to +is_sorted; see its documentation for more information.

    +
    source

    pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> boolwhere + F: FnMut(&'a T) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given key extraction function.

    +

    Instead of comparing the slice’s elements directly, this function compares the keys of the +elements, as determined by f. Apart from that, it’s equivalent to is_sorted; see its +documentation for more information.

    +
    Examples
    +
    #![feature(is_sorted)]
    +
    +assert!(["c", "bb", "aaa"].is_sorted_by_key(|s| s.len()));
    +assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));
    +
    1.52.0 · source

    pub fn partition_point<P>(&self, pred: P) -> usizewhere + P: FnMut(&T) -> bool,

    Returns the index of the partition point according to the given predicate +(the index of the first element of the second partition).

    +

    The slice is assumed to be partitioned according to the given predicate. +This means that all elements for which the predicate returns true are at the start of the slice +and all elements for which the predicate returns false are at the end. +For example, [7, 15, 3, 5, 4, 12, 6] is partitioned under the predicate x % 2 != 0 +(all odd numbers are at the start, all even at the end).

    +

    If this slice is not partitioned, the returned result is unspecified and meaningless, +as this method performs a kind of binary search.

    +

    See also binary_search, binary_search_by, and binary_search_by_key.

    +
    Examples
    +
    let v = [1, 2, 3, 3, 5, 6, 7];
    +let i = v.partition_point(|&x| x < 5);
    +
    +assert_eq!(i, 4);
    +assert!(v[..i].iter().all(|&x| x < 5));
    +assert!(v[i..].iter().all(|&x| !(x < 5)));
    +

    If all elements of the slice match the predicate, including if the slice +is empty, then the length of the slice will be returned:

    + +
    let a = [2, 4, 8];
    +assert_eq!(a.partition_point(|x| x < &100), a.len());
    +let a: [i32; 0] = [];
    +assert_eq!(a.partition_point(|x| x < &100), 0);
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn to_vec(&self) -> Vec<T, Global>where + T: Clone,

    Copies self into a new Vec.

    +
    Examples
    +
    let s = [10, 40, 30];
    +let x = s.to_vec();
    +// Here, `s` and `x` can be modified independently.
    +
    source

    pub fn to_vec_in<A>(&self, alloc: A) -> Vec<T, A>where + A: Allocator, + T: Clone,

    🔬This is a nightly-only experimental API. (allocator_api)

    Copies self into a new Vec with an allocator.

    +
    Examples
    +
    #![feature(allocator_api)]
    +
    +use std::alloc::System;
    +
    +let s = [10, 40, 30];
    +let x = s.to_vec_in(System);
    +// Here, `s` and `x` can be modified independently.
    +
    1.40.0 · source

    pub fn repeat(&self, n: usize) -> Vec<T, Global>where + T: Copy,

    Creates a vector by copying a slice n times.

    +
    Panics
    +

    This function will panic if the capacity would overflow.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
    +

    A panic upon overflow:

    + +
    // this will panic at runtime
    +b"0123456789abcdef".repeat(usize::MAX);
    +
    1.0.0 · source

    pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where + [T]: Concat<Item>, + Item: ?Sized,

    Flattens a slice of T into a single value Self::Output.

    +
    Examples
    +
    assert_eq!(["hello", "world"].concat(), "helloworld");
    +assert_eq!([[1, 2], [3, 4]].concat(), [1, 2, 3, 4]);
    +
    1.3.0 · source

    pub fn join<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].join(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
    +assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
    +
    1.0.0 · source

    pub fn connect<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    👎Deprecated since 1.3.0: renamed to join

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].connect(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    +
    1.23.0 · source

    pub fn to_ascii_uppercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII upper case equivalent.

    +

    ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, +but non-ASCII letters are unchanged.

    +

    To uppercase the value in-place, use make_ascii_uppercase.

    +
    1.23.0 · source

    pub fn to_ascii_lowercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII lower case equivalent.

    +

    ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, +but non-ASCII letters are unchanged.

    +

    To lowercase the value in-place, use make_ascii_lowercase.

    +

    Trait Implementations§

    1.0.0 · source§

    impl<T, A> Deref for Vec<T, A>where + A: Allocator,

    §

    type Target = [T]

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &[T]

    Dereferences the value.
    \ No newline at end of file diff --git a/docs/algebra/struct.AdemAlgebra.html b/docs/algebra/struct.AdemAlgebra.html index 896f1a17a..bbd1644b7 100644 --- a/docs/algebra/struct.AdemAlgebra.html +++ b/docs/algebra/struct.AdemAlgebra.html @@ -1,4 +1,4 @@ -AdemAlgebra in algebra - Rust +AdemAlgebra in algebra - Rust @@ -23,72 +23,72 @@ }); -

    Struct algebra::AdemAlgebra

    source ·
    pub struct AdemAlgebra {
    -    p: ValidPrime,
    -    generic: bool,
    -    unstable_enabled: bool,
    -    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
    -    basis_table: OnceVec<Vec<AdemBasisElement>>,
    -    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
    -    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
    -    excess_table: OnceVec<Vec<usize>>,
    +

    Struct algebra::AdemAlgebra

    source ·
    pub struct AdemAlgebra {
    +    p: ValidPrime,
    +    generic: bool,
    +    unstable_enabled: bool,
    +    even_basis_table: OnceVec<Vec<AdemBasisElement>>,
    +    basis_table: OnceVec<Vec<AdemBasisElement>>,
    +    basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>,
    +    multiplication_table: OnceVec<Vec<Vec<FpVector>>>,
    +    excess_table: OnceVec<Vec<usize>>,
     }
    Expand description

    An Algebra implementing the Steenrod algebra, using the Adem basis.

    -

    Fields§

    §p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

    degree -> index -> AdemBasisElement

    -
    §basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

    degree -> AdemBasisElement -> index

    -
    §multiplication_table: OnceVec<Vec<Vec<FpVector>>>

    degree -> first square -> admissible sequence idx -> result

    -
    §excess_table: OnceVec<Vec<usize>>

    Implementations§

    source§

    impl AdemAlgebra

    source

    pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

    Constructs a new AdemAlgebra.

    -
    source

    pub fn generic(&self) -> bool

    source

    pub fn q(&self) -> i32

    source

    fn generate_basis_even(&self, max_degree: i32)

    source

    fn generate_basis2(&self, max_degree: i32)

    source

    fn generate_basis_generic(&self, max_degree: i32)

    source

    fn generate_basis_element_to_index_map(&self, max_degree: i32)

    source

    pub fn basis_element_from_index( - &self, - degree: i32, - idx: usize +

    Fields§

    §p: ValidPrime§generic: bool§unstable_enabled: bool§even_basis_table: OnceVec<Vec<AdemBasisElement>>§basis_table: OnceVec<Vec<AdemBasisElement>>

    degree -> index -> AdemBasisElement

    +
    §basis_element_to_index_map: OnceVec<FxHashMap<AdemBasisElement, usize>>

    degree -> AdemBasisElement -> index

    +
    §multiplication_table: OnceVec<Vec<Vec<FpVector>>>

    degree -> first square -> admissible sequence idx -> result

    +
    §excess_table: OnceVec<Vec<usize>>

    Implementations§

    source§

    impl AdemAlgebra

    source

    pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

    Constructs a new AdemAlgebra.

    +
    source

    pub fn generic(&self) -> bool

    source

    pub fn q(&self) -> i32

    source

    fn generate_basis_even(&self, max_degree: i32)

    source

    fn generate_basis2(&self, max_degree: i32)

    source

    fn generate_basis_generic(&self, max_degree: i32)

    source

    fn generate_basis_element_to_index_map(&self, max_degree: i32)

    source

    pub fn basis_element_from_index( + &self, + degree: i32, + idx: usize ) -> &AdemBasisElement

    source

    pub fn try_basis_element_to_index( &self, elt: &AdemBasisElement -) -> Option<usize>

    source

    pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

    source

    fn tail_of_basis_element_to_index( +) -> Option<usize>

    source

    pub fn basis_element_to_index(&self, elt: &AdemBasisElement) -> usize

    source

    fn tail_of_basis_element_to_index( &self, elt: &mut AdemBasisElement, - idx: u32, - q: u32 -) -> usize

    source

    fn generate_multiplication_table_2(&self, max_degree: i32)

    source

    fn generate_multiplication_table_2_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

    source

    fn generate_multiplication_table_generic(&self, max_degree: i32)

    source

    fn generate_multiplication_table_generic_step( - &self, - table: &[Vec<FpVector>], - n: i32, - x: i32, - idx: usize -) -> FpVector

    This function expresses $Sq^x$ (current) in terms of the admissible basis and returns + idx: u32, + q: u32 +) -> usize

    source

    fn generate_multiplication_table_2(&self, max_degree: i32)

    source

    fn generate_multiplication_table_2_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

    source

    fn generate_multiplication_table_generic(&self, max_degree: i32)

    source

    fn generate_multiplication_table_generic_step( + &self, + table: &[Vec<FpVector>], + n: i32, + x: i32, + idx: usize +) -> FpVector

    This function expresses $Sq^x$ (current) in terms of the admissible basis and returns the result as an FpVector, where (current) is the admissible monomial of degree $n - qx$ (so that $Sq^x)$ (current) has degree $n$) and index idx.

    Here $Sq^x$ means $P^{x/2}$ if $x$ is even and $\beta P^{(x-1)/2}$ if $x$ is odd.

    Note that x is always positive.

    source

    pub fn multiply_inner( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source

    pub fn make_mono_admissible( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - excess: i32 + excess: i32 )

    source

    fn make_mono_admissible_2( &self, - result: SliceMut<'_>, + result: SliceMut<'_>, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

    Reduce a Steenrod monomial at the prime 2.

    Arguments:
    source

    fn make_mono_admissible_generic( &self, - result: SliceMut<'_>, - coeff: u32, + result: SliceMut<'_>, + coeff: u32, monomial: &mut AdemBasisElement, - idx: i32, - leading_degree: i32, - excess: i32, - stop_early: bool + idx: i32, + leading_degree: i32, + excess: i32, + stop_early: bool )

    source

    fn decompose_basis_element_2( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    source

    fn decompose_basis_element_generic( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    source

    fn decompose_basis_element_generic( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    source

    pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

    source§

    impl AdemAlgebra

    source

    fn generate_excess_table(&self, max_degree: i32)

    Trait Implementations§

    source§

    impl AdemAlgebraT for AdemAlgebra

    source§

    impl Algebra for AdemAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
    source

    pub fn beps_pn(&self, e: u32, x: u32) -> (i32, usize)

    source§

    impl AdemAlgebra

    source

    fn generate_excess_table(&self, max_degree: i32)

    Trait Implementations§

    source§

    impl AdemAlgebraT for AdemAlgebra

    source§

    impl Algebra for AdemAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize +disasterous consequences. So we store the magic in the save files. Read more

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
    source§

    fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for AdemAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for AdemAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for AdemAlgebra

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for AdemAlgebra

    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    impl Display for AdemAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for AdemAlgebra

    source§

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    We return Adem relations $b^2 = 0$, $P^i P^j = \cdots$ for $i < pj$, and $P^i b P^j = \cdots$ for $i < pj + 1$. It suffices to check these because they generate all relations.

    -
    source§

    fn generator_to_string(&self, degree: i32, _idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( +

    source§

    fn generator_to_string(&self, degree: i32, _idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    impl PairAlgebra for AdemAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(_elt: &Self::Element) -> bool

    source§

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the -complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
    Decomposes an element into generators. Read more
    source§

    impl PairAlgebra for AdemAlgebra

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn element_is_zero(_elt: &Self::Element) -> bool

    source§

    fn finalize_element(_elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the +complement of the image of the differential.
    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said -indecomposable.
    source§

    fn new_pair_element(&self, _degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( +indecomposable.

    source§

    fn new_pair_element(&self, _degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn sigma_multiply_basis( &self, _result: &mut Self::Element, - _coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + _coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to -result.
    source§

    fn a_multiply( +result.

    source§

    fn a_multiply( &self, - _result: SliceMut<'_>, - _coeff: u32, - _r_degree: i32, - _r: Slice<'_>, - _s_degree: i32, + _result: SliceMut<'_>, + _coeff: u32, + _r_degree: i32, + _r: Slice<'_>, + _s_degree: i32, _s: &Self::Element -)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( +)

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( &self, _elt: &Self::Element, - _buffer: &mut impl Write -) -> Result<()>

    source§

    fn element_from_bytes( + _buffer: &mut impl Write +) -> Result<()>

    source§

    fn element_from_bytes( &self, - _degree: i32, - _buffer: &mut impl Read -) -> Result<Self::Element>

    source§

    fn sigma_multiply( + _degree: i32, + _buffer: &mut impl Read +) -> Result<Self::Element>

    source§

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for AdemAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a AdemAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for AdemAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    +From<T> for U chooses to do.

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/struct.Field.html b/docs/algebra/struct.Field.html index 704c24f20..15fbff252 100644 --- a/docs/algebra/struct.Field.html +++ b/docs/algebra/struct.Field.html @@ -1,4 +1,4 @@ -Field in algebra - Rust +Field in algebra - Rust @@ -23,108 +23,108 @@ }); -

    Struct algebra::Field

    source ·
    pub struct Field {
    -    prime: ValidPrime,
    +

    Struct algebra::Field

    source ·
    pub struct Field {
    +    prime: ValidPrime,
     }
    Expand description

    $\mathbb{F}_p$, viewed as an Algebra over itself.

    As an Algebra, a field is one-dimensional, with basis element 1. It is also trivially a coalgebra via the trivial diagonal comultiplication, and thus a Bialgebra.

    -

    Fields§

    §prime: ValidPrime

    Implementations§

    source§

    impl Field

    source

    pub fn new(p: ValidPrime) -> Self

    Returns a new Field over the given prime p.

    -

    Trait Implementations§

    source§

    impl Algebra for Field

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, _degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( +

    Fields§

    §prime: ValidPrime

    Implementations§

    source§

    impl Field

    source

    pub fn new(p: ValidPrime) -> Self

    Returns a new Field over the given prime p.

    +

    Trait Implementations§

    source§

    impl Algebra for Field

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn compute_basis(&self, _degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( &self, - result: SliceMut<'_>, - coeff: u32, - _r_degree: i32, - _r_idx: usize, - _s_degree: i32, - _s_idx: usize + result: SliceMut<'_>, + coeff: u32, + _r_degree: i32, + _r_idx: usize, + _s_degree: i32, + _s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, _idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    fn basis_element_from_string(&self, _elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is -implemented). Read more
    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the +implemented). Read more
    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl Bialgebra for Field

    source§

    fn coproduct( &self, - _op_deg: i32, - _op_idx: usize -) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for Field

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Field

    §

    impl Send for Field

    §

    impl Sync for Field

    §

    impl Unpin for Field

    §

    impl UnwindSafe for Field

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + _op_deg: i32, + _op_idx: usize +) -> Vec<(i32, usize, i32, usize)>
    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, _op_deg: i32, _op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for Field

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Field

    §

    impl Send for Field

    §

    impl Sync for Field

    §

    impl Unpin for Field

    §

    impl UnwindSafe for Field

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    +From<T> for U chooses to do.

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/struct.MilnorAlgebra.html b/docs/algebra/struct.MilnorAlgebra.html index b8440f88c..9815525d7 100644 --- a/docs/algebra/struct.MilnorAlgebra.html +++ b/docs/algebra/struct.MilnorAlgebra.html @@ -1,4 +1,4 @@ -MilnorAlgebra in algebra - Rust +MilnorAlgebra in algebra - Rust @@ -23,290 +23,290 @@ }); -

    Struct algebra::MilnorAlgebra

    source ·
    pub struct MilnorAlgebra {
    +

    Struct algebra::MilnorAlgebra

    source ·
    pub struct MilnorAlgebra {
         profile: MilnorProfile,
    -    p: ValidPrime,
    -    generic: bool,
    -    unstable_enabled: bool,
    -    ppart_table: OnceVec<Vec<PPart>>,
    -    basis_table: OnceVec<Vec<MilnorBasisElement>>,
    -    excess_table: OnceVec<Vec<usize>>,
    -    basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>,
    -    multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>,
    -}

    Fields§

    §profile: MilnorProfile§p: ValidPrime§generic: bool§unstable_enabled: bool§ppart_table: OnceVec<Vec<PPart>>

    This is a list of possible P(R) of each degree, where ppart_table[i] contains elements of + p: ValidPrime, + generic: bool, + unstable_enabled: bool, + ppart_table: OnceVec<Vec<PPart>>, + basis_table: OnceVec<Vec<MilnorBasisElement>>, + excess_table: OnceVec<Vec<usize>>, + basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>, + multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>, +}

    Fields§

    §profile: MilnorProfile§p: ValidPrime§generic: bool§unstable_enabled: bool§ppart_table: OnceVec<Vec<PPart>>

    This is a list of possible P(R) of each degree, where ppart_table[i] contains elements of degree q * i.

    -
    §basis_table: OnceVec<Vec<MilnorBasisElement>>

    A list of all basis elements of each degree, constructed from Self::ppart_table

    -
    §excess_table: OnceVec<Vec<usize>>§basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>

    degree -> MilnorBasisElement -> index

    -
    §multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>

    source_deg -> target_deg -> source_op -> target_op

    -

    Implementations§

    source§

    impl MilnorAlgebra

    source

    pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

    source

    pub fn new_with_profile( - p: ValidPrime, +

    §basis_table: OnceVec<Vec<MilnorBasisElement>>

    A list of all basis elements of each degree, constructed from Self::ppart_table

    +
    §excess_table: OnceVec<Vec<usize>>§basis_element_to_index_map: OnceVec<FxHashMap<MilnorBasisElement, usize>>

    degree -> MilnorBasisElement -> index

    +
    §multiplication_table: OnceVec<OnceVec<Vec<Vec<FpVector>>>>

    source_deg -> target_deg -> source_op -> target_op

    +

    Implementations§

    source§

    impl MilnorAlgebra

    source

    pub fn new(p: ValidPrime, unstable_enabled: bool) -> Self

    source

    pub fn new_with_profile( + p: ValidPrime, profile: MilnorProfile, - unstable_enabled: bool -) -> Self

    source

    pub fn generic(&self) -> bool

    source

    pub fn q(&self) -> i32

    source

    pub fn profile(&self) -> &MilnorProfile

    source

    pub fn basis_element_from_index( + unstable_enabled: bool +) -> Self

    source

    pub fn generic(&self) -> bool

    source

    pub fn q(&self) -> i32

    source

    pub fn profile(&self) -> &MilnorProfile

    source

    pub fn basis_element_from_index( &self, - degree: i32, - idx: usize -) -> &MilnorBasisElement

    source

    pub fn try_basis_element_to_index( + degree: i32, + idx: usize +) -> &MilnorBasisElement

    source

    pub fn try_basis_element_to_index( &self, elt: &MilnorBasisElement -) -> Option<usize>

    source

    pub fn basis_element_to_index(&self, elt: &MilnorBasisElement) -> usize

    source

    pub fn ppart_table(&self, t: i32) -> &[PPart]

    Gives a list of PPart’s in degree t.

    -
    source§

    impl MilnorAlgebra

    source

    fn compute_ppart(&self, max_degree: i32)

    source

    fn generate_basis_generic(&self, max_degree: i32)

    source

    fn generate_basis_2(&self, max_degree: i32)

    source

    fn generate_excess_table(&self, max_degree: i32)

    source§

    impl MilnorAlgebra

    source

    fn try_beps_pn(&self, e: u32, x: PPartEntry) -> Option<(i32, usize)>

    source

    pub fn beps_pn(&self, e: u32, x: PPartEntry) -> (i32, usize)

    Return the degree and index of $Q_1^e P(x)$.

    -
    source

    fn multiply_qpart( +) -> Option<usize>

    source

    pub fn basis_element_to_index(&self, elt: &MilnorBasisElement) -> usize

    source

    pub fn ppart_table(&self, t: i32) -> &[PPart]

    Gives a list of PPart’s in degree t.

    +
    source§

    impl MilnorAlgebra

    source

    fn compute_ppart(&self, max_degree: i32)

    source

    fn generate_basis_generic(&self, max_degree: i32)

    source

    fn generate_basis_2(&self, max_degree: i32)

    source

    fn generate_excess_table(&self, max_degree: i32)

    source§

    impl MilnorAlgebra

    source

    fn try_beps_pn(&self, e: u32, x: PPartEntry) -> Option<(i32, usize)>

    source

    pub fn beps_pn(&self, e: u32, x: PPartEntry) -> (i32, usize)

    Return the degree and index of $Q_1^e P(x)$.

    +
    source

    fn multiply_qpart( &self, m1: &MilnorBasisElement, - f: u32 -) -> Vec<(u32, MilnorBasisElement)>

    source

    pub fn multiply( + f: u32 +) -> Vec<(u32, MilnorBasisElement)>

    source

    pub fn multiply( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, m2: &MilnorBasisElement -)

    source

    pub fn multiply_with_allocation( +)

    source

    pub fn multiply_with_allocation( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, m2: &MilnorBasisElement, - excess: i32, + excess: i32, allocation: PPartAllocation -) -> PPartAllocation

    source

    pub fn multiply_basis_by_element( +) -> PPartAllocation

    source

    pub fn multiply_basis_by_element( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, - s_deg: i32, - s: Slice<'_> -)

    source

    fn multiply_basis_by_element_with_allocation( + s_deg: i32, + s: Slice<'_> +)

    source

    fn multiply_basis_by_element_with_allocation( &self, - res: SliceMut<'_>, - coef: u32, + res: SliceMut<'_>, + coef: u32, m1: &MilnorBasisElement, - s_deg: i32, - s: Slice<'_>, + s_deg: i32, + s: Slice<'_>, allocation: PPartAllocation -) -> PPartAllocation

    source§

    impl MilnorAlgebra

    source§

    impl MilnorAlgebra

    source

    fn decompose_basis_element_qpart( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    source

    fn decompose_basis_element_ppart( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    source

    fn decompose_basis_element_ppart( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    source§

    impl MilnorAlgebra

    source

    fn increment_p_part(element: &mut PPart, max: &[PPartEntry]) -> bool

    Returns true if the new element is not within the bounds

    -

    Trait Implementations§

    source§

    impl Algebra for MilnorAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras -that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>
    source§

    impl MilnorAlgebra

    source

    fn increment_p_part(element: &mut PPart, max: &[PPartEntry]) -> bool

    Returns true if the new element is not within the bounds

    +

    Trait Implementations§

    source§

    impl Algebra for MilnorAlgebra

    source§

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +that don’t care about this problem.
    source§

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have -disasterous consequences. So we store the magic in the save files. Read more
    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( - &self, - result: SliceMut<'_>, - coef: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize +disasterous consequences. So we store the magic in the save files. Read more

    source§

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.
    source§

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$. Read more
    source§

    fn compute_basis(&self, max_degree: i32)

    Computes basis elements up to and including degree. Read more
    source§

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.
    source§

    fn multiply_basis_elements( + &self, + result: SliceMut<'_>, + coef: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of two basis elements, and adds the -result to result. Read more
    source§

    fn multiply_basis_element_by_element( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_basis_element_by_element( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the -result to result. Read more
    source§

    fn multiply_element_by_element( - &self, - res: SliceMut<'_>, - coef: u32, - r_deg: i32, - r: Slice<'_>, - s_deg: i32, - s: Slice<'_> +result to result. Read more

    source§

    fn multiply_element_by_element( + &self, + res: SliceMut<'_>, + coef: u32, + r_deg: i32, + r: Slice<'_>, + s_deg: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +result to result. Read more
    source§

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.
    source§

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented). Read more
    source§

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the -result to result. Read more
    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for MilnorAlgebra

    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of -which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for MilnorAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for MilnorAlgebra

    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( +result to result. Read more

    source§

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.
    source§

    impl Bialgebra for MilnorAlgebra

    source§

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as Read more
    source§

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +which we can compute a coproduct on efficiently. Read more
    source§

    impl Display for MilnorAlgebra

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl GeneratedAlgebra for MilnorAlgebra

    source§

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator. Read more
    source§

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree. Read more
    source§

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators. Read more
    source§

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl MilnorAlgebraT for MilnorAlgebra

    source§

    impl PairAlgebra for MilnorAlgebra

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module. Read more
    source§

    impl MilnorAlgebraT for MilnorAlgebra

    source§

    impl PairAlgebra for MilnorAlgebra

    source§

    fn finalize_element(elt: &mut Self::Element)

    Assert that elt is in the image of the differential. Drop the data recording the complement of the image of the differential.

    §

    type Element = MilnorPairElement

    An element in the cohomological degree zero part of the pair algebra. This tends to not be -a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, +a ring over Fp, so we let the algebra specify how it wants to represent the elements.
    source§

    fn new_pair_element(&self, degree: i32) -> Self::Element

    Create a new zero element in the given degree.
    source§

    fn element_is_zero(elt: &Self::Element) -> bool

    source§

    fn p_tilde(&self) -> usize

    The element p is classified by a filtration on element in Ext of the underlying algebra, which is represented by an indecomposable in degree 1. This returns the index of said indecomposable.
    source§

    fn sigma_multiply_basis( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Given $r, s \in \pi_0(A)$, compute $\sigma(r) \sigma(s)$ and add the result to result.
    source§

    fn a_multiply( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, s: &Self::Element )

    Compute $A(r, s)$ and write the result to result.
    source§

    fn element_to_bytes( &self, elt: &Self::Element, - buffer: &mut impl Write -) -> Result<()>

    source§

    fn element_from_bytes( + buffer: &mut impl Write +) -> Result<()>

    source§

    fn element_from_bytes( &self, - degree: i32, - buffer: &mut impl Read -) -> Result<Self::Element>

    source§

    fn sigma_multiply( + degree: i32, + buffer: &mut impl Read +) -> Result<Self::Element>

    source§

    fn sigma_multiply( &self, result: &mut Self::Element, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> -)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for MilnorAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> +)

    Same as PairAlgebra::sigma_multiply_basis but with non-basis elements.
    source§

    impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra

    §

    type Error = Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a MilnorAlgebra, Self::Error>

    Performs the conversion.
    source§

    impl UnstableAlgebra for MilnorAlgebra

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +result to result. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    +From<T> for U chooses to do.

    source§

    impl<A> MuAlgebra<false> for Awhere - A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - _excess: i32 + A: Algebra,

    source§

    fn dimension_unstable(&self, degree: i32, _excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + _excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + _excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - _excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + _excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result. Read more
    source§

    impl<A> MuAlgebra<true> for Awhere - A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( - &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + A: UnstableAlgebra,

    source§

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source§

    fn multiply_basis_elements_unstable( + &self, + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source§

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source§

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result. Read more
    source§

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the -result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +result to result. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/struct.PolynomialAlgebraMonomial.html b/docs/algebra/struct.PolynomialAlgebraMonomial.html index 5822a1fa4..11e6e779b 100644 --- a/docs/algebra/struct.PolynomialAlgebraMonomial.html +++ b/docs/algebra/struct.PolynomialAlgebraMonomial.html @@ -1,4 +1,4 @@ -PolynomialAlgebraMonomial in algebra - Rust +PolynomialAlgebraMonomial in algebra - Rust @@ -23,32 +23,32 @@ }); -
    pub struct PolynomialAlgebraMonomial {
    -    pub degree: i32,
    -    pub poly: FpVector,
    -    pub ext: FpVector,
    -    pub valid: bool,
    -}

    Fields§

    §degree: i32§poly: FpVector§ext: FpVector§valid: bool

    Implementations§

    source§

    impl PolynomialAlgebraMonomial

    source

    pub fn new(p: ValidPrime) -> Self

    Trait Implementations§

    source§

    impl Clone for PolynomialAlgebraMonomial

    source§

    fn clone(&self) -> PolynomialAlgebraMonomial

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PolynomialAlgebraMonomial

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial

    source§

    fn eq(&self, other: &PolynomialAlgebraMonomial) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolynomialAlgebraMonomial

    source§

    impl StructuralEq for PolynomialAlgebraMonomial

    source§

    impl StructuralPartialEq for PolynomialAlgebraMonomial

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere - T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct PolynomialAlgebraMonomial {
    +    pub degree: i32,
    +    pub poly: FpVector,
    +    pub ext: FpVector,
    +    pub valid: bool,
    +}

    Fields§

    §degree: i32§poly: FpVector§ext: FpVector§valid: bool

    Implementations§

    Trait Implementations§

    source§

    impl Clone for PolynomialAlgebraMonomial

    source§

    fn clone(&self) -> PolynomialAlgebraMonomial

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolynomialAlgebraMonomial

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PolynomialAlgebraMonomial

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial

    source§

    fn eq(&self, other: &PolynomialAlgebraMonomial) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolynomialAlgebraMonomial

    source§

    impl StructuralEq for PolynomialAlgebraMonomial

    source§

    impl StructuralPartialEq for PolynomialAlgebraMonomial

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere + T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/struct.PolynomialAlgebraTableEntry.html b/docs/algebra/struct.PolynomialAlgebraTableEntry.html index babb856fe..41d7f1c1c 100644 --- a/docs/algebra/struct.PolynomialAlgebraTableEntry.html +++ b/docs/algebra/struct.PolynomialAlgebraTableEntry.html @@ -1,4 +1,4 @@ -PolynomialAlgebraTableEntry in algebra - Rust +PolynomialAlgebraTableEntry in algebra - Rust @@ -23,17 +23,17 @@ }); -
    pub struct PolynomialAlgebraTableEntry {
    -    pub index_to_monomial: Vec<PolynomialAlgebraMonomial>,
    -    pub monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>,
    -}

    Fields§

    §index_to_monomial: Vec<PolynomialAlgebraMonomial>§monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>

    Implementations§

    Trait Implementations§

    source§

    impl Default for PolynomialAlgebraTableEntry

    source§

    fn default() -> PolynomialAlgebraTableEntry

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct PolynomialAlgebraTableEntry {
    +    pub index_to_monomial: Vec<PolynomialAlgebraMonomial>,
    +    pub monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>,
    +}

    Fields§

    §index_to_monomial: Vec<PolynomialAlgebraMonomial>§monomial_to_index: FxHashMap<PolynomialAlgebraMonomial, usize>

    Implementations§

    Trait Implementations§

    source§

    impl Default for PolynomialAlgebraTableEntry

    source§

    fn default() -> PolynomialAlgebraTableEntry

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/algebra/trait.AdemAlgebraT.html b/docs/algebra/trait.AdemAlgebraT.html index 48289b006..3fcfb121d 100644 --- a/docs/algebra/trait.AdemAlgebraT.html +++ b/docs/algebra/trait.AdemAlgebraT.html @@ -1,4 +1,4 @@ -AdemAlgebraT in algebra - Rust +AdemAlgebraT in algebra - Rust @@ -23,7 +23,7 @@ }); -

    Trait algebra::AdemAlgebraT

    source ·
    pub trait AdemAlgebraT: Send + Sync + Algebra {
    +

    Trait algebra::AdemAlgebraT

    source ·
    pub trait AdemAlgebraT: Send + Sync + Algebra {
         // Required method
         fn adem_algebra(&self) -> &AdemAlgebra;
     }
    Expand description

    An algebra that can be viewed as an Adem algebra.

    @@ -31,4 +31,4 @@ with their version of SteenrodAlgebra.

    In order for things to work AdemAlgebraT cannot implement Algebra. Otherwise, the algebra enum for our bindings will see an implementation clash.

    -

    Required Methods§

    Implementors§

    \ No newline at end of file +

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.Algebra.html b/docs/algebra/trait.Algebra.html index f2ee1db27..73e348252 100644 --- a/docs/algebra/trait.Algebra.html +++ b/docs/algebra/trait.Algebra.html @@ -1,4 +1,4 @@ -Algebra in algebra - Rust +Algebra in algebra - Rust @@ -23,134 +23,134 @@ }); -

    Trait algebra::Algebra

    source ·
    pub trait Algebra: Display + Send + Sync + 'static {
    +

    Trait algebra::Algebra

    source ·
    pub trait Algebra: Display + Send + Sync + 'static {
     
    Show 13 methods // Required methods - fn prime(&self) -> ValidPrime; - fn compute_basis(&self, degree: i32); - fn dimension(&self, degree: i32) -> usize; + fn prime(&self) -> ValidPrime; + fn compute_basis(&self, degree: i32); + fn dimension(&self, degree: i32) -> usize; fn multiply_basis_elements( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize ); - fn basis_element_to_string(&self, degree: i32, idx: usize) -> String; - fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>; + fn basis_element_to_string(&self, degree: i32, idx: usize) -> String; + fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>; // Provided methods - fn prefix(&self) -> &str { ... } - fn magic(&self) -> u32 { ... } + fn prefix(&self) -> &str { ... } + fn magic(&self) -> u32 { ... } fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> ) { ... } fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize ) { ... } fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> ) { ... } - fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)> { ... } - fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String { ... } + fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)> { ... } + fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String { ... }
    }
    Expand description

    A graded algebra over $\mathbb{F}_p$.

    Each degree is finite dimensional, and equipped with a distinguished ordered basis. Basis elements are referred to by their signed degree and unsigned index, while a general -element of a given degree is denoted by an [FpVector] given in terms of that degree’s +element of a given degree is denoted by an FpVector given in terms of that degree’s basis.

    These algebras are frequently infinite-dimensional, so we must construct the representation lazily. The function Algebra::compute_basis() will request that book-keeping information be updated to perform computations up to the given degree; users must make sure to call this function before performing other operations at that degree.

    Algebras may have a distinguished set of generators; see GeneratedAlgebra.

    -

    Required Methods§

    source

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.

    -
    source

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree.

    +

    Required Methods§

    source

    fn prime(&self) -> ValidPrime

    Returns the prime the algebra is over.

    +
    source

    fn compute_basis(&self, degree: i32)

    Computes basis elements up to and including degree.

    This function must be called by users before other functions that will involve operations at degree, so it should be used to update internal data structure in perparation for such operations.

    This function must be idempotent and cheap to call again with the same argument.

    -
    source

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.

    +
    source

    fn dimension(&self, degree: i32) -> usize

    Returns the dimension of the algebra in degree degree.

    source

    fn multiply_basis_elements( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of two basis elements, and adds the result to result.

    result is not required to be aligned.

    -
    source

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.

    -
    source

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to +

    source

    fn basis_element_to_string(&self, degree: i32, idx: usize) -> String

    Converts a basis element into a string for display.

    +
    source

    fn basis_element_from_string(&self, elt: &str) -> Option<(i32, usize)>

    Converts a string to a basis element. This must be a one-sided inverse inverse to both basis_element_to_string and generator_to_string (if GeneratedAlgebra is implemented).

    If the input is invalid, the function is allowed to return None or nonsense (since it is only required to be a one-sided inverse).

    -

    Provided Methods§

    source

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras +

    Provided Methods§

    source

    fn prefix(&self) -> &str

    A name for the algebra to use in serialization operations. This defaults to “” for algebras that don’t care about this problem.

    -
    source

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the +

    source

    fn magic(&self) -> u32

    A magic constant used to identify the algebra in save files. When working with the Milnor algebra, it is easy to forget to specify the algebra and load Milnor save files with the Adem basis. If we somehow manage to resume computation, this can have disasterous consequences. So we store the magic in the save files.

    This defaults to 0 for other kinds of algebra that don’t care about this problem.

    source

    fn multiply_basis_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result.

    Neither result nor s must be aligned.

    source

    fn multiply_element_by_basis_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result.

    Neither result nor r must be aligned.

    source

    fn multiply_element_by_element( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_> + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_> )

    Computes the product r * s of two general elements, and adds the result to result.

    Neither result, s, nor r must be aligned.

    -
    source

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$.

    +
    source

    fn default_filtration_one_products(&self) -> Vec<(String, i32, usize)>

    Returns a list of filtration-one elements in $Ext(k, k)$.

    These are the same as indecomposable elements of the algebra.

    This function returns a default list of such elements in the format (name, degree, index) for which we want to compute products with in the resolutions.

    -
    source

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.

    -

    Implementors§

    \ No newline at end of file +
    source

    fn element_to_string(&self, degree: i32, element: Slice<'_>) -> String

    Converts a general element into a string for display.

    +

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.Bialgebra.html b/docs/algebra/trait.Bialgebra.html index ad40efaba..f5b408eaf 100644 --- a/docs/algebra/trait.Bialgebra.html +++ b/docs/algebra/trait.Bialgebra.html @@ -1,4 +1,4 @@ -Bialgebra in algebra - Rust +Bialgebra in algebra - Rust @@ -23,21 +23,21 @@ }); -

    Trait algebra::Bialgebra

    source ·
    pub trait Bialgebra: Algebra {
    +

    Trait algebra::Bialgebra

    source ·
    pub trait Bialgebra: Algebra {
         // Required methods
         fn coproduct(
             &self,
    -        op_deg: i32,
    -        op_idx: usize
    -    ) -> Vec<(i32, usize, i32, usize)>;
    -    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>;
    +        op_deg: i32,
    +        op_idx: usize
    +    ) -> Vec<(i32, usize, i32, usize)>;
    +    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>;
     }
    Expand description

    An Algebra equipped with a coproduct operation that makes it into a bialgebra.

    -

    Required Methods§

    source

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as

    +

    Required Methods§

    source

    fn coproduct(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize, i32, usize)>

    Computes a coproduct $\Delta(x)$, expressed as

    $$ Delta(x)i = \sum_j A{ij} \otimes B_{ij}. $$

    The return value is a list of these pairs of basis elements.

    x must have been returned by Bialgebra::decompose().

    -
    source

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of +

    source

    fn decompose(&self, op_deg: i32, op_idx: usize) -> Vec<(i32, usize)>

    Decomposes an element of the algebra into a product of elements, each of which we can compute a coproduct on efficiently.

    The product is laid out such that the first element of the vector is applied to a module element first when acting on it.

    @@ -45,4 +45,4 @@

    This API is motivated by the fact that, in the admissible basis for the Adem algebra, an element naturally decomposes into a product of Steenrod squares, each of which has an easy coproduct formula.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.GeneratedAlgebra.html b/docs/algebra/trait.GeneratedAlgebra.html index b7b5955a8..4cfefe9d4 100644 --- a/docs/algebra/trait.GeneratedAlgebra.html +++ b/docs/algebra/trait.GeneratedAlgebra.html @@ -1,4 +1,4 @@ -GeneratedAlgebra in algebra - Rust +GeneratedAlgebra in algebra - Rust @@ -23,33 +23,33 @@ }); -
    pub trait GeneratedAlgebra: Algebra {
    +
    pub trait GeneratedAlgebra: Algebra {
         // Required methods
    -    fn generators(&self, degree: i32) -> Vec<usize>;
    +    fn generators(&self, degree: i32) -> Vec<usize>;
         fn decompose_basis_element(
             &self,
    -        degree: i32,
    -        idx: usize
    -    ) -> Vec<(u32, (i32, usize), (i32, usize))>;
    +        degree: i32,
    +        idx: usize
    +    ) -> Vec<(u32, (i32, usize), (i32, usize))>;
         fn generating_relations(
             &self,
    -        degree: i32
    -    ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>;
    +        degree: i32
    +    ) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>;
     
         // Provided method
    -    fn generator_to_string(&self, degree: i32, idx: usize) -> String { ... }
    +    fn generator_to_string(&self, degree: i32, idx: usize) -> String { ... }
     }
    Expand description

    An Algebra equipped with a distinguished presentation.

    These data can be used to specify finite modules as the actions of the distinguished generators.

    -

    Required Methods§

    source

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree.

    +

    Required Methods§

    source

    fn generators(&self, degree: i32) -> Vec<usize>

    Return generators in degree.

    Generators are specified as basis element indices in that degree. The order of the list is not important.

    This method need not be fast, because they will only be performed when constructing the module, and will often only involve low dimensional elements.

    source

    fn decompose_basis_element( &self, - degree: i32, - idx: usize -) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators.

    + degree: i32, + idx: usize +) -> Vec<(u32, (i32, usize), (i32, usize))>

    Decomposes an element into generators.

    Given a basis element $A$, this function returns a list of triples $(c_i, A_i, B_i)$, such that

    $$ A = \sum_i c_i A_i B_i,$$

    @@ -62,18 +62,18 @@

    It is invalid to supply an element that is a generator.

    source

    fn generating_relations( &self, - degree: i32 -) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module.

    + degree: i32 +) -> Vec<Vec<(u32, (i32, usize), (i32, usize))>>

    Returns relations that the algebra wants checked to ensure the consistency of module.

    Relations are encoded as general multi-degree elements which are killed in the quotient: $$ \sum_i c_i \alpha_i \beta_i = 0. $$ where $c_i$ are coefficients and $\alpha_i$ and $\beta_i$ are basis elements of arbitrary degree.

    -

    Provided Methods§

    source

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator.

    +

    Provided Methods§

    source

    fn generator_to_string(&self, degree: i32, idx: usize) -> String

    Returns the name of a generator.

    Note: idx is the index within degree’s basis, not the list returned by GeneratedAlgebra::generators().

    By default, this function will forward to Algebra::basis_element_to_string(), but may be overridden if more concise names are available.

    This function MUST be inverse to [GeneratedAlgebra::string_to_generator()].

    -

    Implementors§

    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used +

    Implementors§

    source§

    impl GeneratedAlgebra for SteenrodAlgebra

    An algebra with a specified list of generators and generating relations. This data can be used to specify modules by specifying the actions of the generators.

    -
    source§

    impl GeneratedAlgebra for AdemAlgebra

    source§

    impl GeneratedAlgebra for MilnorAlgebra

    \ No newline at end of file +
    source§

    impl GeneratedAlgebra for AdemAlgebra

    source§

    impl GeneratedAlgebra for MilnorAlgebra

    \ No newline at end of file diff --git a/docs/algebra/trait.MilnorAlgebraT.html b/docs/algebra/trait.MilnorAlgebraT.html index 5f0190035..463fcddab 100644 --- a/docs/algebra/trait.MilnorAlgebraT.html +++ b/docs/algebra/trait.MilnorAlgebraT.html @@ -1,4 +1,4 @@ -MilnorAlgebraT in algebra - Rust +MilnorAlgebraT in algebra - Rust @@ -23,7 +23,7 @@ }); -
    pub trait MilnorAlgebraT: Send + Sync + Algebra {
    +
    pub trait MilnorAlgebraT: Send + Sync + Algebra {
         // Required method
         fn milnor_algebra(&self) -> &MilnorAlgebra;
    -}

    Required Methods§

    Implementors§

    \ No newline at end of file +}

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.MuAlgebra.html b/docs/algebra/trait.MuAlgebra.html index 0df68623e..1a1780a97 100644 --- a/docs/algebra/trait.MuAlgebra.html +++ b/docs/algebra/trait.MuAlgebra.html @@ -1,4 +1,4 @@ -MuAlgebra in algebra - Rust +MuAlgebra in algebra - Rust @@ -23,91 +23,91 @@ }); -

    Trait algebra::MuAlgebra

    source ·
    pub trait MuAlgebra<const U: bool>: Algebra {
    +

    Trait algebra::MuAlgebra

    source ·
    pub trait MuAlgebra<const U: bool>: Algebra {
         // Required methods
    -    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
    +    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
         fn multiply_basis_elements_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_index: usize,
    -        s_degree: i32,
    -        s_index: usize,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r_index: usize,
    +        s_degree: i32,
    +        s_index: usize,
    +        excess: i32
         );
         fn multiply_basis_element_by_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_idx: usize,
    -        s_degree: i32,
    -        s: Slice<'_>,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r_idx: usize,
    +        s_degree: i32,
    +        s: Slice<'_>,
    +        excess: i32
         );
         fn multiply_element_by_basis_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s_idx: usize,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s_idx: usize,
    +        excess: i32
         );
         fn multiply_element_by_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s: Slice<'_>,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s: Slice<'_>,
    +        excess: i32
         );
     }
    Expand description

    An algebra that is maybe unstable. Every Algebra implements MuAlgebra by ignoring the excess parameter, and every UnstableAlgebra implements MuAlgebra. This makes it possible to write code that is generic over stable and unstable algebras.

    -

    Required Methods§

    Required Methods§

    source

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source

    fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    source

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    source

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result.

    Neither result nor r must be aligned.

    source

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result.

    Neither result, s, nor r must be aligned.

    diff --git a/docs/algebra/trait.PolynomialAlgebra.html b/docs/algebra/trait.PolynomialAlgebra.html index cefc96e48..c6ec27217 100644 --- a/docs/algebra/trait.PolynomialAlgebra.html +++ b/docs/algebra/trait.PolynomialAlgebra.html @@ -1,4 +1,4 @@ -PolynomialAlgebra in algebra - Rust +PolynomialAlgebra in algebra - Rust @@ -23,93 +23,93 @@ }); -
    pub trait PolynomialAlgebra: Display + Sized + Send + Sync + 'static {
    +
    pub trait PolynomialAlgebra: Display + Sized + Send + Sync + 'static {
     
    Show 21 methods // Required methods - fn prime(&self) -> ValidPrime; + fn prime(&self) -> ValidPrime; fn polynomial_monomials(&self) -> &TruncatedPolynomialMonomialBasis; fn exterior_monomials(&self) -> &TruncatedPolynomialMonomialBasis; - fn polynomial_generators_in_degree(&self, degree: i32) -> usize; - fn exterior_generators_in_degree(&self, degree: i32) -> usize; - fn repr_poly_generator(&self, degree: i32, _index: usize) -> (String, u32); - fn repr_ext_generator(&self, degree: i32, _index: usize) -> String; - fn basis_table(&self) -> &OnceVec<PolynomialAlgebraTableEntry>; - fn frobenius_on_generator(&self, degree: i32, index: usize) -> Option<usize>; - fn compute_generating_set(&self, degree: i32); + fn polynomial_generators_in_degree(&self, degree: i32) -> usize; + fn exterior_generators_in_degree(&self, degree: i32) -> usize; + fn repr_poly_generator(&self, degree: i32, _index: usize) -> (String, u32); + fn repr_ext_generator(&self, degree: i32, _index: usize) -> String; + fn basis_table(&self) -> &OnceVec<PolynomialAlgebraTableEntry>; + fn frobenius_on_generator(&self, degree: i32, index: usize) -> Option<usize>; + fn compute_generating_set(&self, degree: i32); // Provided methods - fn min_degree(&self) -> i32 { ... } - fn compute_basis_step(&self, degree: i32) { ... } - fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize { ... } + fn min_degree(&self) -> i32 { ... } + fn compute_basis_step(&self, degree: i32) { ... } + fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize { ... } fn index_to_monomial( &self, - degree: i32, - index: usize + degree: i32, + index: usize ) -> &PolynomialAlgebraMonomial { ... } - fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector) { ... } + fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector) { ... } fn multiply_monomials( &self, target: &mut PolynomialAlgebraMonomial, source: &PolynomialAlgebraMonomial - ) -> Option<u32> { ... } + ) -> Option<u32> { ... } fn multiply_polynomials( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, - right_degree: i32, - right: &FpVector + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, + right_degree: i32, + right: &FpVector ) { ... } fn multiply_polynomial_by_monomial( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, right_mono: &PolynomialAlgebraMonomial ) { ... } fn multiply_monomial_by_polynomial( &self, - target: &mut FpVector, - coeff: u32, + target: &mut FpVector, + coeff: u32, left_mono: &PolynomialAlgebraMonomial, - right_degree: i32, - right: &FpVector + right_degree: i32, + right: &FpVector ) { ... } fn set_monomial_degree( &self, mono: &mut PolynomialAlgebraMonomial, - degree: i32 + degree: i32 ) { ... } - fn max_computed_degree(&self) -> i32 { ... } -
    }

    Required Methods§

    Provided Methods§

    }

    Required Methods§

    Provided Methods§

    source

    fn min_degree(&self) -> i32

    source

    fn compute_basis_step(&self, degree: i32)

    source

    fn monomial_to_index(&self, monomial: &PolynomialAlgebraMonomial) -> usize

    source

    fn index_to_monomial( &self, - degree: i32, - index: usize -) -> &PolynomialAlgebraMonomial

    source

    fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector)

    source

    fn multiply_monomials( + degree: i32, + index: usize +) -> &PolynomialAlgebraMonomial

    source

    fn frobenius_monomial(&self, target: &mut FpVector, source: &FpVector)

    source

    fn multiply_monomials( &self, target: &mut PolynomialAlgebraMonomial, source: &PolynomialAlgebraMonomial -) -> Option<u32>

    source

    fn multiply_polynomials( +) -> Option<u32>

    source

    fn multiply_polynomials( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, - right_degree: i32, - right: &FpVector + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, + right_degree: i32, + right: &FpVector )

    source

    fn multiply_polynomial_by_monomial( &self, - target: &mut FpVector, - coeff: u32, - left_degree: i32, - left: &FpVector, + target: &mut FpVector, + coeff: u32, + left_degree: i32, + left: &FpVector, right_mono: &PolynomialAlgebraMonomial )

    source

    fn multiply_monomial_by_polynomial( &self, - target: &mut FpVector, - coeff: u32, + target: &mut FpVector, + coeff: u32, left_mono: &PolynomialAlgebraMonomial, - right_degree: i32, - right: &FpVector -)

    source

    fn set_monomial_degree(&self, mono: &mut PolynomialAlgebraMonomial, degree: i32)

    source

    fn max_computed_degree(&self) -> i32

    Implementors§

    \ No newline at end of file + right_degree: i32, + right: &FpVector +)
    source

    fn set_monomial_degree(&self, mono: &mut PolynomialAlgebraMonomial, degree: i32)

    source

    fn max_computed_degree(&self) -> i32

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.SteenrodAlgebraT.html b/docs/algebra/trait.SteenrodAlgebraT.html index 3bd12449a..de6425964 100644 --- a/docs/algebra/trait.SteenrodAlgebraT.html +++ b/docs/algebra/trait.SteenrodAlgebraT.html @@ -1,4 +1,4 @@ -SteenrodAlgebraT in algebra - Rust +SteenrodAlgebraT in algebra - Rust @@ -23,7 +23,7 @@ }); -
    pub trait SteenrodAlgebraT: Send + Sync + Algebra {
    +
    pub trait SteenrodAlgebraT: Send + Sync + Algebra {
         // Required method
         fn steenrod_algebra(&self) -> SteenrodAlgebraBorrow<'_>;
    -}

    Required Methods§

    Implementors§

    \ No newline at end of file +}

    Required Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra/trait.UnstableAlgebra.html b/docs/algebra/trait.UnstableAlgebra.html index f02cd5906..5ebfdc9f7 100644 --- a/docs/algebra/trait.UnstableAlgebra.html +++ b/docs/algebra/trait.UnstableAlgebra.html @@ -1,4 +1,4 @@ -UnstableAlgebra in algebra - Rust +UnstableAlgebra in algebra - Rust @@ -23,94 +23,94 @@ }); -
    pub trait UnstableAlgebra: Algebra {
    +
    pub trait UnstableAlgebra: Algebra {
         // Required methods
    -    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
    +    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize;
         fn multiply_basis_elements_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_index: usize,
    -        s_degree: i32,
    -        s_index: usize,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r_index: usize,
    +        s_degree: i32,
    +        s_index: usize,
    +        excess: i32
         );
     
         // Provided methods
         fn multiply_basis_element_by_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r_idx: usize,
    -        s_degree: i32,
    -        s: Slice<'_>,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r_idx: usize,
    +        s_degree: i32,
    +        s: Slice<'_>,
    +        excess: i32
         ) { ... }
         fn multiply_element_by_basis_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s_idx: usize,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s_idx: usize,
    +        excess: i32
         ) { ... }
         fn multiply_element_by_element_unstable(
             &self,
    -        result: SliceMut<'_>,
    -        coeff: u32,
    -        r_degree: i32,
    -        r: Slice<'_>,
    -        s_degree: i32,
    -        s: Slice<'_>,
    -        excess: i32
    +        result: SliceMut<'_>,
    +        coeff: u32,
    +        r_degree: i32,
    +        r: Slice<'_>,
    +        s_degree: i32,
    +        s: Slice<'_>,
    +        excess: i32
         ) { ... }
    -}

    Required Methods§

    Required Methods§

    source

    fn dimension_unstable(&self, degree: i32, excess: i32) -> usize

    source

    fn multiply_basis_elements_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_index: usize, - s_degree: i32, - s_index: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_index: usize, + s_degree: i32, + s_index: usize, + excess: i32 )

    Provided Methods§

    source

    fn multiply_basis_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r_idx: usize, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r_idx: usize, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of a basis element r and a general element s, and adds the result to result.

    Neither result nor s must be aligned.

    source

    fn multiply_element_by_basis_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s_idx: usize, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s_idx: usize, + excess: i32 )

    Computes the product r * s of a general element r and a basis element s, and adds the result to result.

    Neither result nor r must be aligned.

    source

    fn multiply_element_by_element_unstable( &self, - result: SliceMut<'_>, - coeff: u32, - r_degree: i32, - r: Slice<'_>, - s_degree: i32, - s: Slice<'_>, - excess: i32 + result: SliceMut<'_>, + coeff: u32, + r_degree: i32, + r: Slice<'_>, + s_degree: i32, + s: Slice<'_>, + excess: i32 )

    Computes the product r * s of two general elements, and adds the result to result.

    Neither result, s, nor r must be aligned.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/docs/algebra_dim/all.html b/docs/algebra_dim/all.html index dd75811a3..854e1e095 100644 --- a/docs/algebra_dim/all.html +++ b/docs/algebra_dim/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/algebra_dim/index.html b/docs/algebra_dim/index.html index 7d3cc545c..c2ad936ce 100644 --- a/docs/algebra_dim/index.html +++ b/docs/algebra_dim/index.html @@ -1,4 +1,4 @@ -algebra_dim - Rust +algebra_dim - Rust @@ -23,4 +23,4 @@ }); -

    Crate algebra_dim

    source ·
    \ No newline at end of file +

    Crate algebra_dim

    source ·
    \ No newline at end of file diff --git a/docs/bivec/all.html b/docs/bivec/all.html index 315da2f47..6e30149de 100644 --- a/docs/bivec/all.html +++ b/docs/bivec/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    Structs

    \ No newline at end of file +

    List of all items

    Structs

    \ No newline at end of file diff --git a/docs/bivec/index.html b/docs/bivec/index.html index 054291d84..0b3ad7455 100644 --- a/docs/bivec/index.html +++ b/docs/bivec/index.html @@ -1,4 +1,4 @@ -bivec - Rust +bivec - Rust @@ -23,5 +23,5 @@ }); -

    Crate bivec

    source ·

    Structs

    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/bruner/all.html b/docs/bruner/all.html index d1a2bef33..8d782f55c 100644 --- a/docs/bruner/all.html +++ b/docs/bruner/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/bruner/index.html b/docs/bruner/index.html index f2af44f3e..ed7064522 100644 --- a/docs/bruner/index.html +++ b/docs/bruner/index.html @@ -1,4 +1,4 @@ -bruner - Rust +bruner - Rust @@ -23,7 +23,7 @@ }); -

    Crate bruner

    source ·
    Expand description

    This script converts between our basis and Bruner’s basis. At the moment, most inputs are +

    Crate bruner

    source ·
    Expand description

    This script converts between our basis and Bruner’s basis. At the moment, most inputs are hardcoded, and this only works for the sphere.

    The script performs the following procedure:

      diff --git a/docs/chart/all.html b/docs/chart/all.html index 85f68bfa8..6e528fddd 100644 --- a/docs/chart/all.html +++ b/docs/chart/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      Structs

      Enums

      Traits

      Constants

      \ No newline at end of file +

      List of all items

      Structs

      Enums

      Traits

      Constants

      \ No newline at end of file diff --git a/docs/chart/constant.PATTERNS.html b/docs/chart/constant.PATTERNS.html index 363d0bb6f..d42256bf9 100644 --- a/docs/chart/constant.PATTERNS.html +++ b/docs/chart/constant.PATTERNS.html @@ -1,4 +1,4 @@ -PATTERNS in chart - Rust +PATTERNS in chart - Rust @@ -23,4 +23,4 @@ }); -

      Constant chart::PATTERNS

      source ·
      pub(crate) const PATTERNS: [(f32, &[(f32, f32)]); 12];
      \ No newline at end of file +

      Constant chart::PATTERNS

      source ·
      pub(crate) const PATTERNS: [(f32, &[(f32, f32)]); 12];
      \ No newline at end of file diff --git a/docs/chart/enum.Orientation.html b/docs/chart/enum.Orientation.html index 36646e5f5..501895af1 100644 --- a/docs/chart/enum.Orientation.html +++ b/docs/chart/enum.Orientation.html @@ -1,4 +1,4 @@ -Orientation in chart - Rust +Orientation in chart - Rust @@ -23,19 +23,19 @@ }); -

      Enum chart::Orientation

      source ·
      pub enum Orientation {
      +

      Enum chart::Orientation

      source ·
      pub enum Orientation {
           Left,
           Right,
           Above,
           Below,
      -}

      Variants§

      §

      Left

      §

      Right

      §

      Above

      §

      Below

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere - T: 'static + ?Sized,

      source§

      fn type_id(&self) -> TypeId

      Gets the TypeId of self. Read more
      source§

      impl<T> Borrow<T> for Twhere - T: ?Sized,

      source§

      fn borrow(&self) -> &T

      Immutably borrows from an owned value. Read more
      source§

      impl<T> BorrowMut<T> for Twhere - T: ?Sized,

      source§

      fn borrow_mut(&mut self) -> &mut T

      Mutably borrows from an owned value. Read more
      source§

      impl<T> From<T> for T

      source§

      fn from(t: T) -> T

      Returns the argument unchanged.

      -
      source§

      impl<T, U> Into<U> for Twhere - U: From<T>,

      source§

      fn into(self) -> U

      Calls U::from(self).

      +}

      Variants§

      §

      Left

      §

      Right

      §

      Above

      §

      Below

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for Twhere + T: 'static + ?Sized,

      source§

      fn type_id(&self) -> TypeId

      Gets the TypeId of self. Read more
      source§

      impl<T> Borrow<T> for Twhere + T: ?Sized,

      source§

      fn borrow(&self) -> &T

      Immutably borrows from an owned value. Read more
      source§

      impl<T> BorrowMut<T> for Twhere + T: ?Sized,

      source§

      fn borrow_mut(&mut self) -> &mut T

      Mutably borrows from an owned value. Read more
      source§

      impl<T> From<T> for T

      source§

      fn from(t: T) -> T

      Returns the argument unchanged.

      +
      source§

      impl<T, U> Into<U> for Twhere + U: From<T>,

      source§

      fn into(self) -> U

      Calls U::from(self).

      That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

      -
      source§

      impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

      §

      type Error = Infallible

      The type returned in the event of a conversion error.
      source§

      fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

      Performs the conversion.
      source§

      impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

      §

      type Error = <U as TryFrom<T>>::Error

      The type returned in the event of a conversion error.
      source§

      fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

      Performs the conversion.
      \ No newline at end of file +From<T> for U chooses to do.

      +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/chart/index.html b/docs/chart/index.html index 5b235072c..7bd113540 100644 --- a/docs/chart/index.html +++ b/docs/chart/index.html @@ -1,4 +1,4 @@ -chart - Rust +chart - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/chart/struct.SvgBackend.html b/docs/chart/struct.SvgBackend.html index b6b91973f..339e6c44f 100644 --- a/docs/chart/struct.SvgBackend.html +++ b/docs/chart/struct.SvgBackend.html @@ -1,4 +1,4 @@ -SvgBackend in chart - Rust +SvgBackend in chart - Rust @@ -23,12 +23,12 @@ }); -

    Struct chart::SvgBackend

    source ·
    pub struct SvgBackend<T: Write> {
    +

    Struct chart::SvgBackend

    source ·
    pub struct SvgBackend<T: Write> {
         pub(crate) out: T,
    -    pub(crate) max_x: i32,
    -    pub(crate) max_y: i32,
    -    pub(crate) num_nodes: HashMap<(i32, i32), usize>,
    -}

    Fields§

    §out: T§max_x: i32§max_y: i32§num_nodes: HashMap<(i32, i32), usize>

    Implementations§

    source§

    impl<T: Write> SvgBackend<T>

    source

    pub(crate) const STYLES: &'static str = r#" + pub(crate) max_x: i32, + pub(crate) max_y: i32, + pub(crate) num_nodes: HashMap<(i32, i32), usize>, +}

    Fields§

    §out: T§max_x: i32§max_y: i32§num_nodes: HashMap<(i32, i32), usize>

    Implementations§

    source§

    impl<T: Write> SvgBackend<T>

    source

    pub(crate) const STYLES: &'static str = r#" circle { fill: black; } @@ -59,45 +59,45 @@ text-anchor: end; dominant-baseline: middle; } - "#

    source

    pub(crate) const GRID_WIDTH: i32 = 20i32

    source

    pub(crate) const MARGIN: i32 = 30i32

    source

    pub fn legend(out: T) -> Result<()>

    Print the legend for node patterns

    -
    source

    pub(crate) fn get_coords(&self, x: i32, y: i32, i: usize) -> (f32, f32, f32)

    Returns r, x, y

    -
    source

    pub fn new(out: T) -> Self

    Trait Implementations§

    source§

    impl<T: Write> Backend for SvgBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "svg"

    If the backend writes to a file, this is the extension commonly taken by the file type
    source§

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn line( + "#

    source

    pub(crate) const GRID_WIDTH: i32 = 20i32

    source

    pub(crate) const MARGIN: i32 = 30i32

    source

    pub fn legend(out: T) -> Result<()>

    Print the legend for node patterns

    +
    source

    pub(crate) fn get_coords(&self, x: i32, y: i32, i: usize) -> (f32, f32, f32)

    Returns r, x, y

    +
    source

    pub fn new(out: T) -> Self

    Trait Implementations§

    source§

    impl<T: Write> Backend for SvgBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "svg"

    If the backend writes to a file, this is the extension commonly taken by the file type
    source§

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn line( &mut self, - start_x: i32, - end_x: i32, - start_y: i32, - end_y: i32, - style: &str -) -> Result<(), Self::Error>

    source§

    fn text( + start_x: i32, + end_x: i32, + start_y: i32, + end_y: i32, + style: &str +) -> Result<(), Self::Error>

    source§

    fn text( &mut self, - x: i32, - y: i32, - content: impl Display, + x: i32, + y: i32, + content: impl Display, orientation: Orientation -) -> Result<(), Self::Error>

    source§

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source§

    fn structline( +) -> Result<(), Self::Error>

    source§

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source§

    fn structline( &mut self, - source: (i32, i32, usize), - target: (i32, i32, usize), - style: Option<&str> -) -> Result<(), Self::Error>

    source§

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn structline_matrix( + source: (i32, i32, usize), + target: (i32, i32, usize), + style: Option<&str> +) -> Result<(), Self::Error>

    source§

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn structline_matrix( &mut self, - source: (i32, i32), - target: (i32, i32), - matrix: Vec<Vec<u32>>, - class: Option<&str> -) -> Result<(), Self::Error>

    source§

    impl<T: Write> Drop for SvgBackend<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for SvgBackend<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for SvgBackend<T>where - T: Send,

    §

    impl<T> Sync for SvgBackend<T>where - T: Sync,

    §

    impl<T> Unpin for SvgBackend<T>where - T: Unpin,

    §

    impl<T> UnwindSafe for SvgBackend<T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: (i32, i32), + target: (i32, i32), + matrix: Vec<Vec<u32>>, + class: Option<&str> +) -> Result<(), Self::Error>
    source§

    impl<T: Write> Drop for SvgBackend<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for SvgBackend<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for SvgBackend<T>where + T: Send,

    §

    impl<T> Sync for SvgBackend<T>where + T: Sync,

    §

    impl<T> Unpin for SvgBackend<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for SvgBackend<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/chart/struct.TikzBackend.html b/docs/chart/struct.TikzBackend.html index 0f11794e3..731273603 100644 --- a/docs/chart/struct.TikzBackend.html +++ b/docs/chart/struct.TikzBackend.html @@ -1,4 +1,4 @@ -TikzBackend in chart - Rust +TikzBackend in chart - Rust @@ -23,53 +23,53 @@ }); -

    Struct chart::TikzBackend

    source ·
    pub struct TikzBackend<T: Write> {
    +

    Struct chart::TikzBackend

    source ·
    pub struct TikzBackend<T: Write> {
         pub(crate) out: T,
    -    pub(crate) max_x: i32,
    -    pub(crate) max_y: i32,
    -    pub(crate) num_nodes: HashMap<(i32, i32), usize>,
    -}

    Fields§

    §out: T§max_x: i32§max_y: i32§num_nodes: HashMap<(i32, i32), usize>

    Implementations§

    source§

    impl<T: Write> TikzBackend<T>

    source

    pub(crate) const HEADER: &'static str = r"\begin{tikzpicture}[ + pub(crate) max_x: i32, + pub(crate) max_y: i32, + pub(crate) num_nodes: HashMap<(i32, i32), usize>, +}

    Fields§

    §out: T§max_x: i32§max_y: i32§num_nodes: HashMap<(i32, i32), usize>

    Implementations§

    source§

    impl<T: Write> TikzBackend<T>

    source

    pub(crate) const HEADER: &'static str = r"\begin{tikzpicture}[ major-grid/.style={ opacity = 0.2 }, grid/.style={ opacity = 0.1 }, d2/.style={ blue }, -]"

    source

    pub fn new(out: T) -> Self

    source

    pub(crate) fn get_coords(&self, x: i32, y: i32, i: usize) -> (f32, f32, f32)

    Returns r, x, y

    -

    Trait Implementations§

    source§

    impl<T: Write> Backend for TikzBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "tex"

    If the backend writes to a file, this is the extension commonly taken by the file type
    source§

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn line( +]"

    source

    pub fn new(out: T) -> Self

    source

    pub(crate) fn get_coords(&self, x: i32, y: i32, i: usize) -> (f32, f32, f32)

    Returns r, x, y

    +

    Trait Implementations§

    source§

    impl<T: Write> Backend for TikzBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "tex"

    If the backend writes to a file, this is the extension commonly taken by the file type
    source§

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn line( &mut self, - start_x: i32, - end_x: i32, - start_y: i32, - end_y: i32, - style: &str -) -> Result<(), Self::Error>

    source§

    fn text( + start_x: i32, + end_x: i32, + start_y: i32, + end_y: i32, + style: &str +) -> Result<(), Self::Error>

    source§

    fn text( &mut self, - x: i32, - y: i32, - content: impl Display, + x: i32, + y: i32, + content: impl Display, orientation: Orientation -) -> Result<(), Self::Error>

    source§

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source§

    fn structline( +) -> Result<(), Self::Error>

    source§

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source§

    fn structline( &mut self, - source: (i32, i32, usize), - target: (i32, i32, usize), - style: Option<&str> -) -> Result<(), Self::Error>

    source§

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn structline_matrix( + source: (i32, i32, usize), + target: (i32, i32, usize), + style: Option<&str> +) -> Result<(), Self::Error>

    source§

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source§

    fn structline_matrix( &mut self, - source: (i32, i32), - target: (i32, i32), - matrix: Vec<Vec<u32>>, - class: Option<&str> -) -> Result<(), Self::Error>

    source§

    impl<T: Write> Drop for TikzBackend<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for TikzBackend<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for TikzBackend<T>where - T: Send,

    §

    impl<T> Sync for TikzBackend<T>where - T: Sync,

    §

    impl<T> Unpin for TikzBackend<T>where - T: Unpin,

    §

    impl<T> UnwindSafe for TikzBackend<T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + source: (i32, i32), + target: (i32, i32), + matrix: Vec<Vec<u32>>, + class: Option<&str> +) -> Result<(), Self::Error>
    source§

    impl<T: Write> Drop for TikzBackend<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for TikzBackend<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for TikzBackend<T>where + T: Send,

    §

    impl<T> Sync for TikzBackend<T>where + T: Sync,

    §

    impl<T> Unpin for TikzBackend<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for TikzBackend<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/chart/trait.Backend.html b/docs/chart/trait.Backend.html index a22cc9ae6..09d5d87d4 100644 --- a/docs/chart/trait.Backend.html +++ b/docs/chart/trait.Backend.html @@ -1,4 +1,4 @@ -Backend in chart - Rust +Backend in chart - Rust @@ -23,68 +23,68 @@ }); -

    Trait chart::Backend

    source ·
    pub trait Backend {
    +

    Trait chart::Backend

    source ·
    pub trait Backend {
         type Error;
     
    -    const EXT: &'static str = "";
    +    const EXT: &'static str = "";
     
         // Required methods
    -    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>;
    +    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>;
         fn line(
             &mut self,
    -        start_x: i32,
    -        end_x: i32,
    -        start_y: i32,
    -        end_y: i32,
    -        style: &str
    -    ) -> Result<(), Self::Error>;
    +        start_x: i32,
    +        end_x: i32,
    +        start_y: i32,
    +        end_y: i32,
    +        style: &str
    +    ) -> Result<(), Self::Error>;
         fn text(
             &mut self,
    -        x: i32,
    -        y: i32,
    -        content: impl Display,
    +        x: i32,
    +        y: i32,
    +        content: impl Display,
             orientation: Orientation
    -    ) -> Result<(), Self::Error>;
    -    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>;
    +    ) -> Result<(), Self::Error>;
    +    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>;
         fn structline(
             &mut self,
    -        source: (i32, i32, usize),
    -        target: (i32, i32, usize),
    -        style: Option<&str>
    -    ) -> Result<(), Self::Error>;
    +        source: (i32, i32, usize),
    +        target: (i32, i32, usize),
    +        style: Option<&str>
    +    ) -> Result<(), Self::Error>;
     
         // Provided methods
    -    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error> { ... }
    +    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error> { ... }
         fn structline_matrix(
             &mut self,
    -        source: (i32, i32),
    -        target: (i32, i32),
    -        matrix: Vec<Vec<u32>>,
    -        class: Option<&str>
    -    ) -> Result<(), Self::Error> { ... }
    -}

    Required Associated Types§

    Provided Associated Constants§

    source

    const EXT: &'static str = ""

    If the backend writes to a file, this is the extension commonly taken by the file type

    -

    Required Methods§

    source

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source

    fn line( + source: (i32, i32), + target: (i32, i32), + matrix: Vec<Vec<u32>>, + class: Option<&str> + ) -> Result<(), Self::Error> { ... } +}

    Required Associated Types§

    Provided Associated Constants§

    source

    const EXT: &'static str = ""

    If the backend writes to a file, this is the extension commonly taken by the file type

    +

    Required Methods§

    source

    fn header(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source

    fn line( &mut self, - start_x: i32, - end_x: i32, - start_y: i32, - end_y: i32, - style: &str -) -> Result<(), Self::Error>

    source

    fn text( + start_x: i32, + end_x: i32, + start_y: i32, + end_y: i32, + style: &str +) -> Result<(), Self::Error>

    source

    fn text( &mut self, - x: i32, - y: i32, - content: impl Display, + x: i32, + y: i32, + content: impl Display, orientation: Orientation -) -> Result<(), Self::Error>

    source

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source

    fn structline( +) -> Result<(), Self::Error>

    source

    fn node(&mut self, x: i32, y: i32, n: usize) -> Result<(), Self::Error>

    source

    fn structline( &mut self, - source: (i32, i32, usize), - target: (i32, i32, usize), - style: Option<&str> -) -> Result<(), Self::Error>

    Provided Methods§

    source

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source

    fn structline_matrix( + source: (i32, i32, usize), + target: (i32, i32, usize), + style: Option<&str> +) -> Result<(), Self::Error>

    Provided Methods§

    source

    fn init(&mut self, max_x: i32, max_y: i32) -> Result<(), Self::Error>

    source

    fn structline_matrix( &mut self, - source: (i32, i32), - target: (i32, i32), - matrix: Vec<Vec<u32>>, - class: Option<&str> -) -> Result<(), Self::Error>

    Implementors§

    source§

    impl<T: Write> Backend for SvgBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "svg"

    source§

    impl<T: Write> Backend for TikzBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "tex"

    \ No newline at end of file + source: (i32, i32), + target: (i32, i32), + matrix: Vec<Vec<u32>>, + class: Option<&str> +) -> Result<(), Self::Error>

    Implementors§

    source§

    impl<T: Write> Backend for SvgBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "svg"

    source§

    impl<T: Write> Backend for TikzBackend<T>

    §

    type Error = Error

    source§

    const EXT: &'static str = "tex"

    \ No newline at end of file diff --git a/docs/crates.js b/docs/crates.js index 742b20c3f..2c348d60d 100644 --- a/docs/crates.js +++ b/docs/crates.js @@ -2,6 +2,7 @@ window.ALL_CRATES = ['algebra', 'bivec', 'chart', 'fp', +'maybe_rayon', 'once', 'query', 'sseq','ext']; diff --git a/docs/d2_charts/all.html b/docs/d2_charts/all.html index cf0d2da52..832fbc000 100644 --- a/docs/d2_charts/all.html +++ b/docs/d2_charts/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/d2_charts/index.html b/docs/d2_charts/index.html index 84a66c195..5150c6da9 100644 --- a/docs/d2_charts/index.html +++ b/docs/d2_charts/index.html @@ -1,4 +1,4 @@ -d2_charts - Rust +d2_charts - Rust @@ -23,4 +23,4 @@ }); -

    Crate d2_charts

    source ·
    \ No newline at end of file +

    Crate d2_charts

    source ·
    \ No newline at end of file diff --git a/docs/define_module/all.html b/docs/define_module/all.html index 296d296aa..73e6753b8 100644 --- a/docs/define_module/all.html +++ b/docs/define_module/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/define_module/fn.gens_to_json.html b/docs/define_module/fn.gens_to_json.html index 18b70fcab..2e0b27992 100644 --- a/docs/define_module/fn.gens_to_json.html +++ b/docs/define_module/fn.gens_to_json.html @@ -1,4 +1,4 @@ -gens_to_json in define_module - Rust +gens_to_json in define_module - Rust @@ -23,4 +23,4 @@ }); -
    pub fn gens_to_json(gens: &BiVec<Vec<String>>) -> Value
    \ No newline at end of file +
    pub fn gens_to_json(gens: &BiVec<Vec<String>>) -> Value
    \ No newline at end of file diff --git a/docs/define_module/fn.get_gens.html b/docs/define_module/fn.get_gens.html index 1e155796e..abf4e7fe5 100644 --- a/docs/define_module/fn.get_gens.html +++ b/docs/define_module/fn.get_gens.html @@ -1,4 +1,4 @@ -get_gens in define_module - Rust +get_gens in define_module - Rust @@ -23,4 +23,4 @@ }); -

    Function define_module::get_gens

    source ·
    pub fn get_gens() -> Result<BiVec<Vec<String>>>
    \ No newline at end of file +

    Function define_module::get_gens

    source ·
    pub fn get_gens() -> Result<BiVec<Vec<String>>>
    \ No newline at end of file diff --git a/docs/define_module/fn.interactive_module_define_fdmodule.html b/docs/define_module/fn.interactive_module_define_fdmodule.html index 25cfda8e0..2cdea1bf4 100644 --- a/docs/define_module/fn.interactive_module_define_fdmodule.html +++ b/docs/define_module/fn.interactive_module_define_fdmodule.html @@ -1,4 +1,4 @@ -interactive_module_define_fdmodule in define_module - Rust +interactive_module_define_fdmodule in define_module - Rust @@ -23,7 +23,7 @@ }); -
    pub fn interactive_module_define_fdmodule(
    -    output_json: &mut Value,
    -    p: ValidPrime
    -) -> Result<()>
    \ No newline at end of file +
    pub fn interactive_module_define_fdmodule(
    +    output_json: &mut Value,
    +    p: ValidPrime
    +) -> Result<()>
    \ No newline at end of file diff --git a/docs/define_module/fn.interactive_module_define_fpmodule.html b/docs/define_module/fn.interactive_module_define_fpmodule.html index df48c9e80..9a94362e9 100644 --- a/docs/define_module/fn.interactive_module_define_fpmodule.html +++ b/docs/define_module/fn.interactive_module_define_fpmodule.html @@ -1,4 +1,4 @@ -interactive_module_define_fpmodule in define_module - Rust +interactive_module_define_fpmodule in define_module - Rust @@ -23,7 +23,7 @@ }); -
    pub fn interactive_module_define_fpmodule(
    -    output_json: &mut Value,
    -    p: ValidPrime
    -) -> Result<()>
    \ No newline at end of file +
    pub fn interactive_module_define_fpmodule(
    +    output_json: &mut Value,
    +    p: ValidPrime
    +) -> Result<()>
    \ No newline at end of file diff --git a/docs/define_module/index.html b/docs/define_module/index.html index aa9348e66..4c75431e1 100644 --- a/docs/define_module/index.html +++ b/docs/define_module/index.html @@ -1,4 +1,4 @@ -define_module - Rust +define_module - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/differentials/all.html b/docs/differentials/all.html index 2bb63252b..4c56ced62 100644 --- a/docs/differentials/all.html +++ b/docs/differentials/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/differentials/index.html b/docs/differentials/index.html index 702b4b068..9c89c3b93 100644 --- a/docs/differentials/index.html +++ b/docs/differentials/index.html @@ -1,4 +1,4 @@ -differentials - Rust +differentials - Rust @@ -23,5 +23,5 @@ }); -

    Crate differentials

    source ·
    Expand description

    This prints all the differentials in the resolution.

    +

    Crate differentials

    source ·
    Expand description

    This prints all the differentials in the resolution.

    \ No newline at end of file diff --git a/docs/ext/all.html b/docs/ext/all.html index 6e4aabbd6..a6c7019d7 100644 --- a/docs/ext/all.html +++ b/docs/ext/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    Structs

    Enums

    Traits

    Functions

    Type Definitions

    Statics

    Constants

    \ No newline at end of file +

    List of all items

    Structs

    Enums

    Traits

    Functions

    Type Aliases

    Statics

    Constants

    \ No newline at end of file diff --git a/docs/ext/chain_complex/chain_homotopy/index.html b/docs/ext/chain_complex/chain_homotopy/index.html index fd991c3c2..136acc297 100644 --- a/docs/ext/chain_complex/chain_homotopy/index.html +++ b/docs/ext/chain_complex/chain_homotopy/index.html @@ -1,4 +1,4 @@ -ext::chain_complex::chain_homotopy - Rust +ext::chain_complex::chain_homotopy - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/ext/chain_complex/enum.ChainComplexGrading.html b/docs/ext/chain_complex/enum.ChainComplexGrading.html index d7edc4b43..e6abdc478 100644 --- a/docs/ext/chain_complex/enum.ChainComplexGrading.html +++ b/docs/ext/chain_complex/enum.ChainComplexGrading.html @@ -1,4 +1,4 @@ -ChainComplexGrading in ext::chain_complex - Rust +ChainComplexGrading in ext::chain_complex - Rust @@ -23,17 +23,17 @@ }); -
    pub enum ChainComplexGrading {
    +
    pub enum ChainComplexGrading {
         Homological,
         Cohomological,
    -}

    Variants§

    §

    Homological

    §

    Cohomological

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +}

    Variants§

    §

    Homological

    §

    Cohomological

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/finite_chain_complex/index.html b/docs/ext/chain_complex/finite_chain_complex/index.html index 9e8cdc64d..77bbe59c3 100644 --- a/docs/ext/chain_complex/finite_chain_complex/index.html +++ b/docs/ext/chain_complex/finite_chain_complex/index.html @@ -1,4 +1,4 @@ -ext::chain_complex::finite_chain_complex - Rust +ext::chain_complex::finite_chain_complex - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/ext/chain_complex/finite_chain_complex/struct.FiniteAugmentedChainComplex.html b/docs/ext/chain_complex/finite_chain_complex/struct.FiniteAugmentedChainComplex.html index c9a9c1440..33585eb38 100644 --- a/docs/ext/chain_complex/finite_chain_complex/struct.FiniteAugmentedChainComplex.html +++ b/docs/ext/chain_complex/finite_chain_complex/struct.FiniteAugmentedChainComplex.html @@ -1,4 +1,4 @@ -FiniteAugmentedChainComplex in ext::chain_complex::finite_chain_complex - Rust +FiniteAugmentedChainComplex in ext::chain_complex::finite_chain_complex - Rust @@ -23,67 +23,67 @@ }); -
    pub struct FiniteAugmentedChainComplex<M, F1, F2, CC>where
    +
    pub struct FiniteAugmentedChainComplex<M, F1, F2, CC>where
         M: Module,
         CC: ChainComplex<Algebra = M::Algebra>,
         F1: ModuleHomomorphism<Source = M, Target = M>,
         F2: ModuleHomomorphism<Source = M, Target = CC::Module>,{
         cc: FiniteChainComplex<M, F1>,
    -    target_cc: Arc<CC>,
    -    chain_maps: Vec<Arc<F2>>,
    -}

    Fields§

    §cc: FiniteChainComplex<M, F1>§target_cc: Arc<CC>§chain_maps: Vec<Arc<F2>>

    Implementations§

    source§

    impl<M, CC> FiniteAugmentedChainComplex<M, FullModuleHomomorphism<M>, FullModuleHomomorphism<M, CC::Module>, CC>where + target_cc: Arc<CC>, + chain_maps: Vec<Arc<F2>>, +}

    Fields§

    §cc: FiniteChainComplex<M, F1>§target_cc: Arc<CC>§chain_maps: Vec<Arc<F2>>

    Implementations§

    source§

    impl<M, CC> FiniteAugmentedChainComplex<M, FullModuleHomomorphism<M>, FullModuleHomomorphism<M, CC::Module>, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>,

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( &self, - f: impl FnMut(&M) -> N + f: impl FnMut(&M) -> N ) -> FiniteAugmentedChainComplex<N, FullModuleHomomorphism<N>, FullModuleHomomorphism<N, CC::Module>, CC>

    Trait Implementations§

    source§

    impl<M, F1, F2, CC> AugmentedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    This currently crashes if s is greater than the s degree of the class this came from.

    -
    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    fn target(&self) -> Arc<Self::TargetComplex>

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    This currently crashes if s is greater than the s degree of the class this came from.

    +
    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    fn target(&self) -> Arc<Self::TargetComplex>

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    fn algebra(&self) -> Arc<M::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,
    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    fn algebra(&self) -> Arc<M::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +long as all the generators hit by the differential have already been computed.
    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where +the quasi-inverse might be stored separately on disk. Read more

    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( c: FiniteAugmentedChainComplex<M, F1, F2, CC> -) -> FiniteChainComplex<M, F1>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where - CC: RefUnwindSafe, - F1: RefUnwindSafe, - F2: RefUnwindSafe, - M: RefUnwindSafe,

    §

    impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where - CC: RefUnwindSafe, - F1: RefUnwindSafe, - F2: RefUnwindSafe, - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> FiniteChainComplex<M, F1>
    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where + CC: RefUnwindSafe, + F1: RefUnwindSafe, + F2: RefUnwindSafe, + M: RefUnwindSafe,

    §

    impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where + CC: RefUnwindSafe, + F1: RefUnwindSafe, + F2: RefUnwindSafe, + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/finite_chain_complex/struct.FiniteChainComplex.html b/docs/ext/chain_complex/finite_chain_complex/struct.FiniteChainComplex.html index b2f7f8ec8..46b038efc 100644 --- a/docs/ext/chain_complex/finite_chain_complex/struct.FiniteChainComplex.html +++ b/docs/ext/chain_complex/finite_chain_complex/struct.FiniteChainComplex.html @@ -1,4 +1,4 @@ -FiniteChainComplex in ext::chain_complex::finite_chain_complex - Rust +FiniteChainComplex in ext::chain_complex::finite_chain_complex - Rust @@ -23,60 +23,60 @@ }); -
    pub struct FiniteChainComplex<M, F = FullModuleHomomorphism<M>>where
    +
    pub struct FiniteChainComplex<M, F = FullModuleHomomorphism<M>>where
         M: Module,
         F: ModuleHomomorphism<Source = M, Target = M>,{
    -    modules: Vec<Arc<M>>,
    -    zero_module: Arc<M>,
    -    differentials: Vec<Arc<F>>,
    -}

    Fields§

    §modules: Vec<Arc<M>>§zero_module: Arc<M>§differentials: Vec<Arc<F>>

    Implementations§

    source§

    impl<M, F> FiniteChainComplex<M, F>where + modules: Vec<Arc<M>>, + zero_module: Arc<M>, + differentials: Vec<Arc<F>>, +}

    Fields§

    §modules: Vec<Arc<M>>§zero_module: Arc<M>§differentials: Vec<Arc<F>>

    Implementations§

    source§

    impl<M, F> FiniteChainComplex<M, F>where M: Module + ZeroModule, - F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn new(modules: Vec<Arc<M>>, differentials: Vec<Arc<F>>) -> Self

    source

    pub fn ccdz(module: Arc<M>) -> Self

    source§

    impl<M, F> FiniteChainComplex<M, F>where + F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn new(modules: Vec<Arc<M>>, differentials: Vec<Arc<F>>) -> Self

    source

    pub fn ccdz(module: Arc<M>) -> Self

    source§

    impl<M, F> FiniteChainComplex<M, F>where M: Module, F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn pop(&mut self)

    source§

    impl<M: Module> FiniteChainComplex<M, FullModuleHomomorphism<M>>

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( &self, - f: impl FnMut(&M) -> N + f: impl FnMut(&M) -> N ) -> FiniteChainComplex<N, FullModuleHomomorphism<N>>

    source§

    impl<M, F1> FiniteChainComplex<M, F1>where M: Module, F1: ModuleHomomorphism<Source = M, Target = M>,

    source

    pub fn augment<CC: ChainComplex<Algebra = M::Algebra>, F2: ModuleHomomorphism<Source = M, Target = CC::Module>>( self, - target_cc: Arc<CC>, - chain_maps: Vec<Arc<F2>> + target_cc: Arc<CC>, + chain_maps: Vec<Arc<F2>> ) -> FiniteAugmentedChainComplex<M, F1, F2, CC>

    Trait Implementations§

    source§

    impl<M, F> BoundedChainComplex for FiniteChainComplex<M, F>where M: Module, - F: ModuleHomomorphism<Source = M, Target = M>,

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where + F: ModuleHomomorphism<Source = M, Target = M>,

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where M: Module, - F: ModuleHomomorphism<Source = M, Target = M>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been + F: ModuleHomomorphism<Source = M, Target = M>,
    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +long as all the generators hit by the differential have already been computed.
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where +the quasi-inverse might be stored separately on disk. Read more

    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( c: FiniteAugmentedChainComplex<M, F1, F2, CC> -) -> FiniteChainComplex<M, F1>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where - F: RefUnwindSafe, - M: RefUnwindSafe,

    §

    impl<M, F> Send for FiniteChainComplex<M, F>

    §

    impl<M, F> Sync for FiniteChainComplex<M, F>

    §

    impl<M, F> Unpin for FiniteChainComplex<M, F>

    §

    impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where - F: RefUnwindSafe, - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> FiniteChainComplex<M, F1>
    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where + F: RefUnwindSafe, + M: RefUnwindSafe,

    §

    impl<M, F> Send for FiniteChainComplex<M, F>

    §

    impl<M, F> Sync for FiniteChainComplex<M, F>

    §

    impl<M, F> Unpin for FiniteChainComplex<M, F>

    §

    impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where + F: RefUnwindSafe, + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/index.html b/docs/ext/chain_complex/index.html index 9e556ba12..3f382f75a 100644 --- a/docs/ext/chain_complex/index.html +++ b/docs/ext/chain_complex/index.html @@ -1,4 +1,4 @@ -ext::chain_complex - Rust +ext::chain_complex - Rust @@ -23,6 +23,6 @@ }); -

    Module ext::chain_complex

    source ·

    Re-exports

    • pub use chain_homotopy::ChainHomotopy;

    Modules

    Structs

    Enums

    Traits

    \ No newline at end of file diff --git a/docs/ext/chain_complex/struct.FiniteAugmentedChainComplex.html b/docs/ext/chain_complex/struct.FiniteAugmentedChainComplex.html index c28259f51..8f3c24b4d 100644 --- a/docs/ext/chain_complex/struct.FiniteAugmentedChainComplex.html +++ b/docs/ext/chain_complex/struct.FiniteAugmentedChainComplex.html @@ -1,4 +1,4 @@ -FiniteAugmentedChainComplex in ext::chain_complex - Rust +FiniteAugmentedChainComplex in ext::chain_complex - Rust @@ -23,67 +23,67 @@ }); -
    pub struct FiniteAugmentedChainComplex<M, F1, F2, CC>where
    +
    pub struct FiniteAugmentedChainComplex<M, F1, F2, CC>where
         M: Module,
         CC: ChainComplex<Algebra = M::Algebra>,
         F1: ModuleHomomorphism<Source = M, Target = M>,
         F2: ModuleHomomorphism<Source = M, Target = CC::Module>,{
         cc: FiniteChainComplex<M, F1>,
    -    target_cc: Arc<CC>,
    -    chain_maps: Vec<Arc<F2>>,
    -}

    Fields§

    §cc: FiniteChainComplex<M, F1>§target_cc: Arc<CC>§chain_maps: Vec<Arc<F2>>

    Implementations§

    source§

    impl<M, CC> FiniteAugmentedChainComplex<M, FullModuleHomomorphism<M>, FullModuleHomomorphism<M, CC::Module>, CC>where + target_cc: Arc<CC>, + chain_maps: Vec<Arc<F2>>, +}

    Fields§

    §cc: FiniteChainComplex<M, F1>§target_cc: Arc<CC>§chain_maps: Vec<Arc<F2>>

    Implementations§

    source§

    impl<M, CC> FiniteAugmentedChainComplex<M, FullModuleHomomorphism<M>, FullModuleHomomorphism<M, CC::Module>, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>,

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( &self, - f: impl FnMut(&M) -> N + f: impl FnMut(&M) -> N ) -> FiniteAugmentedChainComplex<N, FullModuleHomomorphism<N>, FullModuleHomomorphism<N, CC::Module>, CC>

    Trait Implementations§

    source§

    impl<M, F1, F2, CC> AugmentedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    This currently crashes if s is greater than the s degree of the class this came from.

    -
    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    fn target(&self) -> Arc<Self::TargetComplex>

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    This currently crashes if s is greater than the s degree of the class this came from.

    +
    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    fn target(&self) -> Arc<Self::TargetComplex>

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    fn algebra(&self) -> Arc<M::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,
    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    fn algebra(&self) -> Arc<M::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +long as all the generators hit by the differential have already been computed.
    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where +the quasi-inverse might be stored separately on disk. Read more

    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( c: FiniteAugmentedChainComplex<M, F1, F2, CC> -) -> FiniteChainComplex<M, F1>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where - CC: RefUnwindSafe, - F1: RefUnwindSafe, - F2: RefUnwindSafe, - M: RefUnwindSafe,

    §

    impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where - CC: RefUnwindSafe, - F1: RefUnwindSafe, - F2: RefUnwindSafe, - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> FiniteChainComplex<M, F1>
    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where + CC: RefUnwindSafe, + F1: RefUnwindSafe, + F2: RefUnwindSafe, + M: RefUnwindSafe,

    §

    impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>

    §

    impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where + CC: RefUnwindSafe, + F1: RefUnwindSafe, + F2: RefUnwindSafe, + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/struct.FiniteChainComplex.html b/docs/ext/chain_complex/struct.FiniteChainComplex.html index 500637b79..81c7be726 100644 --- a/docs/ext/chain_complex/struct.FiniteChainComplex.html +++ b/docs/ext/chain_complex/struct.FiniteChainComplex.html @@ -1,4 +1,4 @@ -FiniteChainComplex in ext::chain_complex - Rust +FiniteChainComplex in ext::chain_complex - Rust @@ -23,60 +23,60 @@ }); -
    pub struct FiniteChainComplex<M, F = FullModuleHomomorphism<M>>where
    +
    pub struct FiniteChainComplex<M, F = FullModuleHomomorphism<M>>where
         M: Module,
         F: ModuleHomomorphism<Source = M, Target = M>,{
    -    modules: Vec<Arc<M>>,
    -    zero_module: Arc<M>,
    -    differentials: Vec<Arc<F>>,
    -}

    Fields§

    §modules: Vec<Arc<M>>§zero_module: Arc<M>§differentials: Vec<Arc<F>>

    Implementations§

    source§

    impl<M, F> FiniteChainComplex<M, F>where + modules: Vec<Arc<M>>, + zero_module: Arc<M>, + differentials: Vec<Arc<F>>, +}

    Fields§

    §modules: Vec<Arc<M>>§zero_module: Arc<M>§differentials: Vec<Arc<F>>

    Implementations§

    source§

    impl<M, F> FiniteChainComplex<M, F>where M: Module + ZeroModule, - F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn new(modules: Vec<Arc<M>>, differentials: Vec<Arc<F>>) -> Self

    source

    pub fn ccdz(module: Arc<M>) -> Self

    source§

    impl<M, F> FiniteChainComplex<M, F>where + F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn new(modules: Vec<Arc<M>>, differentials: Vec<Arc<F>>) -> Self

    source

    pub fn ccdz(module: Arc<M>) -> Self

    source§

    impl<M, F> FiniteChainComplex<M, F>where M: Module, F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn pop(&mut self)

    source§

    impl<M: Module> FiniteChainComplex<M, FullModuleHomomorphism<M>>

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( &self, - f: impl FnMut(&M) -> N + f: impl FnMut(&M) -> N ) -> FiniteChainComplex<N, FullModuleHomomorphism<N>>

    source§

    impl<M, F1> FiniteChainComplex<M, F1>where M: Module, F1: ModuleHomomorphism<Source = M, Target = M>,

    source

    pub fn augment<CC: ChainComplex<Algebra = M::Algebra>, F2: ModuleHomomorphism<Source = M, Target = CC::Module>>( self, - target_cc: Arc<CC>, - chain_maps: Vec<Arc<F2>> + target_cc: Arc<CC>, + chain_maps: Vec<Arc<F2>> ) -> FiniteAugmentedChainComplex<M, F1, F2, CC>

    Trait Implementations§

    source§

    impl<M, F> BoundedChainComplex for FiniteChainComplex<M, F>where M: Module, - F: ModuleHomomorphism<Source = M, Target = M>,

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where + F: ModuleHomomorphism<Source = M, Target = M>,

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where M: Module, - F: ModuleHomomorphism<Source = M, Target = M>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been + F: ModuleHomomorphism<Source = M, Target = M>,
    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +long as all the generators hit by the differential have already been computed.
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where +the quasi-inverse might be stored separately on disk. Read more

    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( c: FiniteAugmentedChainComplex<M, F1, F2, CC> -) -> FiniteChainComplex<M, F1>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where - F: RefUnwindSafe, - M: RefUnwindSafe,

    §

    impl<M, F> Send for FiniteChainComplex<M, F>

    §

    impl<M, F> Sync for FiniteChainComplex<M, F>

    §

    impl<M, F> Unpin for FiniteChainComplex<M, F>

    §

    impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where - F: RefUnwindSafe, - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> FiniteChainComplex<M, F1>
    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where + F: RefUnwindSafe, + M: RefUnwindSafe,

    §

    impl<M, F> Send for FiniteChainComplex<M, F>

    §

    impl<M, F> Sync for FiniteChainComplex<M, F>

    §

    impl<M, F> Unpin for FiniteChainComplex<M, F>

    §

    impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where + F: RefUnwindSafe, + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/struct.StemIterator.html b/docs/ext/chain_complex/struct.StemIterator.html index 5c1f88ca0..7f6bc1143 100644 --- a/docs/ext/chain_complex/struct.StemIterator.html +++ b/docs/ext/chain_complex/struct.StemIterator.html @@ -1,4 +1,4 @@ -StemIterator in ext::chain_complex - Rust +StemIterator in ext::chain_complex - Rust @@ -23,523 +23,523 @@ }); -
    pub struct StemIterator<'a, CC: ?Sized> {
    -    cc: &'a CC,
    -    current: Bidegree,
    -    max_s: u32,
    +
    pub struct StemIterator<'a, CC: ?Sized> {
    +    cc: &'a CC,
    +    current: Bidegree,
    +    max_s: u32,
     }
    Expand description

    An iterator returned by ChainComplex::iter_stem

    -

    Fields§

    §cc: &'a CC§current: Bidegree§max_s: u32

    Trait Implementations§

    source§

    impl<'a, CC: ChainComplex + ?Sized> Iterator for StemIterator<'a, CC>

    §

    type Item = Bidegree

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Fields§

    §cc: &'a CC§current: Bidegree§max_s: u32

    Trait Implementations§

    source§

    impl<'a, CC: ChainComplex + ?Sized> Iterator for StemIterator<'a, CC>

    §

    type Item = Bidegree

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a, CC: ?Sized> RefUnwindSafe for StemIterator<'a, CC>where - CC: RefUnwindSafe,

    §

    impl<'a, CC: ?Sized> Send for StemIterator<'a, CC>where - CC: Sync,

    §

    impl<'a, CC: ?Sized> Sync for StemIterator<'a, CC>where - CC: Sync,

    §

    impl<'a, CC: ?Sized> Unpin for StemIterator<'a, CC>

    §

    impl<'a, CC: ?Sized> UnwindSafe for StemIterator<'a, CC>where - CC: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a, CC: ?Sized> RefUnwindSafe for StemIterator<'a, CC>where + CC: RefUnwindSafe,

    §

    impl<'a, CC: ?Sized> Send for StemIterator<'a, CC>where + CC: Sync,

    §

    impl<'a, CC: ?Sized> Sync for StemIterator<'a, CC>where + CC: Sync,

    §

    impl<'a, CC: ?Sized> Unpin for StemIterator<'a, CC>

    §

    impl<'a, CC: ?Sized> UnwindSafe for StemIterator<'a, CC>where + CC: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/chain_complex/trait.AugmentedChainComplex.html b/docs/ext/chain_complex/trait.AugmentedChainComplex.html index 776564534..6e1017ee6 100644 --- a/docs/ext/chain_complex/trait.AugmentedChainComplex.html +++ b/docs/ext/chain_complex/trait.AugmentedChainComplex.html @@ -1,4 +1,4 @@ -AugmentedChainComplex in ext::chain_complex - Rust +AugmentedChainComplex in ext::chain_complex - Rust @@ -23,18 +23,18 @@ }); -
    pub trait AugmentedChainComplex: ChainComplex {
    +
    pub trait AugmentedChainComplex: ChainComplex {
         type TargetComplex: ChainComplex<Algebra = Self::Algebra>;
         type ChainMap: ModuleHomomorphism<Source = Self::Module, Target = <Self::TargetComplex as ChainComplex>::Module>;
     
         // Required methods
    -    fn target(&self) -> Arc<Self::TargetComplex>;
    -    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>;
    +    fn target(&self) -> Arc<Self::TargetComplex>;
    +    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>;
     }
    Expand description

    An augmented chain complex is a map of chain complexes C -> D that is a quasi-isomorphism. We usually think of C as a resolution of D. The chain map must be a map of degree shift 0.

    -

    Required Associated Types§

    source

    type TargetComplex: ChainComplex<Algebra = Self::Algebra>

    source

    type ChainMap: ModuleHomomorphism<Source = Self::Module, Target = <Self::TargetComplex as ChainComplex>::Module>

    Required Methods§

    source

    fn target(&self) -> Arc<Self::TargetComplex>

    source

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    Implementors§

    source§

    impl<M, F1, F2, CC> AugmentedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where +

    Required Associated Types§

    source

    type TargetComplex: ChainComplex<Algebra = Self::Algebra>

    source

    type ChainMap: ModuleHomomorphism<Source = Self::Module, Target = <Self::TargetComplex as ChainComplex>::Module>

    Required Methods§

    source

    fn target(&self) -> Arc<Self::TargetComplex>

    source

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    Implementors§

    source§

    impl<M, F1, F2, CC> AugmentedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, - F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> AugmentedChainComplex for Resolution<M>

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> AugmentedChainComplex for Resolution<M>

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where CC::Algebra: MuAlgebra<U>,

    \ No newline at end of file diff --git a/docs/ext/chain_complex/trait.BoundedChainComplex.html b/docs/ext/chain_complex/trait.BoundedChainComplex.html index 730dc7e38..9c4a0d0e2 100644 --- a/docs/ext/chain_complex/trait.BoundedChainComplex.html +++ b/docs/ext/chain_complex/trait.BoundedChainComplex.html @@ -1,4 +1,4 @@ -BoundedChainComplex in ext::chain_complex - Rust +BoundedChainComplex in ext::chain_complex - Rust @@ -23,14 +23,14 @@ }); -
    pub trait BoundedChainComplex: ChainComplex {
    +
    pub trait BoundedChainComplex: ChainComplex {
         // Required method
    -    fn max_s(&self) -> u32;
    +    fn max_s(&self) -> u32;
     
         // Provided method
    -    fn euler_characteristic(&self, t: i32) -> isize { ... }
    +    fn euler_characteristic(&self, t: i32) -> isize { ... }
     }
    Expand description

    A bounded chain complex is a chain complex C for which C_s = 0 for all s >= max_s

    -

    Required Methods§

    source

    fn max_s(&self) -> u32

    Provided Methods§

    Implementors§

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where +

    Required Methods§

    source

    fn max_s(&self) -> u32

    Provided Methods§

    Implementors§

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, diff --git a/docs/ext/chain_complex/trait.ChainComplex.html b/docs/ext/chain_complex/trait.ChainComplex.html index f160566cf..04f65996a 100644 --- a/docs/ext/chain_complex/trait.ChainComplex.html +++ b/docs/ext/chain_complex/trait.ChainComplex.html @@ -1,4 +1,4 @@ -ChainComplex in ext::chain_complex - Rust +ChainComplex in ext::chain_complex - Rust @@ -23,63 +23,63 @@ }); -
    pub trait ChainComplex: Send + Sync {
    +
    pub trait ChainComplex: Send + Sync {
         type Algebra: Algebra;
         type Module: Module<Algebra = Self::Algebra>;
         type Homomorphism: ModuleHomomorphism<Source = Self::Module, Target = Self::Module>;
     
     
    Show 13 methods // Required methods - fn algebra(&self) -> Arc<Self::Algebra>; - fn min_degree(&self) -> i32; - fn zero_module(&self) -> Arc<Self::Module>; - fn module(&self, homological_degree: u32) -> Arc<Self::Module>; - fn differential(&self, s: u32) -> Arc<Self::Homomorphism>; - fn has_computed_bidegree(&self, b: Bidegree) -> bool; - fn compute_through_bidegree(&self, b: Bidegree); - fn next_homological_degree(&self) -> u32; + fn algebra(&self) -> Arc<Self::Algebra>; + fn min_degree(&self) -> i32; + fn zero_module(&self) -> Arc<Self::Module>; + fn module(&self, homological_degree: u32) -> Arc<Self::Module>; + fn differential(&self, s: u32) -> Arc<Self::Homomorphism>; + fn has_computed_bidegree(&self, b: Bidegree) -> bool; + fn compute_through_bidegree(&self, b: Bidegree); + fn next_homological_degree(&self) -> u32; // Provided methods - fn prime(&self) -> ValidPrime { ... } + fn prime(&self) -> ValidPrime { ... } fn iter_stem(&self) -> StemIterator<'_, Self> { ... } fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] - ) -> bool - where for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>> { ... } - fn save_dir(&self) -> Option<&Path> { ... } - fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra> { ... } + results: &mut [T], + b: Bidegree, + inputs: &[S] + ) -> bool + where for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>> { ... } + fn save_dir(&self) -> Option<&Path> { ... } + fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra> { ... }
    }
    Expand description

    A chain complex is defined to start in degree 0. The min_degree is the min_degree of the modules in the chain complex, all of which must be the same.

    -

    Required Associated Types§

    source

    type Algebra: Algebra

    source

    type Module: Module<Algebra = Self::Algebra>

    source

    type Homomorphism: ModuleHomomorphism<Source = Self::Module, Target = Self::Module>

    Required Methods§

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    source

    fn min_degree(&self) -> i32

    source

    fn zero_module(&self) -> Arc<Self::Module>

    source

    fn module(&self, homological_degree: u32) -> Arc<Self::Module>

    source

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.

    -
    source

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +

    Required Associated Types§

    source

    type Algebra: Algebra

    source

    type Module: Module<Algebra = Self::Algebra>

    source

    type Homomorphism: ModuleHomomorphism<Source = Self::Module, Target = Self::Module>

    Required Methods§

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    source

    fn min_degree(&self) -> i32

    source

    fn zero_module(&self) -> Arc<Self::Module>

    source

    fn module(&self, homological_degree: u32) -> Arc<Self::Module>

    source

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.

    +
    source

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as long as all the generators hit by the differential have already been computed.

    -
    source

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed

    -
    source

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.

    -

    Provided Methods§

    source

    fn prime(&self) -> ValidPrime

    source

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +

    source

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed

    +
    source

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.

    +

    Provided Methods§

    source

    fn prime(&self) -> ValidPrime

    source

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of the form (s, n, t).

    source

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases the quasi-inverse might be stored separately on disk.

    This returns whether the application was successful

    -
    source

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.

    -
    source

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    +
    source

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.

    +
    source

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    Implementors§

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where M: Module, CC: ChainComplex<Algebra = M::Algebra>, F1: ModuleHomomorphism<Source = M, Target = M>, F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where M: Module, - F: ModuleHomomorphism<Source = M, Target = M>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> ChainComplex for Resolution<M>

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where - CC::Algebra: MuAlgebra<U>,

    \ No newline at end of file + F: ModuleHomomorphism<Source = M, Target = M>,
    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> ChainComplex for Resolution<M>

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    \ No newline at end of file diff --git a/docs/ext/chain_complex/trait.FreeChainComplex.html b/docs/ext/chain_complex/trait.FreeChainComplex.html index 6b1fafb5e..b4c563750 100644 --- a/docs/ext/chain_complex/trait.FreeChainComplex.html +++ b/docs/ext/chain_complex/trait.FreeChainComplex.html @@ -1,4 +1,4 @@ -FreeChainComplex in ext::chain_complex - Rust +FreeChainComplex in ext::chain_complex - Rust @@ -23,29 +23,29 @@ }); -
    pub trait FreeChainComplex<const U: bool = false>: ChainComplex<Module = MuFreeModule<U, <Self as ChainComplex>::Algebra>, Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <Self as ChainComplex>::Algebra>>>where
    +
    pub trait FreeChainComplex<const U: bool = false>: ChainComplex<Module = MuFreeModule<U, <Self as ChainComplex>::Algebra>, Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <Self as ChainComplex>::Algebra>>>where
         <Self as ChainComplex>::Algebra: MuAlgebra<U>,{
         // Provided methods
    -    fn graded_dimension_string(&self) -> String { ... }
    -    fn to_sseq(&self) -> Sseq<Adams> { ... }
    -    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product { ... }
    +    fn graded_dimension_string(&self) -> String { ... }
    +    fn to_sseq(&self) -> Sseq<Adams> { ... }
    +    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product { ... }
         fn filtration_one_product(
             &self,
    -        op_deg: i32,
    -        op_idx: usize,
    -        source: Bidegree
    -    ) -> Option<Vec<Vec<u32>>> { ... }
    -    fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize { ... }
    -    fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String { ... }
    -}

    Provided Methods§

    source

    fn graded_dimension_string(&self) -> String

    source

    fn to_sseq(&self) -> Sseq<Adams>

    source

    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product

    source

    fn filtration_one_product( + op_deg: i32, + op_idx: usize, + source: Bidegree + ) -> Option<Vec<Vec<u32>>> { ... } + fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize { ... } + fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String { ... } +}

    Provided Methods§

    source

    fn graded_dimension_string(&self) -> String

    source

    fn to_sseq(&self) -> Sseq<Adams>

    source

    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product

    source

    fn filtration_one_product( &self, - op_deg: i32, - op_idx: usize, - source: Bidegree -) -> Option<Vec<Vec<u32>>>

    Computes the filtration one product.

    + op_deg: i32, + op_idx: usize, + source: Bidegree +) -> Option<Vec<Vec<u32>>>

    Computes the filtration one product.

    Returns

    If the chain complex is stable, this always returns Some. If it is unstable, this returns None if the product is not defined.

    -
    source

    fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize

    source

    fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String

    Implementors§

    source§

    impl<const U: bool, CC> FreeChainComplex<U> for CCwhere +

    source

    fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize

    source

    fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String

    Implementors§

    source§

    impl<const U: bool, CC> FreeChainComplex<U> for CCwhere CC: ChainComplex<Module = MuFreeModule<U, Self::Algebra>, Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, Self::Algebra>>>, Self::Algebra: MuAlgebra<U>,

    \ No newline at end of file diff --git a/docs/ext/index.html b/docs/ext/index.html index 82b5cdc08..2bc75f8b4 100644 --- a/docs/ext/index.html +++ b/docs/ext/index.html @@ -1,4 +1,4 @@ -ext - Rust +ext - Rust @@ -23,7 +23,7 @@ }); -

    Crate ext

    source ·
    Expand description

    ext-rs is a collection of libraries for doing homological algebra over $\F_p$. The +

    Crate ext

    source ·
    Expand description

    ext-rs is a collection of libraries for doing homological algebra over $\F_p$. The main and original purpose is to compute Ext of a Steenrod module, but the library is written to be sufficiently generic to deal with more general applications.

    Examples

    @@ -140,11 +140,11 @@

    List of examples

    is as follows:

    - + - - - + + +
    NameDescription
    algebraThis defines algebras, modules and module homomorphisms
    [bivec]This is a small crate that provides BiVec - a variant of Vec indexed by an i32 whose starting index may be non-zero.
    bivecThis is a small crate that provides BiVec - a variant of Vec indexed by an i32 whose starting index may be non-zero.
    chartThis provides some APIs for generating charts
    [fp]This implements linear algebra over $\mathbb{F}_p$, as well as general helper functions about primes.
    [once]This provides OnceVec and OnceBiVec, a push-only vector with non-blocking reads. This models some partially computed infinite data structure, and we think of pushing as simply finding out more of this infinite data structure instead of genuinely mutating it.
    [query]This contains some helper functions for a command line interface.
    fpThis implements linear algebra over $\mathbb{F}_p$, as well as general helper functions about primes.
    onceThis provides OnceVec and OnceBiVec, a push-only vector with non-blocking reads. This models some partially computed infinite data structure, and we think of pushing as simply finding out more of this infinite data structure instead of genuinely mutating it.
    queryThis contains some helper functions for a command line interface.

    Features

  • This module exports the Resolution object, which is a chain complex resolving a module. In particular, this contains the core logic that compute minimal resolutions.
  • This module defines MuResolutionHomomorphism, which is a chain map from a -FreeChainComplex.
  • A module containing various utility functions related to user interaction in some way.
  • Type Definitions

    \ No newline at end of file +FreeChainComplex.
  • A module containing various utility functions related to user interaction in some way.
  • Type Aliases

    \ No newline at end of file diff --git a/docs/ext/nassau/constant.MAX_NEW_GENS.html b/docs/ext/nassau/constant.MAX_NEW_GENS.html index 2fee32fc8..81d650f52 100644 --- a/docs/ext/nassau/constant.MAX_NEW_GENS.html +++ b/docs/ext/nassau/constant.MAX_NEW_GENS.html @@ -1,4 +1,4 @@ -MAX_NEW_GENS in ext::nassau - Rust +MAX_NEW_GENS in ext::nassau - Rust @@ -23,4 +23,4 @@ }); -

    Constant ext::nassau::MAX_NEW_GENS

    source ·
    const MAX_NEW_GENS: usize = 10;
    \ No newline at end of file +

    Constant ext::nassau::MAX_NEW_GENS

    source ·
    const MAX_NEW_GENS: usize = 10;
    \ No newline at end of file diff --git a/docs/ext/nassau/enum.Magic.html b/docs/ext/nassau/enum.Magic.html index 7d2987659..d314d5c27 100644 --- a/docs/ext/nassau/enum.Magic.html +++ b/docs/ext/nassau/enum.Magic.html @@ -1,4 +1,4 @@ -Magic in ext::nassau - Rust +Magic in ext::nassau - Rust @@ -23,19 +23,19 @@ }); -

    Enum ext::nassau::Magic

    source ·
    enum Magic {
    +

    Enum ext::nassau::Magic

    source ·
    enum Magic {
         End,
         Signature,
         Fix,
     }
    Expand description

    Some magic constants used in the save file

    -

    Variants§

    §

    End

    §

    Signature

    §

    Fix

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Magic

    §

    impl Send for Magic

    §

    impl Sync for Magic

    §

    impl Unpin for Magic

    §

    impl UnwindSafe for Magic

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Variants§

    §

    End

    §

    Signature

    §

    Fix

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Magic

    §

    impl Send for Magic

    §

    impl Sync for Magic

    §

    impl Unpin for Magic

    §

    impl UnwindSafe for Magic

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/nassau/index.html b/docs/ext/nassau/index.html index 65b24158d..e2e1d4d16 100644 --- a/docs/ext/nassau/index.html +++ b/docs/ext/nassau/index.html @@ -1,4 +1,4 @@ -ext::nassau - Rust +ext::nassau - Rust @@ -23,7 +23,7 @@ }); -

    Module ext::nassau

    source ·
    Expand description

    This module implements Nassau’s algorithm. The main export +

    Module ext::nassau

    source ·
    Expand description

    This module implements Nassau’s algorithm. The main export is the Resolution object, which is a resolution of the sphere at the prime 2 using Nassau’s algorithm. It aims to provide an API similar to resolution::Resolution. From an API point of view, the main diff --git a/docs/ext/nassau/struct.MilnorSubalgebra.html b/docs/ext/nassau/struct.MilnorSubalgebra.html index eee9225b6..5e43aa53f 100644 --- a/docs/ext/nassau/struct.MilnorSubalgebra.html +++ b/docs/ext/nassau/struct.MilnorSubalgebra.html @@ -1,4 +1,4 @@ -MilnorSubalgebra in ext::nassau - Rust +MilnorSubalgebra in ext::nassau - Rust @@ -23,49 +23,49 @@ }); -

    struct MilnorSubalgebra {
    -    profile: Vec<u8>,
    +
    struct MilnorSubalgebra {
    +    profile: Vec<u8>,
     }
    Expand description

    A Milnor subalgebra to be used in Nassau’s algorithm. This is equipped with an ordering of the signature as in Lemma 2.4 of the paper.

    To simplify implementation, we pick the ordering so that the (reverse) lexicographic ordering in Lemma 2.4 is just the (reverse) lexicographic ordering of the P parts. This corresponds to the ordering of $\mathcal{P}$ where $P^s_t < P^{s’}_t$ if $s < s’$).

    -

    Fields§

    §profile: Vec<u8>

    Implementations§

    source§

    impl MilnorSubalgebra

    source

    const INFINITY: u8 = 15u8

    This should be used when you want an entry of the profile to be infinity

    -
    source

    fn new(profile: Vec<u8>) -> Self

    source

    fn zero_algebra() -> Self

    The algebra with trivial profile, corresponding to the trivial algebra.

    -
    source

    fn has_signature(&self, ppart: &[PPartEntry], signature: &[PPartEntry]) -> bool

    Computes the signature of an element

    -
    source

    fn zero_signature(&self) -> Vec<PPartEntry>

    source

    fn signature_mask<'a>( +

    Fields§

    §profile: Vec<u8>

    Implementations§

    source§

    impl MilnorSubalgebra

    source

    const INFINITY: u8 = 15u8

    This should be used when you want an entry of the profile to be infinity

    +
    source

    fn new(profile: Vec<u8>) -> Self

    source

    fn zero_algebra() -> Self

    The algebra with trivial profile, corresponding to the trivial algebra.

    +
    source

    fn has_signature(&self, ppart: &[PPartEntry], signature: &[PPartEntry]) -> bool

    Computes the signature of an element

    +
    source

    fn zero_signature(&self) -> Vec<PPartEntry>

    source

    fn signature_mask<'a>( &'a self, algebra: &'a MilnorAlgebra, module: &'a FreeModule<MilnorAlgebra>, - degree: i32, + degree: i32, signature: &'a [PPartEntry] -) -> impl Iterator<Item = usize> + 'a

    Give a list of basis elements in degree degree that has signature signature.

    +) -> impl Iterator<Item = usize> + 'a

    Give a list of basis elements in degree degree that has signature signature.

    This requires passing the algebra for borrow checker reasons.

    -
    source

    fn signature_matrix( +

    source

    fn signature_matrix( &self, hom: &FreeModuleHomomorphism<FreeModule<MilnorAlgebra>>, - degree: i32, + degree: i32, signature: &[PPartEntry] -) -> Matrix

    Get the matrix of a free module homomorphism when restricted to the subquotient given by +) -> Matrix

    Get the matrix of a free module homomorphism when restricted to the subquotient given by the signature.

    -
    source

    fn iter_signatures( +

    source

    fn iter_signatures( &self, - degree: i32 -) -> impl Iterator<Item = Vec<PPartEntry>> + '_

    Iterate through all signatures of this algebra that contain elements of degree at most + degree: i32 +) -> impl Iterator<Item = Vec<PPartEntry>> + '_

    Iterate through all signatures of this algebra that contain elements of degree at most degree (inclusive). This skips the initial zero signature.

    -
    source

    fn top_degree(&self) -> i32

    source

    fn optimal_for(b: Bidegree) -> MilnorSubalgebra

    source

    fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    fn from_bytes(data: &mut impl Read) -> Result<Self>

    source

    fn signature_to_bytes( +
    source

    fn top_degree(&self) -> i32

    source

    fn optimal_for(b: Bidegree) -> MilnorSubalgebra

    source

    fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    fn from_bytes(data: &mut impl Read) -> Result<Self>

    source

    fn signature_to_bytes( signature: &[PPartEntry], - buffer: &mut impl Write -) -> Result<()>

    source

    fn signature_from_bytes(&self, data: &mut impl Read) -> Result<Vec<PPartEntry>>

    Trait Implementations§

    source§

    impl Clone for MilnorSubalgebra

    source§

    fn clone(&self) -> MilnorSubalgebra

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for MilnorSubalgebra

    source§

    fn fmt(&self, out: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + buffer: &mut impl Write +) -> Result<()>
    source

    fn signature_from_bytes(&self, data: &mut impl Read) -> Result<Vec<PPartEntry>>

    Trait Implementations§

    source§

    impl Clone for MilnorSubalgebra

    source§

    fn clone(&self) -> MilnorSubalgebra

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for MilnorSubalgebra

    source§

    fn fmt(&self, out: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/nassau/struct.Resolution.html b/docs/ext/nassau/struct.Resolution.html index 6a12341be..838fd4bce 100644 --- a/docs/ext/nassau/struct.Resolution.html +++ b/docs/ext/nassau/struct.Resolution.html @@ -1,4 +1,4 @@ -Resolution in ext::nassau - Rust +Resolution in ext::nassau - Rust @@ -23,67 +23,67 @@ }); -

    Struct ext::nassau::Resolution

    source ·
    pub struct Resolution<M: ZeroModule<Algebra = MilnorAlgebra>> {
    -    lock: Mutex<()>,
    -    name: String,
    -    max_degree: i32,
    -    modules: OnceVec<Arc<FreeModule<MilnorAlgebra>>>,
    -    zero_module: Arc<FreeModule<MilnorAlgebra>>,
    -    differentials: OnceVec<Arc<FreeModuleHomomorphism<FreeModule<MilnorAlgebra>>>>,
    -    target: Arc<FiniteChainComplex<M>>,
    -    chain_maps: OnceVec<Arc<FreeModuleHomomorphism<M>>>,
    -    save_dir: Option<PathBuf>,
    +

    Struct ext::nassau::Resolution

    source ·
    pub struct Resolution<M: ZeroModule<Algebra = MilnorAlgebra>> {
    +    lock: Mutex<()>,
    +    name: String,
    +    max_degree: i32,
    +    modules: OnceVec<Arc<FreeModule<MilnorAlgebra>>>,
    +    zero_module: Arc<FreeModule<MilnorAlgebra>>,
    +    differentials: OnceVec<Arc<FreeModuleHomomorphism<FreeModule<MilnorAlgebra>>>>,
    +    target: Arc<FiniteChainComplex<M>>,
    +    chain_maps: OnceVec<Arc<FreeModuleHomomorphism<M>>>,
    +    save_dir: Option<PathBuf>,
     }
    Expand description

    A resolution of S_2 using Nassau’s algorithm. This aims to have an API similar to that of resolution::Resolution. From an API point of view, the main difference between the two is that this is a chain complex over MilnorAlgebra over SteenrodAlgebra.

    -

    Fields§

    §lock: Mutex<()>§name: String§max_degree: i32§modules: OnceVec<Arc<FreeModule<MilnorAlgebra>>>§zero_module: Arc<FreeModule<MilnorAlgebra>>§differentials: OnceVec<Arc<FreeModuleHomomorphism<FreeModule<MilnorAlgebra>>>>§target: Arc<FiniteChainComplex<M>>§chain_maps: OnceVec<Arc<FreeModuleHomomorphism<M>>>§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> Resolution<M>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn name(&self) -> &str

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn new(module: Arc<M>) -> Self

    source

    pub fn new_with_save(module: Arc<M>, save_dir: Option<PathBuf>) -> Result<Self>

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the +

    Fields§

    §lock: Mutex<()>§name: String§max_degree: i32§modules: OnceVec<Arc<FreeModule<MilnorAlgebra>>>§zero_module: Arc<FreeModule<MilnorAlgebra>>§differentials: OnceVec<Arc<FreeModuleHomomorphism<FreeModule<MilnorAlgebra>>>>§target: Arc<FiniteChainComplex<M>>§chain_maps: OnceVec<Arc<FreeModuleHomomorphism<M>>>§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> Resolution<M>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn name(&self) -> &str

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn new(module: Arc<M>) -> Self

    source

    pub fn new_with_save(module: Arc<M>, save_dir: Option<PathBuf>) -> Result<Self>

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the specified s degree. It does not perform any computations by itself. It simply lengthens the OnceVecs modules, chain_maps, etc. to the right length.

    -
    source

    fn write_qi( - f: &mut Option<impl Write>, - b: Bidegree, +

    source

    fn write_qi( + f: &mut Option<impl Write>, + b: Bidegree, subalgebra: &MilnorSubalgebra, - scratch: &mut FpVector, + scratch: &mut FpVector, signature: &[PPartEntry], - next_mask: &[usize], - full_matrix: &Matrix, - masked_matrix: &AugmentedMatrix<2> -) -> Result<()>

    source

    fn write_differential( + next_mask: &[usize], + full_matrix: &Matrix, + masked_matrix: &AugmentedMatrix<2> +) -> Result<()>

    source

    fn write_differential( &self, - b: Bidegree, - num_new_gens: usize, - target_dim: usize -) -> Result<()>

    source

    fn step_resolution_with_subalgebra( + b: Bidegree, + num_new_gens: usize, + target_dim: usize +) -> Result<()>

    source

    fn step_resolution_with_subalgebra( &self, - b: Bidegree, + b: Bidegree, subalgebra: MilnorSubalgebra -) -> Result<()>

    source

    fn step0(&self, t: i32)

    Step resolution for s = 0

    -
    source

    fn step1(&self, t: i32) -> Result<()>

    Step resolution for s = 1

    -
    source

    fn step_resolution_with_result(&self, b: Bidegree) -> Result<()>

    source

    fn step_resolution(&self, b: Bidegree)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    -

    Trait Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> AugmentedChainComplex for Resolution<M>

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> ChainComplex for Resolution<M>

    §

    type Algebra = MilnorAlgebra

    §

    type Module = MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<false, MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +) -> Result<()>
    source

    fn step0(&self, t: i32)

    Step resolution for s = 0

    +
    source

    fn step1(&self, t: i32) -> Result<()>

    Step resolution for s = 1

    +
    source

    fn step_resolution_with_result(&self, b: Bidegree) -> Result<()>

    source

    fn step_resolution(&self, b: Bidegree)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    +

    Trait Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> AugmentedChainComplex for Resolution<M>

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> ChainComplex for Resolution<M>

    §

    type Algebra = MilnorAlgebra

    §

    type Module = MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<false, MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, max: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn apply_quasi_inverse<T, S>( +long as all the generators hit by the differential have already been computed.

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, max: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of -the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for Resolution<M>where - M: RefUnwindSafe,

    §

    impl<M> Send for Resolution<M>

    §

    impl<M> Sync for Resolution<M>

    §

    impl<M> Unpin for Resolution<M>

    §

    impl<M> UnwindSafe for Resolution<M>where - M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    Auto Trait Implementations§

    §

    impl<M> RefUnwindSafe for Resolution<M>where + M: RefUnwindSafe,

    §

    impl<M> Send for Resolution<M>

    §

    impl<M> Sync for Resolution<M>

    §

    impl<M> Unpin for Resolution<M>

    §

    impl<M> UnwindSafe for Resolution<M>where + M: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/nassau/struct.SenderData.html b/docs/ext/nassau/struct.SenderData.html index 0340a8f11..d1c1c561e 100644 --- a/docs/ext/nassau/struct.SenderData.html +++ b/docs/ext/nassau/struct.SenderData.html @@ -1,4 +1,4 @@ -SenderData in ext::nassau - Rust +SenderData in ext::nassau - Rust @@ -23,18 +23,18 @@ }); -

    Struct ext::nassau::SenderData

    source ·
    struct SenderData {
    -    b: Bidegree,
    -    sender: Sender<SenderData>,
    +

    Struct ext::nassau::SenderData

    source ·
    struct SenderData {
    +    b: Bidegree,
    +    sender: Sender<SenderData>,
     }
    Expand description

    See resolution::SenderData. This differs by not having the new field.

    -

    Fields§

    §b: Bidegree§sender: Sender<SenderData>

    Implementations§

    source§

    impl SenderData

    source

    pub(crate) fn send(b: Bidegree, sender: Sender<Self>)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Fields§

    §b: Bidegree§sender: Sender<SenderData>

    Implementations§

    source§

    impl SenderData

    source

    pub(crate) fn send(b: Bidegree, sender: Sender<Self>)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/nassau/struct.SignatureIterator.html b/docs/ext/nassau/struct.SignatureIterator.html index 36cd93de2..d44e9dd31 100644 --- a/docs/ext/nassau/struct.SignatureIterator.html +++ b/docs/ext/nassau/struct.SignatureIterator.html @@ -1,4 +1,4 @@ -SignatureIterator in ext::nassau - Rust +SignatureIterator in ext::nassau - Rust @@ -23,520 +23,520 @@ }); -
    struct SignatureIterator<'a> {
    +
    struct SignatureIterator<'a> {
         subalgebra: &'a MilnorSubalgebra,
    -    current: Vec<PPartEntry>,
    -    signature_degree: i32,
    -    degree: i32,
    +    current: Vec<PPartEntry>,
    +    signature_degree: i32,
    +    degree: i32,
     }
    Expand description

    Fields§

    §subalgebra: &'a MilnorSubalgebra§current: Vec<PPartEntry>§signature_degree: i32§degree: i32

    Implementations§

    source§

    impl<'a> SignatureIterator<'a>

    source

    fn new(subalgebra: &'a MilnorSubalgebra, degree: i32) -> Self

    Trait Implementations§

    source§

    impl<'a> Iterator for SignatureIterator<'a>

    §

    type Item = Vec<u32, Global>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Fields§

    §subalgebra: &'a MilnorSubalgebra§current: Vec<PPartEntry>§signature_degree: i32§degree: i32

    Implementations§

    source§

    impl<'a> SignatureIterator<'a>

    source

    fn new(subalgebra: &'a MilnorSubalgebra, degree: i32) -> Self

    Trait Implementations§

    source§

    impl<'a> Iterator for SignatureIterator<'a>

    §

    type Item = Vec<u32, Global>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for SignatureIterator<'a>

    §

    impl<'a> Send for SignatureIterator<'a>

    §

    impl<'a> Sync for SignatureIterator<'a>

    §

    impl<'a> Unpin for SignatureIterator<'a>

    §

    impl<'a> UnwindSafe for SignatureIterator<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for SignatureIterator<'a>

    §

    impl<'a> Send for SignatureIterator<'a>

    §

    impl<'a> Sync for SignatureIterator<'a>

    §

    impl<'a> Unpin for SignatureIterator<'a>

    §

    impl<'a> UnwindSafe for SignatureIterator<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/nassau/struct.SubalgebraIterator.html b/docs/ext/nassau/struct.SubalgebraIterator.html index b334eff57..4f214326f 100644 --- a/docs/ext/nassau/struct.SubalgebraIterator.html +++ b/docs/ext/nassau/struct.SubalgebraIterator.html @@ -1,4 +1,4 @@ -SubalgebraIterator in ext::nassau - Rust +SubalgebraIterator in ext::nassau - Rust @@ -23,524 +23,524 @@ }); -
    struct SubalgebraIterator {
    +
    struct SubalgebraIterator {
         current: MilnorSubalgebra,
     }
    Expand description

    An iterator that iterates through a sequence of MilnorSubalgebra of increasing size. This is used by MilnorSubalgebra::optimal_for to find the largest subalgebra in this sequence that is applicable to a bidegree.

    -

    Fields§

    §current: MilnorSubalgebra

    Implementations§

    Trait Implementations§

    source§

    impl Iterator for SubalgebraIterator

    §

    type Item = MilnorSubalgebra

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Fields§

    §current: MilnorSubalgebra

    Implementations§

    Trait Implementations§

    source§

    impl Iterator for SubalgebraIterator

    §

    type Item = MilnorSubalgebra

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where - Self: Sized, - Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where + Self: Sized, + Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere - T: Iterator + Send, - <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere + T: Iterator + Send, + <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/resolution/constant.MAX_NEW_GENS.html b/docs/ext/resolution/constant.MAX_NEW_GENS.html index 0e67d858e..a1152df99 100644 --- a/docs/ext/resolution/constant.MAX_NEW_GENS.html +++ b/docs/ext/resolution/constant.MAX_NEW_GENS.html @@ -1,4 +1,4 @@ -MAX_NEW_GENS in ext::resolution - Rust +MAX_NEW_GENS in ext::resolution - Rust @@ -23,7 +23,7 @@ }); -

    Constant ext::resolution::MAX_NEW_GENS

    source ·
    const MAX_NEW_GENS: usize = 10;
    Expand description

    This is the maximum number of new generators we expect in each bidegree. This affects how much +

    Constant ext::resolution::MAX_NEW_GENS

    source ·
    const MAX_NEW_GENS: usize = 10;
    Expand description

    This is the maximum number of new generators we expect in each bidegree. This affects how much space we allocate when we are extending our resolutions. Having more than this many new generators will result in a slowdown but not an error. It is relatively cheap to increment this number if needs be, but up to the 140th stem we only see at most 8 new generators.

    diff --git a/docs/ext/resolution/index.html b/docs/ext/resolution/index.html index a1d3fb95a..952461aa8 100644 --- a/docs/ext/resolution/index.html +++ b/docs/ext/resolution/index.html @@ -1,4 +1,4 @@ -ext::resolution - Rust +ext::resolution - Rust @@ -23,7 +23,7 @@ }); -

    Module ext::resolution

    source ·
    Expand description

    This module exports the Resolution object, which is a chain complex resolving a module. In +

    Module ext::resolution

    source ·
    Expand description

    This module exports the Resolution object, which is a chain complex resolving a module. In particular, this contains the core logic that compute minimal resolutions.

    Structs

    Constants

    • This is the maximum number of new generators we expect in each bidegree. This affects how much space we allocate when we are extending our resolutions. Having more than this many new generators will result in a slowdown but not an error. It is relatively cheap to increment this -number if needs be, but up to the 140th stem we only see at most 8 new generators.

    Type Definitions

    \ No newline at end of file +number if needs be, but up to the 140th stem we only see at most 8 new generators.

    Type Aliases

    \ No newline at end of file diff --git a/docs/ext/resolution/struct.MuResolution.html b/docs/ext/resolution/struct.MuResolution.html index 4eba7bb39..9c6d7d4a2 100644 --- a/docs/ext/resolution/struct.MuResolution.html +++ b/docs/ext/resolution/struct.MuResolution.html @@ -1,4 +1,4 @@ -MuResolution in ext::resolution - Rust +MuResolution in ext::resolution - Rust @@ -23,27 +23,27 @@ }); -
    pub struct MuResolution<const U: bool, CC: ChainComplex>where
    +
    pub struct MuResolution<const U: bool, CC: ChainComplex>where
         CC::Algebra: MuAlgebra<U>,{
    -    name: String,
    -    lock: Mutex<()>,
    -    complex: Arc<CC>,
    -    modules: OnceVec<Arc<MuFreeModule<U, CC::Algebra>>>,
    -    zero_module: Arc<MuFreeModule<U, CC::Algebra>>,
    -    chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<U, CC::Module>>>,
    -    differentials: OnceVec<Arc<MuFreeModuleHomomorphism<U, MuFreeModule<U, CC::Algebra>>>>,
    -    kernels: DashMap<Bidegree, Subspace>,
    -    save_dir: Option<PathBuf>,
    -    pub should_save: bool,
    -    pub load_quasi_inverse: bool,
    +    name: String,
    +    lock: Mutex<()>,
    +    complex: Arc<CC>,
    +    modules: OnceVec<Arc<MuFreeModule<U, CC::Algebra>>>,
    +    zero_module: Arc<MuFreeModule<U, CC::Algebra>>,
    +    chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<U, CC::Module>>>,
    +    differentials: OnceVec<Arc<MuFreeModuleHomomorphism<U, MuFreeModule<U, CC::Algebra>>>>,
    +    kernels: DashMap<Bidegree, Subspace>,
    +    save_dir: Option<PathBuf>,
    +    pub should_save: bool,
    +    pub load_quasi_inverse: bool,
     }
    Expand description

    A minimal resolution of a chain complex. The functions MuResolution::compute_through_stem and MuResolution::compute_through_bidegree extends the minimal resolution to the given bidegree.

    -

    Fields§

    §name: String§lock: Mutex<()>§complex: Arc<CC>§modules: OnceVec<Arc<MuFreeModule<U, CC::Algebra>>>§zero_module: Arc<MuFreeModule<U, CC::Algebra>>§chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<U, CC::Module>>>§differentials: OnceVec<Arc<MuFreeModuleHomomorphism<U, MuFreeModule<U, CC::Algebra>>>>§kernels: DashMap<Bidegree, Subspace>

    For each internal degree, store the kernel of the most recently calculated chain map as +

    Fields§

    §name: String§lock: Mutex<()>§complex: Arc<CC>§modules: OnceVec<Arc<MuFreeModule<U, CC::Algebra>>>§zero_module: Arc<MuFreeModule<U, CC::Algebra>>§chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<U, CC::Module>>>§differentials: OnceVec<Arc<MuFreeModuleHomomorphism<U, MuFreeModule<U, CC::Algebra>>>>§kernels: DashMap<Bidegree, Subspace>

    For each internal degree, store the kernel of the most recently calculated chain map as returned by generate_old_kernel_and_compute_new_kernel, to be used if we run compute_through_degree again.

    -
    §save_dir: Option<PathBuf>§should_save: bool

    Whether we should save newly computed data to the disk. This has no effect if there is no +

    §save_dir: Option<PathBuf>§should_save: bool

    Whether we should save newly computed data to the disk. This has no effect if there is no save file. Defaults to self.save_dir.is_some().

    -
    §load_quasi_inverse: bool

    Whether we should keep the quasi-inverses of the differentials.

    +
    §load_quasi_inverse: bool

    Whether we should keep the quasi-inverses of the differentials.

    If set to false,

    • If there is no save file, then the quasi-inverse will not be computed.
    • @@ -53,18 +53,18 @@

      Note that this only applies to quasi-inverses of differentials. The quasi-inverses to the augmentation map are useful when the target chain complex is not concentrated in one degree, and they tend to be quite small anyway.

      -

    Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> MuResolution<U, CC>where - CC::Algebra: MuAlgebra<U>,

    source

    pub fn new(complex: Arc<CC>) -> Self

    source

    pub fn new_with_save( - complex: Arc<CC>, - save_dir: Option<PathBuf> -) -> Result<Self>

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn name(&self) -> &str

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the +

    Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source

    pub fn new(complex: Arc<CC>) -> Self

    source

    pub fn new_with_save( + complex: Arc<CC>, + save_dir: Option<PathBuf> +) -> Result<Self>

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn name(&self) -> &str

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the specified s degree. It does not perform any computations by itself. It simply lengthens the OnceVecs modules, chain_maps, etc. to the right length.

    -
    source

    fn get_kernel(&self, b: Bidegree) -> Subspace

    Gets the kernel of the differential starting at $(s, t)$. If this was previously computed, +

    source

    fn get_kernel(&self, b: Bidegree) -> Subspace

    Gets the kernel of the differential starting at $(s, t)$. If this was previously computed, we simply retrieve the value (and remove it from the cache). Otherwise, we compute the kernel. This requires the differential to be computed at $(s, t - 1)$, but not $(s, t)$ itself. Indeed, the new generators added to $(s, t)$ are by construction not in the kernel.

    -
    source

    fn step_resolution(&self, b: Bidegree)

    Call our resolution $X$, and the chain complex to resolve $C$. This is a legitimate +

    source

    fn step_resolution(&self, b: Bidegree)

    Call our resolution $X$, and the chain complex to resolve $C$. This is a legitimate resolution if the map $f: X \to C$ induces an isomorphism on homology. This is the same as saying the cofiber is exact. The cofiber is given by the complex

    $$ X_s \oplus C_{s+1} \to X_{s-1} \oplus C_s \to X_{s-2} \oplus C_{s-1} \to \cdots $$

    @@ -115,48 +115,48 @@
    Arguments

    To run step_resolution(s, t), we must have already had run step_resolution(s, t - 1) and step_resolution(s - 1, t - 1). It is more efficient if we have in fact run step_resolution(s - 1, t), so try your best to arrange calls to be run in this order.

    -
    source

    pub fn compute_through_bidegree_with_callback( +

    source

    pub fn compute_through_bidegree_with_callback( &self, - max: Bidegree, - cb: impl FnMut(Bidegree) -)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    -
    source

    pub fn compute_through_stem_with_callback( + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    +
    source

    pub fn compute_through_stem_with_callback( &self, - max: Bidegree, - cb: impl FnMut(Bidegree) -)

    Trait Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where - CC::Algebra: MuAlgebra<U>,

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where - CC::Algebra: MuAlgebra<U>,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Module = MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    Trait Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Module = MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been computed at (s, t), and so has the differential at (s, t). In the case of a free module, the target of the differential, namely the bidegree (s - 1, t), need not be computed, as -long as all the generators hit by the differential have already been computed.
    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn apply_quasi_inverse<T, S>( +long as all the generators hit by the differential have already been computed.

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn apply_quasi_inverse<T, S>( &self, - results: &mut [T], - b: Bidegree, - inputs: &[S] -) -> boolwhere - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,
    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases -the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of -the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    Auto Trait Implementations§

    §

    impl<const U: bool, CC> !RefUnwindSafe for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Send for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Sync for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Unpin for MuResolution<U, CC>

    §

    impl<const U: bool, CC> UnwindSafe for MuResolution<U, CC>where - CC: RefUnwindSafe, - <CC as ChainComplex>::Algebra: RefUnwindSafe, - <CC as ChainComplex>::Module: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<const U: bool, CC> FreeChainComplex<U> for CCwhere +the quasi-inverse might be stored separately on disk. Read more

    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree

    Auto Trait Implementations§

    §

    impl<const U: bool, CC> !RefUnwindSafe for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Send for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Sync for MuResolution<U, CC>

    §

    impl<const U: bool, CC> Unpin for MuResolution<U, CC>

    §

    impl<const U: bool, CC> UnwindSafe for MuResolution<U, CC>where + CC: RefUnwindSafe, + <CC as ChainComplex>::Algebra: RefUnwindSafe, + <CC as ChainComplex>::Module: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<const U: bool, CC> FreeChainComplex<U> for CCwhere CC: ChainComplex<Module = MuFreeModule<U, <CC as ChainComplex>::Algebra>, Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <CC as ChainComplex>::Algebra>>>, - <CC as ChainComplex>::Algebra: MuAlgebra<U>,

    source§

    fn graded_dimension_string(&self) -> String

    source§

    fn to_sseq(&self) -> Sseq<Adams>

    source§

    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product

    source§

    fn filtration_one_product( + <CC as ChainComplex>::Algebra: MuAlgebra<U>,

    source§

    fn graded_dimension_string(&self) -> String

    source§

    fn to_sseq(&self) -> Sseq<Adams>

    source§

    fn filtration_one_products(&self, op_deg: i32, op_idx: usize) -> Product

    source§

    fn filtration_one_product( &self, - op_deg: i32, - op_idx: usize, - source: Bidegree -) -> Option<Vec<Vec<u32>>>

    Computes the filtration one product. Read more
    source§

    fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize

    source§

    fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String

    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + op_deg: i32, + op_idx: usize, + source: Bidegree +) -> Option<Vec<Vec<u32>>>
    Computes the filtration one product. Read more
    source§

    fn number_of_gens_in_bidegree(&self, b: Bidegree) -> usize

    source§

    fn cocycle_string(&self, gen: BidegreeGenerator, compact: bool) -> String

    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/resolution/struct.SenderData.html b/docs/ext/resolution/struct.SenderData.html index eee25c9d2..df1c565ee 100644 --- a/docs/ext/resolution/struct.SenderData.html +++ b/docs/ext/resolution/struct.SenderData.html @@ -1,4 +1,4 @@ -SenderData in ext::resolution - Rust +SenderData in ext::resolution - Rust @@ -23,26 +23,26 @@ }); -

    Struct ext::resolution::SenderData

    source ·
    struct SenderData {
    -    b: Bidegree,
    -    new: bool,
    -    sender: Sender<SenderData>,
    +

    Struct ext::resolution::SenderData

    source ·
    struct SenderData {
    +    b: Bidegree,
    +    new: bool,
    +    sender: Sender<SenderData>,
     }
    Expand description

    In MuResolution::compute_through_stem and MuResolution::compute_through_bidegree, we pass this struct around to inform the supervisor what bidegrees have been computed. We use an explicit struct instead of a tuple to avoid an infinite type problem.

    -

    Fields§

    §b: Bidegree§new: bool

    Whether this bidegree was newly calculated or have already been calculated.

    -
    §sender: Sender<SenderData>

    The sender object used to send the SenderData. We put this in the struct and pass it +

    Fields§

    §b: Bidegree§new: bool

    Whether this bidegree was newly calculated or have already been calculated.

    +
    §sender: Sender<SenderData>

    The sender object used to send the SenderData. We put this in the struct and pass it around the mpsc, so that when all senders are dropped, we know the computation has completed. Compared to keeping track of calculations manually, this has the advantage of behaving correctly when a thread panicking.

    -

    Implementations§

    source§

    impl SenderData

    source

    fn send(b: Bidegree, new: bool, sender: Sender<Self>)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Implementations§

    source§

    impl SenderData

    source

    fn send(b: Bidegree, new: bool, sender: Sender<Self>)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/resolution/type.Resolution.html b/docs/ext/resolution/type.Resolution.html index 750400ac7..023778256 100644 --- a/docs/ext/resolution/type.Resolution.html +++ b/docs/ext/resolution/type.Resolution.html @@ -1,4 +1,4 @@ -Resolution in ext::resolution - Rust +Resolution in ext::resolution - Rust @@ -23,4 +23,117 @@ }); -

    Type Definition ext::resolution::Resolution

    source ·
    pub type Resolution<CC> = MuResolution<false, CC>;
    \ No newline at end of file +

    Type Alias ext::resolution::Resolution

    source ·
    pub type Resolution<CC> = MuResolution<false, CC>;

    Aliased Type§

    struct Resolution<CC> {
    +    name: String,
    +    lock: Mutex<()>,
    +    complex: Arc<CC, Global>,
    +    modules: OnceVec<Arc<MuFreeModule<false, <CC as ChainComplex>::Algebra>, Global>>,
    +    zero_module: Arc<MuFreeModule<false, <CC as ChainComplex>::Algebra>, Global>,
    +    chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<false, <CC as ChainComplex>::Module>, Global>>,
    +    differentials: OnceVec<Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, <CC as ChainComplex>::Algebra>>, Global>>,
    +    kernels: DashMap<Bidegree, Subspace, RandomState>,
    +    save_dir: Option<PathBuf>,
    +    pub should_save: bool,
    +    pub load_quasi_inverse: bool,
    +}

    Fields§

    §name: String§lock: Mutex<()>§complex: Arc<CC, Global>§modules: OnceVec<Arc<MuFreeModule<false, <CC as ChainComplex>::Algebra>, Global>>§zero_module: Arc<MuFreeModule<false, <CC as ChainComplex>::Algebra>, Global>§chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<false, <CC as ChainComplex>::Module>, Global>>§differentials: OnceVec<Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, <CC as ChainComplex>::Algebra>>, Global>>§kernels: DashMap<Bidegree, Subspace, RandomState>

    For each internal degree, store the kernel of the most recently calculated chain map as +returned by generate_old_kernel_and_compute_new_kernel, to be used if we run +compute_through_degree again.

    +
    §save_dir: Option<PathBuf>§should_save: bool

    Whether we should save newly computed data to the disk. This has no effect if there is no +save file. Defaults to self.save_dir.is_some().

    +
    §load_quasi_inverse: bool

    Whether we should keep the quasi-inverses of the differentials.

    +

    If set to false,

    +
      +
    • If there is no save file, then the quasi-inverse will not be computed.
    • +
    • If there is a save file, then the quasi-inverse will be computed, written to disk, and +dropped from memory. We will not load quasi-inverses from save files.
    • +
    +

    Note that this only applies to quasi-inverses of differentials. The quasi-inverses to the +augmentation map are useful when the target chain complex is not concentrated in one +degree, and they tend to be quite small anyway.

    +

    Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source

    pub fn new(complex: Arc<CC>) -> Self

    source

    pub fn new_with_save( + complex: Arc<CC>, + save_dir: Option<PathBuf> +) -> Result<Self>

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn name(&self) -> &str

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the +specified s degree. It does not perform any computations by itself. It simply lengthens +the OnceVecs modules, chain_maps, etc. to the right length.

    +
    source

    fn get_kernel(&self, b: Bidegree) -> Subspace

    Gets the kernel of the differential starting at $(s, t)$. If this was previously computed, +we simply retrieve the value (and remove it from the cache). Otherwise, we compute the +kernel. This requires the differential to be computed at $(s, t - 1)$, but not $(s, t)$ +itself. Indeed, the new generators added to $(s, t)$ are by construction not in the kernel.

    +
    source

    fn step_resolution(&self, b: Bidegree)

    Call our resolution $X$, and the chain complex to resolve $C$. This is a legitimate +resolution if the map $f: X \to C$ induces an isomorphism on homology. This is the same as +saying the cofiber is exact. The cofiber is given by the complex

    +

    $$ X_s \oplus C_{s+1} \to X_{s-1} \oplus C_s \to X_{s-2} \oplus C_{s-1} \to \cdots $$

    +

    where the differentials are given by

    +

    $$ \begin{pmatrix} d_X & 0 \\ (-1)^s f & d_C \end{pmatrix} $$

    +

    Our method of producing $X_{s, t}$ and the chain maps are as follows. Suppose we have already +built the chain map and differential for $X_{s-1, t}$ and $X_{s, t-1}$. Since $X_s$ is a +free module, the generators in degree $< t$ gives us a bunch of elements in $X_s$ already, +and we know exactly where they get mapped to. Let $T$ be the $\mathbb{F}_p$ vector space +generated by these elements. Then we already have a map

    +

    $$ T \to X_{s-1, t} \oplus C_{s, t}$$

    +

    and we know this hits the kernel of the map

    +

    $$ D = X_{s-1, t} \oplus C_{s, t} \to X_{s-2, t} \oplus C_{s-1, t}. $$

    +

    What we need to do now is to add generators to $X_{s, t}$ to hit the entirity of this +kernel. Note that we don’t have to do this. Some of the elements in the kernel might be +hit by $C_{s+1, t}$ and we don’t have to hit them, but we opt to add generators to hit it +anyway.

    +

    If we do it this way, then we know the composite of the map

    +

    $$ T \to X_{s-1, t} \oplus C_{s, t} \to C_{s, t} $$

    +

    has to be surjective, since the image of $C_{s, t}$ under $D$ is also in the image of $X_{s-1, t}$. +So our first step is to add generators to $X_{s, t}$ such that this composite is +surjective.

    +

    After adding these generators, we need to decide where to send them to. We know their +values in the $C_{s, t}$ component, but we need to use a quasi-inverse to find the element in +$X_{s-1, t}$ that hits the corresponding image of $C_{s, t}$. This tells us the $X_{s-1, +t}$ component.

    +

    Finally, we need to add further generators to $X_{s, t}$ to hit all the elements in the +kernel of

    +

    $$ X_{s-1, t} \to X_{s-2, t} \oplus C_{s-1, t}. $$

    +

    This kernel was recorded by the previous iteration of the method in old_kernel, so this +step is doable as well.

    +

    Note that if we add our new generators conservatively, then the kernel of the maps

    +

    $$ +\begin{aligned} +T &\to X_{s-1, t} \oplus C_{s, t} \\ +X_{s, t} &\to X_{s-1, t} \oplus C_{s, t} +\end{aligned} +$$ +agree.

    +

    In the code, we first row reduce the matrix of the map from $T$. This lets us record +the kernel which is what the function returns at the end. This computation helps us perform +the future steps since we need to know about the cokernel of this map.

    +
    Arguments
    +
      +
    • s - The s degree to calculate
    • +
    • t - The t degree to calculate
    • +
    +

    To run step_resolution(s, t), we must have already had run step_resolution(s, t - 1) +and step_resolution(s - 1, t - 1). It is more efficient if we have in fact run +step_resolution(s - 1, t), so try your best to arrange calls to be run in this order.

    +
    source

    pub fn compute_through_bidegree_with_callback( + &self, + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    +
    source

    pub fn compute_through_stem_with_callback( + &self, + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    Trait Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Module = MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +computed at (s, t), and so has the differential at (s, t). In the case of a free module, +the target of the differential, namely the bidegree (s - 1, t), need not be computed, as +long as all the generators hit by the differential have already been computed.
    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn apply_quasi_inverse<T, S>( + &self, + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. +This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    \ No newline at end of file diff --git a/docs/ext/resolution/type.UnstableResolution.html b/docs/ext/resolution/type.UnstableResolution.html index 41afa4ab2..59b9bb4a7 100644 --- a/docs/ext/resolution/type.UnstableResolution.html +++ b/docs/ext/resolution/type.UnstableResolution.html @@ -1,4 +1,4 @@ -UnstableResolution in ext::resolution - Rust +UnstableResolution in ext::resolution - Rust @@ -23,4 +23,117 @@ }); -

    Type Definition ext::resolution::UnstableResolution

    source ·
    pub type UnstableResolution<CC> = MuResolution<true, CC>;
    \ No newline at end of file +
    pub type UnstableResolution<CC> = MuResolution<true, CC>;

    Aliased Type§

    struct UnstableResolution<CC> {
    +    name: String,
    +    lock: Mutex<()>,
    +    complex: Arc<CC, Global>,
    +    modules: OnceVec<Arc<MuFreeModule<true, <CC as ChainComplex>::Algebra>, Global>>,
    +    zero_module: Arc<MuFreeModule<true, <CC as ChainComplex>::Algebra>, Global>,
    +    chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<true, <CC as ChainComplex>::Module>, Global>>,
    +    differentials: OnceVec<Arc<MuFreeModuleHomomorphism<true, MuFreeModule<true, <CC as ChainComplex>::Algebra>>, Global>>,
    +    kernels: DashMap<Bidegree, Subspace, RandomState>,
    +    save_dir: Option<PathBuf>,
    +    pub should_save: bool,
    +    pub load_quasi_inverse: bool,
    +}

    Fields§

    §name: String§lock: Mutex<()>§complex: Arc<CC, Global>§modules: OnceVec<Arc<MuFreeModule<true, <CC as ChainComplex>::Algebra>, Global>>§zero_module: Arc<MuFreeModule<true, <CC as ChainComplex>::Algebra>, Global>§chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<true, <CC as ChainComplex>::Module>, Global>>§differentials: OnceVec<Arc<MuFreeModuleHomomorphism<true, MuFreeModule<true, <CC as ChainComplex>::Algebra>>, Global>>§kernels: DashMap<Bidegree, Subspace, RandomState>

    For each internal degree, store the kernel of the most recently calculated chain map as +returned by generate_old_kernel_and_compute_new_kernel, to be used if we run +compute_through_degree again.

    +
    §save_dir: Option<PathBuf>§should_save: bool

    Whether we should save newly computed data to the disk. This has no effect if there is no +save file. Defaults to self.save_dir.is_some().

    +
    §load_quasi_inverse: bool

    Whether we should keep the quasi-inverses of the differentials.

    +

    If set to false,

    +
      +
    • If there is no save file, then the quasi-inverse will not be computed.
    • +
    • If there is a save file, then the quasi-inverse will be computed, written to disk, and +dropped from memory. We will not load quasi-inverses from save files.
    • +
    +

    Note that this only applies to quasi-inverses of differentials. The quasi-inverses to the +augmentation map are useful when the target chain complex is not concentrated in one +degree, and they tend to be quite small anyway.

    +

    Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source

    pub fn new(complex: Arc<CC>) -> Self

    source

    pub fn new_with_save( + complex: Arc<CC>, + save_dir: Option<PathBuf> +) -> Result<Self>

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn name(&self) -> &str

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the +specified s degree. It does not perform any computations by itself. It simply lengthens +the OnceVecs modules, chain_maps, etc. to the right length.

    +
    source

    fn get_kernel(&self, b: Bidegree) -> Subspace

    Gets the kernel of the differential starting at $(s, t)$. If this was previously computed, +we simply retrieve the value (and remove it from the cache). Otherwise, we compute the +kernel. This requires the differential to be computed at $(s, t - 1)$, but not $(s, t)$ +itself. Indeed, the new generators added to $(s, t)$ are by construction not in the kernel.

    +
    source

    fn step_resolution(&self, b: Bidegree)

    Call our resolution $X$, and the chain complex to resolve $C$. This is a legitimate +resolution if the map $f: X \to C$ induces an isomorphism on homology. This is the same as +saying the cofiber is exact. The cofiber is given by the complex

    +

    $$ X_s \oplus C_{s+1} \to X_{s-1} \oplus C_s \to X_{s-2} \oplus C_{s-1} \to \cdots $$

    +

    where the differentials are given by

    +

    $$ \begin{pmatrix} d_X & 0 \\ (-1)^s f & d_C \end{pmatrix} $$

    +

    Our method of producing $X_{s, t}$ and the chain maps are as follows. Suppose we have already +built the chain map and differential for $X_{s-1, t}$ and $X_{s, t-1}$. Since $X_s$ is a +free module, the generators in degree $< t$ gives us a bunch of elements in $X_s$ already, +and we know exactly where they get mapped to. Let $T$ be the $\mathbb{F}_p$ vector space +generated by these elements. Then we already have a map

    +

    $$ T \to X_{s-1, t} \oplus C_{s, t}$$

    +

    and we know this hits the kernel of the map

    +

    $$ D = X_{s-1, t} \oplus C_{s, t} \to X_{s-2, t} \oplus C_{s-1, t}. $$

    +

    What we need to do now is to add generators to $X_{s, t}$ to hit the entirity of this +kernel. Note that we don’t have to do this. Some of the elements in the kernel might be +hit by $C_{s+1, t}$ and we don’t have to hit them, but we opt to add generators to hit it +anyway.

    +

    If we do it this way, then we know the composite of the map

    +

    $$ T \to X_{s-1, t} \oplus C_{s, t} \to C_{s, t} $$

    +

    has to be surjective, since the image of $C_{s, t}$ under $D$ is also in the image of $X_{s-1, t}$. +So our first step is to add generators to $X_{s, t}$ such that this composite is +surjective.

    +

    After adding these generators, we need to decide where to send them to. We know their +values in the $C_{s, t}$ component, but we need to use a quasi-inverse to find the element in +$X_{s-1, t}$ that hits the corresponding image of $C_{s, t}$. This tells us the $X_{s-1, +t}$ component.

    +

    Finally, we need to add further generators to $X_{s, t}$ to hit all the elements in the +kernel of

    +

    $$ X_{s-1, t} \to X_{s-2, t} \oplus C_{s-1, t}. $$

    +

    This kernel was recorded by the previous iteration of the method in old_kernel, so this +step is doable as well.

    +

    Note that if we add our new generators conservatively, then the kernel of the maps

    +

    $$ +\begin{aligned} +T &\to X_{s-1, t} \oplus C_{s, t} \\ +X_{s, t} &\to X_{s-1, t} \oplus C_{s, t} +\end{aligned} +$$ +agree.

    +

    In the code, we first row reduce the matrix of the map from $T$. This lets us record +the kernel which is what the function returns at the end. This computation helps us perform +the future steps since we need to know about the cokernel of this map.

    +
    Arguments
    +
      +
    • s - The s degree to calculate
    • +
    • t - The t degree to calculate
    • +
    +

    To run step_resolution(s, t), we must have already had run step_resolution(s, t - 1) +and step_resolution(s - 1, t - 1). It is more efficient if we have in fact run +step_resolution(s - 1, t), so try your best to arrange calls to be run in this order.

    +
    source

    pub fn compute_through_bidegree_with_callback( + &self, + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    +
    source

    pub fn compute_through_stem_with_callback( + &self, + max: Bidegree, + cb: impl FnMut(Bidegree) +)

    Trait Implementations§

    source§

    impl<const U: bool, CC: ChainComplex> AugmentedChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    source§

    impl<const U: bool, CC: ChainComplex> ChainComplex for MuResolution<U, CC>where + CC::Algebra: MuAlgebra<U>,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Module = MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<U, MuFreeModule<U, <MuResolution<U, CC> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +computed at (s, t), and so has the differential at (s, t). In the case of a free module, +the target of the differential, namely the bidegree (s - 1, t), need not be computed, as +long as all the generators hit by the differential have already been computed.
    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn apply_quasi_inverse<T, S>( + &self, + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. +This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    \ No newline at end of file diff --git a/docs/ext/resolution_homomorphism/index.html b/docs/ext/resolution_homomorphism/index.html index 4b4954243..28fa134cb 100644 --- a/docs/ext/resolution_homomorphism/index.html +++ b/docs/ext/resolution_homomorphism/index.html @@ -1,4 +1,4 @@ -ext::resolution_homomorphism - Rust +ext::resolution_homomorphism - Rust @@ -23,7 +23,7 @@ }); -
    Expand description

    This module defines MuResolutionHomomorphism, which is a chain map from a +

    Expand description

    This module defines MuResolutionHomomorphism, which is a chain map from a FreeChainComplex.

    Structs

    Type Definitions

    \ No newline at end of file +maps using the freeness.

    Type Aliases

    \ No newline at end of file diff --git a/docs/ext/resolution_homomorphism/struct.MuResolutionHomomorphism.html b/docs/ext/resolution_homomorphism/struct.MuResolutionHomomorphism.html index 9cb763857..d8fa558a4 100644 --- a/docs/ext/resolution_homomorphism/struct.MuResolutionHomomorphism.html +++ b/docs/ext/resolution_homomorphism/struct.MuResolutionHomomorphism.html @@ -1,4 +1,4 @@ -MuResolutionHomomorphism in ext::resolution_homomorphism - Rust +MuResolutionHomomorphism in ext::resolution_homomorphism - Rust @@ -23,52 +23,52 @@ }); -
    pub struct MuResolutionHomomorphism<const U: bool, CC1, CC2>where
    +
    pub struct MuResolutionHomomorphism<const U: bool, CC1, CC2>where
         CC1: FreeChainComplex<U>,
         CC1::Algebra: MuAlgebra<U>,
         CC2: ChainComplex<Algebra = CC1::Algebra>,{
    -    name: String,
    -    pub source: Arc<CC1>,
    -    pub target: Arc<CC2>,
    -    maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<U, CC2::Module>>>,
    -    pub shift: Bidegree,
    -    save_dir: Option<PathBuf>,
    +    name: String,
    +    pub source: Arc<CC1>,
    +    pub target: Arc<CC2>,
    +    maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<U, CC2::Module>>>,
    +    pub shift: Bidegree,
    +    save_dir: Option<PathBuf>,
     }
    Expand description

    A chain complex homomorphims from a FreeChainComplex. This contains logic to lift chain maps using the freeness.

    -

    Fields§

    §name: String§source: Arc<CC1>§target: Arc<CC2>§maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<U, CC2::Module>>>§shift: Bidegree§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where +

    Fields§

    §name: String§source: Arc<CC1>§target: Arc<CC2>§maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<U, CC2::Module>>>§shift: Bidegree§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where CC1: FreeChainComplex<U>, CC1::Algebra: MuAlgebra<U>, - CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn new( - name: String, - source: Arc<CC1>, - target: Arc<CC2>, - shift: Bidegree -) -> Self

    source

    pub fn name(&self) -> &str

    source

    pub fn algebra(&self) -> Arc<CC1::Algebra>

    source

    pub fn next_homological_degree(&self) -> i32

    source

    fn get_map_ensure_length( + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn new( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree +) -> Self

    source

    pub fn name(&self) -> &str

    source

    pub fn algebra(&self) -> Arc<CC1::Algebra>

    source

    pub fn next_homological_degree(&self) -> i32

    source

    fn get_map_ensure_length( &self, - input_s: u32 -) -> &MuFreeModuleHomomorphism<U, CC2::Module>

    source

    pub fn get_map( + input_s: u32 +) -> &MuFreeModuleHomomorphism<U, CC2::Module>

    source

    pub fn get_map( &self, - input_s: u32 -) -> Arc<MuFreeModuleHomomorphism<U, CC2::Module>>

    Returns the chain map on the sth source module.

    -
    source

    pub fn save_dir(&self) -> Option<&Path>

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + input_s: u32 +) -> Arc<MuFreeModuleHomomorphism<U, CC2::Module>>

    Returns the chain map on the sth source module.

    +
    source

    pub fn save_dir(&self) -> Option<&Path>

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where CC1: FreeChainComplex<U>, CC1::Algebra: MuAlgebra<U>, - CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn extend(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn extend(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees (max_s, max_t).

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of decomposables (e.g. it is trivial). More precisely, we assume MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    -
    source

    pub fn extend_through_stem(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees +

    source

    pub fn extend_through_stem(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees (max_n, max_s).

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of decomposables (e.g. it is trivial). More precisely, we assume MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    -
    source

    pub fn extend_all(&self)

    Extend the resolution homomorphism as far as possible, as constrained by how much the +

    source

    pub fn extend_all(&self)

    Extend the resolution homomorphism as far as possible, as constrained by how much the source and target have been resolved.

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of decomposables (e.g. it is trivial). More precisely, we assume MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    -
    source

    pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<'_, AUX>)

    Extends the resolution homomorphism up to a given range. This range is first specified by +

    source

    pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<'_, AUX>)

    Extends the resolution homomorphism up to a given range. This range is first specified by the maximum s, then the maximum t for each s. This should rarely be used directly; instead one should use MuResolutionHomomorphism::extend, MuResolutionHomomorphism::extend_through_stem and ResolutionHomomorphism::extend_all @@ -78,69 +78,69 @@

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of decomposables (e.g. it is trivial). More precisely, we assume MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    -
    source

    pub fn extend_step_raw( +

    source

    pub fn extend_step_raw( &self, - input: Bidegree, - extra_images: Option<Vec<FpVector>> -) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting + input: Bidegree, + extra_images: Option<Vec<FpVector>> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting homomorphism f is a chain map such that if g is the kth generator in the source such that d(g) = 0, then f(g) is the kth row of extra_images.

    The user should call this function explicitly to manually define the chain map where the chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend the rest by exactness.

    -
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where +

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where CC1: FreeChainComplex<U>, CC1::Algebra: MuAlgebra<U>, - CC2: AugmentedChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn from_class( - name: String, - source: Arc<CC1>, - target: Arc<CC2>, - shift: Bidegree, - class: &[u32] -) -> Self

    source

    pub fn extend_step( + CC2: AugmentedChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn from_class( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree, + class: &[u32] +) -> Self

    source

    pub fn extend_step( &self, - input: Bidegree, - extra_images: Option<&Matrix> -) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting + input: Bidegree, + extra_images: Option<&Matrix> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting homomorphism f is a chain map such that if g is the kth generator in the source such that d(g) = 0, then the image of f(g) in the augmentation of the target is the kth row of extra_images.

    The user should call this function explicitly to manually define the chain map where the chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend the rest by exactness.

    -
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where +

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where CC1: AugmentedChainComplex + FreeChainComplex<U>, CC1::Algebra: MuAlgebra<U>, CC2: AugmentedChainComplex<Algebra = CC1::Algebra>, CC1::TargetComplex: BoundedChainComplex, - CC2::TargetComplex: BoundedChainComplex,

    source

    pub fn from_module_homomorphism( - name: String, - source: Arc<CC1>, - target: Arc<CC2>, + CC2::TargetComplex: BoundedChainComplex,

    source

    pub fn from_module_homomorphism( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, f: &impl ModuleHomomorphism<Source = <<CC1 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module, Target = <<CC2 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module> ) -> Self

    Construct a chain map that lifts a given module homomorphism.

    -
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where +

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where CC1: FreeChainComplex<U>, CC1::Algebra: MuAlgebra<U>, - CC2: FreeChainComplex<U, Algebra = CC1::Algebra>,

    source

    pub fn act(&self, result: SliceMut<'_>, coef: u32, gen: BidegreeGenerator)

    Given a chain map $f: C \to C’$ between free chain complexes, apply + CC2: FreeChainComplex<U, Algebra = CC1::Algebra>,

    source

    pub fn act(&self, result: SliceMut<'_>, coef: u32, gen: BidegreeGenerator)

    Given a chain map $f: C \to C’$ between free chain complexes, apply $$ \Hom(f, k): \Hom(C’, k) \to \Hom(C, k) $$ to the specified generator of $\Hom(C’, k)$.

    -

    Auto Trait Implementations§

    §

    impl<const U: bool, CC1, CC2> RefUnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where - CC1: RefUnwindSafe, - CC2: RefUnwindSafe, - <CC1 as ChainComplex>::Algebra: RefUnwindSafe, - <CC2 as ChainComplex>::Module: RefUnwindSafe,

    §

    impl<const U: bool, CC1, CC2> Send for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> Sync for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> Unpin for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> UnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where - CC1: RefUnwindSafe, - CC2: RefUnwindSafe, - <CC1 as ChainComplex>::Algebra: RefUnwindSafe, - <CC2 as ChainComplex>::Module: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    §

    impl<const U: bool, CC1, CC2> RefUnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where + CC1: RefUnwindSafe, + CC2: RefUnwindSafe, + <CC1 as ChainComplex>::Algebra: RefUnwindSafe, + <CC2 as ChainComplex>::Module: RefUnwindSafe,

    §

    impl<const U: bool, CC1, CC2> Send for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> Sync for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> Unpin for MuResolutionHomomorphism<U, CC1, CC2>

    §

    impl<const U: bool, CC1, CC2> UnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where + CC1: RefUnwindSafe, + CC2: RefUnwindSafe, + <CC1 as ChainComplex>::Algebra: RefUnwindSafe, + <CC2 as ChainComplex>::Module: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/resolution_homomorphism/type.ResolutionHomomorphism.html b/docs/ext/resolution_homomorphism/type.ResolutionHomomorphism.html index b63fb854a..efeabdf7f 100644 --- a/docs/ext/resolution_homomorphism/type.ResolutionHomomorphism.html +++ b/docs/ext/resolution_homomorphism/type.ResolutionHomomorphism.html @@ -1,4 +1,4 @@ -ResolutionHomomorphism in ext::resolution_homomorphism - Rust +ResolutionHomomorphism in ext::resolution_homomorphism - Rust @@ -23,4 +23,101 @@ }); -
    pub type ResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<false, CC1, CC2>;
    \ No newline at end of file +
    pub type ResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<false, CC1, CC2>;

    Aliased Type§

    struct ResolutionHomomorphism<CC1, CC2> {
    +    name: String,
    +    pub source: Arc<CC1, Global>,
    +    pub target: Arc<CC2, Global>,
    +    maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<false, <CC2 as ChainComplex>::Module>, Global>>,
    +    pub shift: Bidegree,
    +    save_dir: Option<PathBuf>,
    +}

    Fields§

    §name: String§source: Arc<CC1, Global>§target: Arc<CC2, Global>§maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<false, <CC2 as ChainComplex>::Module>, Global>>§shift: Bidegree§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn new( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree +) -> Self

    source

    pub fn name(&self) -> &str

    source

    pub fn algebra(&self) -> Arc<CC1::Algebra>

    source

    pub fn next_homological_degree(&self) -> i32

    source

    fn get_map_ensure_length( + &self, + input_s: u32 +) -> &MuFreeModuleHomomorphism<U, CC2::Module>

    source

    pub fn get_map( + &self, + input_s: u32 +) -> Arc<MuFreeModuleHomomorphism<U, CC2::Module>>

    Returns the chain map on the sth source module.

    +
    source

    pub fn save_dir(&self) -> Option<&Path>

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn extend(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees +(max_s, max_t).

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_through_stem(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees +(max_n, max_s).

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_all(&self)

    Extend the resolution homomorphism as far as possible, as constrained by how much the +source and target have been resolved.

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<'_, AUX>)

    Extends the resolution homomorphism up to a given range. This range is first specified by +the maximum s, then the maximum t for each s. This should rarely be used directly; +instead one should use MuResolutionHomomorphism::extend, +MuResolutionHomomorphism::extend_through_stem and ResolutionHomomorphism::extend_all +as appropriate.

    +

    Note that unlike the more specific versions of this function, the bounds max_s and +max_t are exclusive.

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_step_raw( + &self, + input: Bidegree, + extra_images: Option<Vec<FpVector>> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting +homomorphism f is a chain map such that if g is the kth generator in the source such +that d(g) = 0, then f(g) is the kth row of extra_images.

    +

    The user should call this function explicitly to manually define the chain map where the +chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend +the rest by exactness.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: AugmentedChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn from_class( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree, + class: &[u32] +) -> Self

    source

    pub fn extend_step( + &self, + input: Bidegree, + extra_images: Option<&Matrix> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting +homomorphism f is a chain map such that if g is the kth generator in the source such +that d(g) = 0, then the image of f(g) in the augmentation of the target is the kth +row of extra_images.

    +

    The user should call this function explicitly to manually define the chain map where the +chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend +the rest by exactness.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: AugmentedChainComplex + FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: AugmentedChainComplex<Algebra = CC1::Algebra>, + CC1::TargetComplex: BoundedChainComplex, + CC2::TargetComplex: BoundedChainComplex,

    source

    pub fn from_module_homomorphism( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + f: &impl ModuleHomomorphism<Source = <<CC1 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module, Target = <<CC2 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module> +) -> Self

    Construct a chain map that lifts a given module homomorphism.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: FreeChainComplex<U, Algebra = CC1::Algebra>,

    source

    pub fn act(&self, result: SliceMut<'_>, coef: u32, gen: BidegreeGenerator)

    Given a chain map $f: C \to C’$ between free chain complexes, apply +$$ \Hom(f, k): \Hom(C’, k) \to \Hom(C, k) $$ +to the specified generator of $\Hom(C’, k)$.

    +
    \ No newline at end of file diff --git a/docs/ext/resolution_homomorphism/type.UnstableResolutionHomomorphism.html b/docs/ext/resolution_homomorphism/type.UnstableResolutionHomomorphism.html index 7563439c7..35096de2a 100644 --- a/docs/ext/resolution_homomorphism/type.UnstableResolutionHomomorphism.html +++ b/docs/ext/resolution_homomorphism/type.UnstableResolutionHomomorphism.html @@ -1,4 +1,4 @@ -UnstableResolutionHomomorphism in ext::resolution_homomorphism - Rust +UnstableResolutionHomomorphism in ext::resolution_homomorphism - Rust @@ -23,4 +23,101 @@ }); -
    pub type UnstableResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<true, CC1, CC2>;
    \ No newline at end of file +
    pub type UnstableResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<true, CC1, CC2>;

    Aliased Type§

    struct UnstableResolutionHomomorphism<CC1, CC2> {
    +    name: String,
    +    pub source: Arc<CC1, Global>,
    +    pub target: Arc<CC2, Global>,
    +    maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<true, <CC2 as ChainComplex>::Module>, Global>>,
    +    pub shift: Bidegree,
    +    save_dir: Option<PathBuf>,
    +}

    Fields§

    §name: String§source: Arc<CC1, Global>§target: Arc<CC2, Global>§maps: OnceBiVec<Arc<MuFreeModuleHomomorphism<true, <CC2 as ChainComplex>::Module>, Global>>§shift: Bidegree§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn new( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree +) -> Self

    source

    pub fn name(&self) -> &str

    source

    pub fn algebra(&self) -> Arc<CC1::Algebra>

    source

    pub fn next_homological_degree(&self) -> i32

    source

    fn get_map_ensure_length( + &self, + input_s: u32 +) -> &MuFreeModuleHomomorphism<U, CC2::Module>

    source

    pub fn get_map( + &self, + input_s: u32 +) -> Arc<MuFreeModuleHomomorphism<U, CC2::Module>>

    Returns the chain map on the sth source module.

    +
    source

    pub fn save_dir(&self) -> Option<&Path>

    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: ChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn extend(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees +(max_s, max_t).

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_through_stem(&self, max: Bidegree)

    Extend the resolution homomorphism such that it is defined on degrees +(max_n, max_s).

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_all(&self)

    Extend the resolution homomorphism as far as possible, as constrained by how much the +source and target have been resolved.

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<'_, AUX>)

    Extends the resolution homomorphism up to a given range. This range is first specified by +the maximum s, then the maximum t for each s. This should rarely be used directly; +instead one should use MuResolutionHomomorphism::extend, +MuResolutionHomomorphism::extend_through_stem and ResolutionHomomorphism::extend_all +as appropriate.

    +

    Note that unlike the more specific versions of this function, the bounds max_s and +max_t are exclusive.

    +

    This assumes in yet-uncomputed bidegrees, the homology of the source consists only of +decomposables (e.g. it is trivial). More precisely, we assume +MuResolutionHomomorphism::extend_step_raw can be called with extra_images = None.

    +
    source

    pub fn extend_step_raw( + &self, + input: Bidegree, + extra_images: Option<Vec<FpVector>> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting +homomorphism f is a chain map such that if g is the kth generator in the source such +that d(g) = 0, then f(g) is the kth row of extra_images.

    +

    The user should call this function explicitly to manually define the chain map where the +chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend +the rest by exactness.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: AugmentedChainComplex<Algebra = CC1::Algebra>,

    source

    pub fn from_class( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + shift: Bidegree, + class: &[u32] +) -> Self

    source

    pub fn extend_step( + &self, + input: Bidegree, + extra_images: Option<&Matrix> +) -> Range<i32>

    Extend the MuResolutionHomomorphism to be defined on (input_s, input_t). The resulting +homomorphism f is a chain map such that if g is the kth generator in the source such +that d(g) = 0, then the image of f(g) in the augmentation of the target is the kth +row of extra_images.

    +

    The user should call this function explicitly to manually define the chain map where the +chain complex is not exact, and then call MuResolutionHomomorphism::extend_all to extend +the rest by exactness.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: AugmentedChainComplex + FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: AugmentedChainComplex<Algebra = CC1::Algebra>, + CC1::TargetComplex: BoundedChainComplex, + CC2::TargetComplex: BoundedChainComplex,

    source

    pub fn from_module_homomorphism( + name: String, + source: Arc<CC1>, + target: Arc<CC2>, + f: &impl ModuleHomomorphism<Source = <<CC1 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module, Target = <<CC2 as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module> +) -> Self

    Construct a chain map that lifts a given module homomorphism.

    +
    source§

    impl<const U: bool, CC1, CC2> MuResolutionHomomorphism<U, CC1, CC2>where + CC1: FreeChainComplex<U>, + CC1::Algebra: MuAlgebra<U>, + CC2: FreeChainComplex<U, Algebra = CC1::Algebra>,

    source

    pub fn act(&self, result: SliceMut<'_>, coef: u32, gen: BidegreeGenerator)

    Given a chain map $f: C \to C’$ between free chain complexes, apply +$$ \Hom(f, k): \Hom(C’, k) \to \Hom(C, k) $$ +to the specified generator of $\Hom(C’, k)$.

    +
    \ No newline at end of file diff --git a/docs/ext/save/enum.SaveKind.html b/docs/ext/save/enum.SaveKind.html index cf560f83b..0c5c3555a 100644 --- a/docs/ext/save/enum.SaveKind.html +++ b/docs/ext/save/enum.SaveKind.html @@ -1,4 +1,4 @@ -SaveKind in ext::save - Rust +SaveKind in ext::save - Rust @@ -23,7 +23,7 @@ }); -

    Implementations§

    source§

    impl SaveKind

    source

    pub fn magic(self) -> u32

    source

    pub fn name(self) -> &'static str

    source

    pub fn resolution_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn nassau_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn secondary_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn create_dir(self, p: &Path) -> Result<()>

    Trait Implementations§

    source§

    impl Clone for SaveKind

    source§

    fn clone(&self) -> SaveKind

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SaveKind

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<SaveKind> for SaveKind

    source§

    fn eq(&self, other: &SaveKind) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Copy for SaveKind

    source§

    impl Eq for SaveKind

    source§

    impl StructuralEq for SaveKind

    source§

    impl StructuralPartialEq for SaveKind

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Implementations§

    source§

    impl SaveKind

    source

    pub fn magic(self) -> u32

    source

    pub fn name(self) -> &'static str

    source

    pub fn resolution_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn nassau_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn secondary_data() -> impl Iterator<Item = SaveKind>

    source

    pub fn create_dir(self, p: &Path) -> Result<()>

    Trait Implementations§

    source§

    impl Clone for SaveKind

    source§

    fn clone(&self) -> SaveKind

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SaveKind

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<SaveKind> for SaveKind

    source§

    fn eq(&self, other: &SaveKind) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Copy for SaveKind

    source§

    impl Eq for SaveKind

    source§

    impl StructuralEq for SaveKind

    source§

    impl StructuralPartialEq for SaveKind

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/save/fn.open_file.html b/docs/ext/save/fn.open_file.html index e83c8086e..70a20c50e 100644 --- a/docs/ext/save/fn.open_file.html +++ b/docs/ext/save/fn.open_file.html @@ -1,4 +1,4 @@ -open_file in ext::save - Rust +open_file in ext::save - Rust @@ -23,6 +23,6 @@ }); -

    Function ext::save::open_file

    source ·
    fn open_file(path: PathBuf) -> Option<Box<dyn Read>>
    Expand description

    Open the file pointed to by path as a Box<dyn Read>. If the file does not exist, look for +

    Function ext::save::open_file

    source ·
    fn open_file(path: PathBuf) -> Option<Box<dyn Read>>
    Expand description

    Open the file pointed to by path as a Box<dyn Read>. If the file does not exist, look for compressed versions.

    \ No newline at end of file diff --git a/docs/ext/save/fn.open_files.html b/docs/ext/save/fn.open_files.html index 92dd8b1a0..e3db63998 100644 --- a/docs/ext/save/fn.open_files.html +++ b/docs/ext/save/fn.open_files.html @@ -1,4 +1,4 @@ -open_files in ext::save - Rust +open_files in ext::save - Rust @@ -23,7 +23,7 @@ }); -

    Function ext::save::open_files

    source ·
    fn open_files() -> &'static Mutex<HashSet<PathBuf>>
    Expand description

    A DashSet> of files that are currently opened and being written to. When calling this +

    Function ext::save::open_files

    source ·
    fn open_files() -> &'static Mutex<HashSet<PathBuf>>
    Expand description

    A DashSet> of files that are currently opened and being written to. When calling this function for the first time, we set the ctrlc handler to delete currently opened files, then exit.

    \ No newline at end of file diff --git a/docs/ext/save/index.html b/docs/ext/save/index.html index 90858e658..47fcecb9d 100644 --- a/docs/ext/save/index.html +++ b/docs/ext/save/index.html @@ -1,4 +1,4 @@ -ext::save - Rust +ext::save - Rust @@ -23,7 +23,7 @@ }); -

    Module ext::save

    source ·

    Structs

    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    §

    impl<R> ReadBytesExt for Rwhere + R: Read + ?Sized,

    §

    fn read_u8(&mut self) -> Result<u8, Error>

    Reads an unsigned 8 bit integer from the underlying reader. Read more
    §

    fn read_i8(&mut self) -> Result<i8, Error>

    Reads a signed 8 bit integer from the underlying reader. Read more
    §

    fn read_u16<T>(&mut self) -> Result<u16, Error>where + T: ByteOrder,

    Reads an unsigned 16 bit integer from the underlying reader. Read more
    §

    fn read_i16<T>(&mut self) -> Result<i16, Error>where + T: ByteOrder,

    Reads a signed 16 bit integer from the underlying reader. Read more
    §

    fn read_u24<T>(&mut self) -> Result<u32, Error>where + T: ByteOrder,

    Reads an unsigned 24 bit integer from the underlying reader. Read more
    §

    fn read_i24<T>(&mut self) -> Result<i32, Error>where + T: ByteOrder,

    Reads a signed 24 bit integer from the underlying reader. Read more
    §

    fn read_u32<T>(&mut self) -> Result<u32, Error>where + T: ByteOrder,

    Reads an unsigned 32 bit integer from the underlying reader. Read more
    §

    fn read_i32<T>(&mut self) -> Result<i32, Error>where + T: ByteOrder,

    Reads a signed 32 bit integer from the underlying reader. Read more
    §

    fn read_u48<T>(&mut self) -> Result<u64, Error>where + T: ByteOrder,

    Reads an unsigned 48 bit integer from the underlying reader. Read more
    §

    fn read_i48<T>(&mut self) -> Result<i64, Error>where + T: ByteOrder,

    Reads a signed 48 bit integer from the underlying reader. Read more
    §

    fn read_u64<T>(&mut self) -> Result<u64, Error>where + T: ByteOrder,

    Reads an unsigned 64 bit integer from the underlying reader. Read more
    §

    fn read_i64<T>(&mut self) -> Result<i64, Error>where + T: ByteOrder,

    Reads a signed 64 bit integer from the underlying reader. Read more
    §

    fn read_u128<T>(&mut self) -> Result<u128, Error>where + T: ByteOrder,

    Reads an unsigned 128 bit integer from the underlying reader. Read more
    §

    fn read_i128<T>(&mut self) -> Result<i128, Error>where + T: ByteOrder,

    Reads a signed 128 bit integer from the underlying reader. Read more
    §

    fn read_uint<T>(&mut self, nbytes: usize) -> Result<u64, Error>where + T: ByteOrder,

    Reads an unsigned n-bytes integer from the underlying reader. Read more
    §

    fn read_int<T>(&mut self, nbytes: usize) -> Result<i64, Error>where + T: ByteOrder,

    Reads a signed n-bytes integer from the underlying reader. Read more
    §

    fn read_uint128<T>(&mut self, nbytes: usize) -> Result<u128, Error>where + T: ByteOrder,

    Reads an unsigned n-bytes integer from the underlying reader.
    §

    fn read_int128<T>(&mut self, nbytes: usize) -> Result<i128, Error>where + T: ByteOrder,

    Reads a signed n-bytes integer from the underlying reader.
    §

    fn read_f32<T>(&mut self) -> Result<f32, Error>where T: ByteOrder,

    Reads a IEEE754 single-precision (4 bytes) floating point number from -the underlying reader. Read more
    §

    fn read_f64<T>(&mut self) -> Result<f64, Error>where +the underlying reader. Read more

    §

    fn read_f64<T>(&mut self) -> Result<f64, Error>where T: ByteOrder,

    Reads a IEEE754 double-precision (8 bytes) floating point number from -the underlying reader. Read more
    §

    fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error>where +the underlying reader. Read more

    §

    fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of unsigned 16 bit integers from the underlying -reader. Read more
    §

    fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error>where +reader. Read more

    §

    fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of unsigned 32 bit integers from the underlying -reader. Read more
    §

    fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error>where +reader. Read more

    §

    fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of unsigned 64 bit integers from the underlying -reader. Read more
    §

    fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error>where +reader. Read more

    §

    fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of unsigned 128 bit integers from the underlying -reader. Read more
    §

    fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>

    Reads a sequence of signed 8 bit integers from the underlying reader. Read more
    §

    fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error>where +reader. Read more

    §

    fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>

    Reads a sequence of signed 8 bit integers from the underlying reader. Read more
    §

    fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of signed 16 bit integers from the underlying -reader. Read more
    §

    fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error>where +reader. Read more

    §

    fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of signed 32 bit integers from the underlying -reader. Read more
    §

    fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error>where +reader. Read more

    §

    fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of signed 64 bit integers from the underlying -reader. Read more
    §

    fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error>where +reader. Read more

    §

    fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of signed 128 bit integers from the underlying -reader. Read more
    §

    fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where +reader. Read more

    §

    fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of IEEE754 single-precision (4 bytes) floating -point numbers from the underlying reader. Read more
    §

    fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where - T: ByteOrder,

    👎Deprecated since 1.2.0: please use read_f32_into instead
    DEPRECATED. Read more
    §

    fn read_f64_into<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>where +point numbers from the underlying reader. Read more

    §

    fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error>where + T: ByteOrder,

    👎Deprecated since 1.2.0: please use read_f32_into instead
    DEPRECATED. Read more
    §

    fn read_f64_into<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>where T: ByteOrder,

    Reads a sequence of IEEE754 double-precision (8 bytes) floating -point numbers from the underlying reader. Read more
    §

    fn read_f64_into_unchecked<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>where - T: ByteOrder,

    👎Deprecated since 1.2.0: please use read_f64_into instead
    DEPRECATED. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +point numbers from the underlying reader. Read more
    §

    fn read_f64_into_unchecked<T>(&mut self, dst: &mut [f64]) -> Result<(), Error>where + T: ByteOrder,

    👎Deprecated since 1.2.0: please use read_f64_into instead
    DEPRECATED. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/save/struct.ChecksumWriter.html b/docs/ext/save/struct.ChecksumWriter.html index 6540f69e6..9a7a402f2 100644 --- a/docs/ext/save/struct.ChecksumWriter.html +++ b/docs/ext/save/struct.ChecksumWriter.html @@ -1,4 +1,4 @@ -ChecksumWriter in ext::save - Rust +ChecksumWriter in ext::save - Rust @@ -23,51 +23,51 @@ }); -

    Struct ext::save::ChecksumWriter

    source ·
    pub struct ChecksumWriter<T: Write> {
    +

    Struct ext::save::ChecksumWriter

    source ·
    pub struct ChecksumWriter<T: Write> {
         writer: T,
    -    path: PathBuf,
    +    path: PathBuf,
         adler: Adler32,
     }
    Expand description

    In addition to checking the checksum, we also keep track of which files are open, and we delete the open files if the program is terminated halfway.

    -

    Fields§

    §writer: T§path: PathBuf§adler: Adler32

    Implementations§

    source§

    impl<T: Write> ChecksumWriter<T>

    source

    pub fn new(path: PathBuf, writer: T) -> Self

    Trait Implementations§

    source§

    impl<T: Write> Drop for ChecksumWriter<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<T: Write> Write for ChecksumWriter<T>

    We only implement the functions required and the ones we actually use.

    -
    source§

    fn write(&mut self, buf: &[u8]) -> Result<usize>

    Write a buffer into this writer, returning how many bytes were written. Read more
    source§

    fn flush(&mut self) -> Result<()>

    Flush this output stream, ensuring that all intermediately buffered -contents reach their destination. Read more
    source§

    fn write_all(&mut self, buf: &[u8]) -> Result<()>

    Attempts to write an entire buffer into this writer. Read more
    1.36.0 · source§

    fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

    Like write, except that it writes from a slice of buffers. Read more
    source§

    fn is_write_vectored(&self) -> bool

    🔬This is a nightly-only experimental API. (can_vector)
    Determines if this Writer has an efficient write_vectored -implementation. Read more
    source§

    fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

    🔬This is a nightly-only experimental API. (write_all_vectored)
    Attempts to write multiple buffers into this writer. Read more
    1.0.0 · source§

    fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

    Writes a formatted string into this writer, returning any error -encountered. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Creates a “by reference” adapter for this instance of Write. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for ChecksumWriter<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for ChecksumWriter<T>where - T: Send,

    §

    impl<T> Sync for ChecksumWriter<T>where - T: Sync,

    §

    impl<T> Unpin for ChecksumWriter<T>where - T: Unpin,

    §

    impl<T> UnwindSafe for ChecksumWriter<T>where - T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Fields§

    §writer: T§path: PathBuf§adler: Adler32

    Implementations§

    source§

    impl<T: Write> ChecksumWriter<T>

    source

    pub fn new(path: PathBuf, writer: T) -> Self

    Trait Implementations§

    source§

    impl<T: Write> Drop for ChecksumWriter<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<T: Write> Write for ChecksumWriter<T>

    We only implement the functions required and the ones we actually use.

    +
    source§

    fn write(&mut self, buf: &[u8]) -> Result<usize>

    Write a buffer into this writer, returning how many bytes were written. Read more
    source§

    fn flush(&mut self) -> Result<()>

    Flush this output stream, ensuring that all intermediately buffered +contents reach their destination. Read more
    source§

    fn write_all(&mut self, buf: &[u8]) -> Result<()>

    Attempts to write an entire buffer into this writer. Read more
    1.36.0 · source§

    fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

    Like write, except that it writes from a slice of buffers. Read more
    source§

    fn is_write_vectored(&self) -> bool

    🔬This is a nightly-only experimental API. (can_vector)
    Determines if this Writer has an efficient write_vectored +implementation. Read more
    source§

    fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

    🔬This is a nightly-only experimental API. (write_all_vectored)
    Attempts to write multiple buffers into this writer. Read more
    1.0.0 · source§

    fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>

    Writes a formatted string into this writer, returning any error +encountered. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Creates a “by reference” adapter for this instance of Write. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for ChecksumWriter<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for ChecksumWriter<T>where + T: Send,

    §

    impl<T> Sync for ChecksumWriter<T>where + T: Sync,

    §

    impl<T> Unpin for ChecksumWriter<T>where + T: Unpin,

    §

    impl<T> UnwindSafe for ChecksumWriter<T>where + T: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    §

    impl<W> WriteBytesExt for Wwhere - W: Write + ?Sized,

    §

    fn write_u8(&mut self, n: u8) -> Result<(), Error>

    Writes an unsigned 8 bit integer to the underlying writer. Read more
    §

    fn write_i8(&mut self, n: i8) -> Result<(), Error>

    Writes a signed 8 bit integer to the underlying writer. Read more
    §

    fn write_u16<T>(&mut self, n: u16) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 16 bit integer to the underlying writer. Read more
    §

    fn write_i16<T>(&mut self, n: i16) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 16 bit integer to the underlying writer. Read more
    §

    fn write_u24<T>(&mut self, n: u32) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 24 bit integer to the underlying writer. Read more
    §

    fn write_i24<T>(&mut self, n: i32) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 24 bit integer to the underlying writer. Read more
    §

    fn write_u32<T>(&mut self, n: u32) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 32 bit integer to the underlying writer. Read more
    §

    fn write_i32<T>(&mut self, n: i32) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 32 bit integer to the underlying writer. Read more
    §

    fn write_u48<T>(&mut self, n: u64) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 48 bit integer to the underlying writer. Read more
    §

    fn write_i48<T>(&mut self, n: i64) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 48 bit integer to the underlying writer. Read more
    §

    fn write_u64<T>(&mut self, n: u64) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 64 bit integer to the underlying writer. Read more
    §

    fn write_i64<T>(&mut self, n: i64) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 64 bit integer to the underlying writer. Read more
    §

    fn write_u128<T>(&mut self, n: u128) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned 128 bit integer to the underlying writer.
    §

    fn write_i128<T>(&mut self, n: i128) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed 128 bit integer to the underlying writer.
    §

    fn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned n-bytes integer to the underlying writer. Read more
    §

    fn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed n-bytes integer to the underlying writer. Read more
    §

    fn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error>where - T: ByteOrder,

    Writes an unsigned n-bytes integer to the underlying writer. Read more
    §

    fn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error>where - T: ByteOrder,

    Writes a signed n-bytes integer to the underlying writer. Read more
    §

    fn write_f32<T>(&mut self, n: f32) -> Result<(), Error>where +From<T> for U chooses to do.

    +

    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    §

    impl<W> WriteBytesExt for Wwhere + W: Write + ?Sized,

    §

    fn write_u8(&mut self, n: u8) -> Result<(), Error>

    Writes an unsigned 8 bit integer to the underlying writer. Read more
    §

    fn write_i8(&mut self, n: i8) -> Result<(), Error>

    Writes a signed 8 bit integer to the underlying writer. Read more
    §

    fn write_u16<T>(&mut self, n: u16) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 16 bit integer to the underlying writer. Read more
    §

    fn write_i16<T>(&mut self, n: i16) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 16 bit integer to the underlying writer. Read more
    §

    fn write_u24<T>(&mut self, n: u32) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 24 bit integer to the underlying writer. Read more
    §

    fn write_i24<T>(&mut self, n: i32) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 24 bit integer to the underlying writer. Read more
    §

    fn write_u32<T>(&mut self, n: u32) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 32 bit integer to the underlying writer. Read more
    §

    fn write_i32<T>(&mut self, n: i32) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 32 bit integer to the underlying writer. Read more
    §

    fn write_u48<T>(&mut self, n: u64) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 48 bit integer to the underlying writer. Read more
    §

    fn write_i48<T>(&mut self, n: i64) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 48 bit integer to the underlying writer. Read more
    §

    fn write_u64<T>(&mut self, n: u64) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 64 bit integer to the underlying writer. Read more
    §

    fn write_i64<T>(&mut self, n: i64) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 64 bit integer to the underlying writer. Read more
    §

    fn write_u128<T>(&mut self, n: u128) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned 128 bit integer to the underlying writer.
    §

    fn write_i128<T>(&mut self, n: i128) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed 128 bit integer to the underlying writer.
    §

    fn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned n-bytes integer to the underlying writer. Read more
    §

    fn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed n-bytes integer to the underlying writer. Read more
    §

    fn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error>where + T: ByteOrder,

    Writes an unsigned n-bytes integer to the underlying writer. Read more
    §

    fn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error>where + T: ByteOrder,

    Writes a signed n-bytes integer to the underlying writer. Read more
    §

    fn write_f32<T>(&mut self, n: f32) -> Result<(), Error>where T: ByteOrder,

    Writes a IEEE754 single-precision (4 bytes) floating point number to -the underlying writer. Read more
    §

    fn write_f64<T>(&mut self, n: f64) -> Result<(), Error>where +the underlying writer. Read more

    §

    fn write_f64<T>(&mut self, n: f64) -> Result<(), Error>where T: ByteOrder,

    Writes a IEEE754 double-precision (8 bytes) floating point number to the underlying writer. Read more
    \ No newline at end of file diff --git a/docs/ext/save/struct.SaveFile.html b/docs/ext/save/struct.SaveFile.html index 5288aaad5..af8ca60cc 100644 --- a/docs/ext/save/struct.SaveFile.html +++ b/docs/ext/save/struct.SaveFile.html @@ -1,4 +1,4 @@ -SaveFile in ext::save - Rust +SaveFile in ext::save - Rust @@ -23,26 +23,26 @@ }); -

    Struct ext::save::SaveFile

    source ·
    pub struct SaveFile<A: Algebra> {
    +

    Struct ext::save::SaveFile

    source ·
    pub struct SaveFile<A: Algebra> {
         pub kind: SaveKind,
    -    pub algebra: Arc<A>,
    -    pub b: Bidegree,
    -    pub idx: Option<usize>,
    -}

    Fields§

    §kind: SaveKind§algebra: Arc<A>§b: Bidegree§idx: Option<usize>

    Implementations§

    source§

    impl<A: Algebra> SaveFile<A>

    source

    fn write_header(&self, buffer: &mut impl Write) -> Result<()>

    source

    fn validate_header(&self, buffer: &mut impl Read) -> Result<()>

    source

    fn get_save_path(&self, dir: PathBuf) -> PathBuf

    This panics if there is no save dir

    -
    source

    pub fn open_file(&self, dir: PathBuf) -> Option<Box<dyn Read>>

    source

    pub fn exists(&self, dir: PathBuf) -> bool

    source

    pub fn delete_file(&self, dir: PathBuf) -> Result<()>

    source

    pub fn create_file(&self, dir: PathBuf, overwrite: bool) -> impl Write

    Arguments
    + pub algebra: Arc<A>, + pub b: Bidegree, + pub idx: Option<usize>, +}

    Fields§

    §kind: SaveKind§algebra: Arc<A>§b: Bidegree§idx: Option<usize>

    Implementations§

    source§

    impl<A: Algebra> SaveFile<A>

    source

    fn write_header(&self, buffer: &mut impl Write) -> Result<()>

    source

    fn validate_header(&self, buffer: &mut impl Read) -> Result<()>

    source

    fn get_save_path(&self, dir: PathBuf) -> PathBuf

    This panics if there is no save dir

    +
    source

    pub fn open_file(&self, dir: PathBuf) -> Option<Box<dyn Read>>

    source

    pub fn exists(&self, dir: PathBuf) -> bool

    source

    pub fn delete_file(&self, dir: PathBuf) -> Result<()>

    source

    pub fn create_file(&self, dir: PathBuf, overwrite: bool) -> impl Write

    Arguments
    • overwrite: Whether to overwrite a file if it already exists.
    -

    Auto Trait Implementations§

    §

    impl<A> RefUnwindSafe for SaveFile<A>where - A: RefUnwindSafe,

    §

    impl<A> Send for SaveFile<A>

    §

    impl<A> Sync for SaveFile<A>

    §

    impl<A> Unpin for SaveFile<A>

    §

    impl<A> UnwindSafe for SaveFile<A>where - A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    §

    impl<A> RefUnwindSafe for SaveFile<A>where + A: RefUnwindSafe,

    §

    impl<A> Send for SaveFile<A>

    §

    impl<A> Sync for SaveFile<A>

    §

    impl<A> Unpin for SaveFile<A>

    §

    impl<A> UnwindSafe for SaveFile<A>where + A: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/secondary/index.html b/docs/ext/secondary/index.html index 0ca90849b..eff009aa2 100644 --- a/docs/ext/secondary/index.html +++ b/docs/ext/secondary/index.html @@ -1,4 +1,4 @@ -ext::secondary - Rust +ext::secondary - Rust @@ -23,7 +23,7 @@ }); -

    Module ext::secondary

    source ·

    Structs

    Statics

    Traits

    Type Aliases

    \ No newline at end of file diff --git a/docs/ext/secondary/static.TAU_BIDEGREE.html b/docs/ext/secondary/static.TAU_BIDEGREE.html index 7419fa781..c2f85baa2 100644 --- a/docs/ext/secondary/static.TAU_BIDEGREE.html +++ b/docs/ext/secondary/static.TAU_BIDEGREE.html @@ -1,4 +1,4 @@ -TAU_BIDEGREE in ext::secondary - Rust +TAU_BIDEGREE in ext::secondary - Rust @@ -23,4 +23,4 @@ }); -

    Static ext::secondary::TAU_BIDEGREE

    source ·
    pub static TAU_BIDEGREE: Bidegree
    \ No newline at end of file +

    Static ext::secondary::TAU_BIDEGREE

    source ·
    pub static TAU_BIDEGREE: Bidegree
    \ No newline at end of file diff --git a/docs/ext/secondary/struct.SecondaryComposite.html b/docs/ext/secondary/struct.SecondaryComposite.html index 7f4a674eb..cdcd55ac5 100644 --- a/docs/ext/secondary/struct.SecondaryComposite.html +++ b/docs/ext/secondary/struct.SecondaryComposite.html @@ -1,4 +1,4 @@ -SecondaryComposite in ext::secondary - Rust +SecondaryComposite in ext::secondary - Rust @@ -23,44 +23,44 @@ }); -
    pub struct SecondaryComposite<A: PairAlgebra> {
    -    target: Arc<FreeModule<A>>,
    -    degree: i32,
    -    composite: BiVec<Vec<A::Element>>,
    +
    pub struct SecondaryComposite<A: PairAlgebra> {
    +    target: Arc<FreeModule<A>>,
    +    degree: i32,
    +    composite: BiVec<Vec<A::Element>>,
     }
    Expand description

    A homotopy of a map A -> M of pair modules. We assume this map does not hit generators.

    -

    Fields§

    §target: Arc<FreeModule<A>>§degree: i32§composite: BiVec<Vec<A::Element>>

    The component of the map on the R_B portion. +

    Fields§

    §target: Arc<FreeModule<A>>§degree: i32§composite: BiVec<Vec<A::Element>>

    The component of the map on the R_B portion. gen_deg -> gen_idx -> coefficient

    -

    Implementations§

    source§

    impl<A: PairAlgebra> SecondaryComposite<A>

    source

    pub fn algebra(&self) -> Arc<A>

    source

    pub fn new(target: Arc<FreeModule<A>>, degree: i32, hit_generator: bool) -> Self

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes( - target: Arc<FreeModule<A>>, - degree: i32, - hit_generator: bool, - buffer: &mut impl Read -) -> Result<Self>

    source

    pub fn finalize(&mut self)

    source

    pub fn add_composite( +

    Implementations§

    source§

    impl<A: PairAlgebra> SecondaryComposite<A>

    source

    pub fn algebra(&self) -> Arc<A>

    source

    pub fn new(target: Arc<FreeModule<A>>, degree: i32, hit_generator: bool) -> Self

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes( + target: Arc<FreeModule<A>>, + degree: i32, + hit_generator: bool, + buffer: &mut impl Read +) -> Result<Self>

    source

    pub fn finalize(&mut self)

    source

    pub fn add_composite( &mut self, - coeff: u32, - gen_degree: i32, - gen_idx: usize, + coeff: u32, + gen_degree: i32, + gen_idx: usize, d1: &FreeModuleHomomorphism<FreeModule<A>>, d0: &FreeModuleHomomorphism<FreeModule<A>> -)

    source

    pub fn act( +)

    source

    pub fn act( &self, - result: SliceMut<'_>, - coeff: u32, - op_degree: i32, - op: Slice<'_> -)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + result: SliceMut<'_>, + coeff: u32, + op_degree: i32, + op: Slice<'_> +)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/secondary/struct.SecondaryHomotopy.html b/docs/ext/secondary/struct.SecondaryHomotopy.html index 5dadc8452..7488044f9 100644 --- a/docs/ext/secondary/struct.SecondaryHomotopy.html +++ b/docs/ext/secondary/struct.SecondaryHomotopy.html @@ -1,4 +1,4 @@ -SecondaryHomotopy in ext::secondary - Rust +SecondaryHomotopy in ext::secondary - Rust @@ -23,53 +23,53 @@ }); -
    pub struct SecondaryHomotopy<A: PairAlgebra> {
    -    pub source: Arc<FreeModule<A>>,
    -    pub target: Arc<FreeModule<A>>,
    -    pub shift_t: i32,
    -    pub(crate) composites: OnceBiVec<Vec<SecondaryComposite<A>>>,
    +
    pub struct SecondaryHomotopy<A: PairAlgebra> {
    +    pub source: Arc<FreeModule<A>>,
    +    pub target: Arc<FreeModule<A>>,
    +    pub shift_t: i32,
    +    pub(crate) composites: OnceBiVec<Vec<SecondaryComposite<A>>>,
         pub homotopies: FreeModuleHomomorphism<FreeModule<A>>,
    -    hit_generator: bool,
    -}

    Fields§

    §source: Arc<FreeModule<A>>§target: Arc<FreeModule<A>>§shift_t: i32

    output_t = input_t - shift_t

    -
    §composites: OnceBiVec<Vec<SecondaryComposite<A>>>

    gen_deg -> gen_idx -> composite

    + hit_generator: bool, +}

    Fields§

    §source: Arc<FreeModule<A>>§target: Arc<FreeModule<A>>§shift_t: i32

    output_t = input_t - shift_t

    +
    §composites: OnceBiVec<Vec<SecondaryComposite<A>>>

    gen_deg -> gen_idx -> composite

    §homotopies: FreeModuleHomomorphism<FreeModule<A>>

    gen_deg -> gen_idx -> homotopy

    -
    §hit_generator: bool

    Implementations§

    source§

    impl<A: PairAlgebra + Send + Sync> SecondaryHomotopy<A>

    source

    pub fn new( - source: Arc<FreeModule<A>>, - target: Arc<FreeModule<A>>, - shift_t: i32, - hit_generator: bool -) -> Self

    source

    pub fn add_composite( +

    §hit_generator: bool

    Implementations§

    source§

    impl<A: PairAlgebra + Send + Sync> SecondaryHomotopy<A>

    source

    pub fn new( + source: Arc<FreeModule<A>>, + target: Arc<FreeModule<A>>, + shift_t: i32, + hit_generator: bool +) -> Self

    source

    pub fn add_composite( &self, - s: u32, - degree: i32, + s: u32, + degree: i32, maps: CompositeData<A>, - dir: Option<&Path> + dir: Option<&Path> )

    Add composites up to and including the specified degree

    -
    source

    pub fn act( +

    source

    pub fn act( &self, - result: SliceMut<'_>, - coeff: u32, - elt_degree: i32, - elt: Slice<'_>, - full: bool + result: SliceMut<'_>, + coeff: u32, + elt_degree: i32, + elt: Slice<'_>, + full: bool )

    Compute the image of an element in the source under the homotopy, writing the result in result. It is assumed that the coefficients of generators are zero in op.

    Arguments
    • full: Whether to include the action of the homotopy part as well
    -
    source

    pub fn composite(&self, gen_deg: i32, gen_idx: usize) -> &SecondaryComposite<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn composite(&self, gen_deg: i32, gen_idx: usize) -> &SecondaryComposite<A>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/secondary/struct.SecondaryResolution.html b/docs/ext/secondary/struct.SecondaryResolution.html index 17768a6ff..50765f8ac 100644 --- a/docs/ext/secondary/struct.SecondaryResolution.html +++ b/docs/ext/secondary/struct.SecondaryResolution.html @@ -1,4 +1,4 @@ -SecondaryResolution in ext::secondary - Rust +SecondaryResolution in ext::secondary - Rust @@ -23,28 +23,28 @@ }); -
    pub struct SecondaryResolution<CC: FreeChainComplex>where
    +
    pub struct SecondaryResolution<CC: FreeChainComplex>where
         CC::Algebra: PairAlgebra,{
    -    underlying: Arc<CC>,
    -    pub(crate) homotopies: OnceBiVec<SecondaryHomotopy<CC::Algebra>>,
    -    intermediates: DashMap<BidegreeGenerator, FpVector>,
    -}

    Fields§

    §underlying: Arc<CC>§homotopies: OnceBiVec<SecondaryHomotopy<CC::Algebra>>

    s -> t -> idx -> homotopy

    -
    §intermediates: DashMap<BidegreeGenerator, FpVector>

    Implementations§

    source§

    impl<CC: FreeChainComplex> SecondaryResolution<CC>where - CC::Algebra: PairAlgebra,

    source

    pub fn new(cc: Arc<CC>) -> Self

    source

    pub fn homotopy(&self, s: u32) -> &SecondaryHomotopy<CC::Algebra>

    source

    pub fn e3_page(&self) -> Sseq<Adams>

    Trait Implementations§

    source§

    impl<CC: FreeChainComplex> SecondaryLift for SecondaryResolution<CC>where - CC::Algebra: PairAlgebra,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Source = CC

    §

    type Target = CC

    §

    type Underlying = CC

    source§

    fn underlying(&self) -> Arc<CC>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn shift(&self) -> Bidegree

    source§

    fn max(&self) -> BidegreeRange<'_, Self>

    source§

    fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<CC::Algebra>>

    source§

    fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>

    source§

    fn save_dir(&self) -> Option<&Path>

    source§

    fn composite(&self, s: u32) -> CompositeData<CC::Algebra>

    source§

    fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source§

    const HIT_GENERATOR: bool = false

    Whether the composite can hit generators. This is true for SecondaryChainHomotopy and + underlying: Arc<CC>, + pub(crate) homotopies: OnceBiVec<SecondaryHomotopy<CC::Algebra>>, + intermediates: DashMap<BidegreeGenerator, FpVector>, +}

    Fields§

    §underlying: Arc<CC>§homotopies: OnceBiVec<SecondaryHomotopy<CC::Algebra>>

    s -> t -> idx -> homotopy

    +
    §intermediates: DashMap<BidegreeGenerator, FpVector>

    Implementations§

    source§

    impl<CC: FreeChainComplex> SecondaryResolution<CC>where + CC::Algebra: PairAlgebra,

    source

    pub fn new(cc: Arc<CC>) -> Self

    source

    pub fn homotopy(&self, s: u32) -> &SecondaryHomotopy<CC::Algebra>

    source

    pub fn e3_page(&self) -> Sseq<Adams>

    Trait Implementations§

    source§

    impl<CC: FreeChainComplex> SecondaryLift for SecondaryResolution<CC>where + CC::Algebra: PairAlgebra,

    §

    type Algebra = <CC as ChainComplex>::Algebra

    §

    type Source = CC

    §

    type Target = CC

    §

    type Underlying = CC

    source§

    fn underlying(&self) -> Arc<CC>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn source(&self) -> Arc<Self::Source>

    source§

    fn target(&self) -> Arc<Self::Target>

    source§

    fn shift(&self) -> Bidegree

    source§

    fn max(&self) -> BidegreeRange<'_, Self>

    source§

    fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<CC::Algebra>>

    source§

    fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>

    source§

    fn save_dir(&self) -> Option<&Path>

    source§

    fn composite(&self, s: u32) -> CompositeData<CC::Algebra>

    source§

    fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source§

    const HIT_GENERATOR: bool = false

    Whether the composite can hit generators. This is true for SecondaryChainHomotopy and false for the rest. This is important because for SecondaryResolution, we don’t actually know all the generators if we resolve up to a stem. So in composites for -SecondaryResolution, we need to ignore target generators of the same degree uniformly.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn initialize_homotopies(&self)

    source§

    fn compute_composites(&self)

    source§

    fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source§

    fn compute_partial(&self, s: u32)

    source§

    fn compute_intermediates(&self)

    source§

    fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32>

    source§

    fn compute_homotopies(&self)

    source§

    fn extend_all(&self)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +SecondaryResolution, we need to ignore target generators of the same degree uniformly.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn initialize_homotopies(&self)

    source§

    fn compute_composites(&self)

    source§

    fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source§

    fn compute_partial(&self, s: u32)

    source§

    fn compute_intermediates(&self)

    source§

    fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32>

    source§

    fn compute_homotopies(&self)

    source§

    fn extend_all(&self)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/secondary/trait.SecondaryLift.html b/docs/ext/secondary/trait.SecondaryLift.html index f3f0b7632..9bb9e07d9 100644 --- a/docs/ext/secondary/trait.SecondaryLift.html +++ b/docs/ext/secondary/trait.SecondaryLift.html @@ -1,4 +1,4 @@ -SecondaryLift in ext::secondary - Rust +SecondaryLift in ext::secondary - Rust @@ -23,35 +23,35 @@ }); -
    pub trait SecondaryLift: Sync + Sized {
    +
    pub trait SecondaryLift: Sync + Sized {
         type Algebra: PairAlgebra;
         type Source: FreeChainComplex<Algebra = Self::Algebra>;
         type Target: FreeChainComplex<Algebra = Self::Algebra>;
         type Underlying;
     
    -    const HIT_GENERATOR: bool = false;
    +    const HIT_GENERATOR: bool = false;
     
    Show 20 methods // Required methods - fn underlying(&self) -> Arc<Self::Underlying>; - fn algebra(&self) -> Arc<Self::Algebra>; - fn source(&self) -> Arc<Self::Source>; - fn target(&self) -> Arc<Self::Target>; - fn shift(&self) -> Bidegree; - fn max(&self) -> BidegreeRange<'_, Self>; - fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>; - fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>; - fn save_dir(&self) -> Option<&Path>; - fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector; - fn composite(&self, s: u32) -> CompositeData<Self::Algebra>; + fn underlying(&self) -> Arc<Self::Underlying>; + fn algebra(&self) -> Arc<Self::Algebra>; + fn source(&self) -> Arc<Self::Source>; + fn target(&self) -> Arc<Self::Target>; + fn shift(&self) -> Bidegree; + fn max(&self) -> BidegreeRange<'_, Self>; + fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>; + fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>; + fn save_dir(&self) -> Option<&Path>; + fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector; + fn composite(&self, s: u32) -> CompositeData<Self::Algebra>; // Provided methods - fn prime(&self) -> ValidPrime { ... } + fn prime(&self) -> ValidPrime { ... } fn initialize_homotopies(&self) { ... } fn compute_composites(&self) { ... } - fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector { ... } - fn compute_partial(&self, s: u32) { ... } + fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector { ... } + fn compute_partial(&self, s: u32) { ... } fn compute_intermediates(&self) { ... } - fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32> { ... } + fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32> { ... } fn compute_homotopies(&self) { ... } fn extend_all(&self) { ... }
    }
    Expand description

    When lifting a thing to its secondary version, often what we have to do is to specify an @@ -68,9 +68,9 @@

    $$ dh = hd + \mathrm{stuff} $$

    The τ part of $hd + \mathrm{stuff}$ is known as the intermediate data, and is what SecondaryLift::compute_intermediate returns.

    -

    Required Associated Types§

    Provided Associated Constants§

    source

    const HIT_GENERATOR: bool = false

    Whether the composite can hit generators. This is true for SecondaryChainHomotopy and +

    Required Associated Types§

    Provided Associated Constants§

    source

    const HIT_GENERATOR: bool = false

    Whether the composite can hit generators. This is true for SecondaryChainHomotopy and false for the rest. This is important because for SecondaryResolution, we don’t actually know all the generators if we resolve up to a stem. So in composites for SecondaryResolution, we need to ignore target generators of the same degree uniformly.

    -

    Required Methods§

    source

    fn underlying(&self) -> Arc<Self::Underlying>

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    source

    fn source(&self) -> Arc<Self::Source>

    source

    fn target(&self) -> Arc<Self::Target>

    source

    fn shift(&self) -> Bidegree

    source

    fn max(&self) -> BidegreeRange<'_, Self>

    source

    fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>

    source

    fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>

    source

    fn save_dir(&self) -> Option<&Path>

    source

    fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source

    fn composite(&self, s: u32) -> CompositeData<Self::Algebra>

    Provided Methods§

    source

    fn prime(&self) -> ValidPrime

    source

    fn initialize_homotopies(&self)

    source

    fn compute_composites(&self)

    source

    fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source

    fn compute_partial(&self, s: u32)

    source

    fn compute_intermediates(&self)

    source

    fn compute_homotopy_step(&self, b: Bidegree) -> Range<i32>

    source

    fn compute_homotopies(&self)

    source

    fn extend_all(&self)

    Implementors§

    Required Methods§

    source

    fn underlying(&self) -> Arc<Self::Underlying>

    source

    fn algebra(&self) -> Arc<Self::Algebra>

    source

    fn source(&self) -> Arc<Self::Source>

    source

    fn target(&self) -> Arc<Self::Target>

    source

    fn shift(&self) -> Bidegree

    source

    fn max(&self) -> BidegreeRange<'_, Self>

    source

    fn homotopies(&self) -> &OnceBiVec<SecondaryHomotopy<Self::Algebra>>

    source

    fn intermediates(&self) -> &DashMap<BidegreeGenerator, FpVector>

    source

    fn save_dir(&self) -> Option<&Path>

    source

    fn compute_intermediate(&self, gen: BidegreeGenerator) -> FpVector

    source

    fn composite(&self, s: u32) -> CompositeData<Self::Algebra>

    Provided Methods§

    Implementors§

    \ No newline at end of file diff --git a/docs/ext/secondary/type.CompositeData.html b/docs/ext/secondary/type.CompositeData.html index 1e1506dc6..9533c4e58 100644 --- a/docs/ext/secondary/type.CompositeData.html +++ b/docs/ext/secondary/type.CompositeData.html @@ -1,4 +1,4 @@ -CompositeData in ext::secondary - Rust +CompositeData in ext::secondary - Rust @@ -23,4 +23,1066 @@ }); -

    Type Definition ext::secondary::CompositeData

    source ·
    pub type CompositeData<A> = Vec<(u32, Arc<FreeModuleHomomorphism<FreeModule<A>>>, Arc<FreeModuleHomomorphism<FreeModule<A>>>)>;
    \ No newline at end of file +

    Type Alias ext::secondary::CompositeData

    source ·
    pub type CompositeData<A> = Vec<(u32, Arc<FreeModuleHomomorphism<FreeModule<A>>>, Arc<FreeModuleHomomorphism<FreeModule<A>>>)>;

    Aliased Type§

    struct CompositeData<A> {
    +    buf: RawVec<(u32, Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, A>>, Global>, Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, A>>, Global>), Global>,
    +    len: usize,
    +}

    Fields§

    §buf: RawVec<(u32, Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, A>>, Global>, Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, A>>, Global>), Global>§len: usize

    Methods from Deref<Target = [T]>§

    source

    pub fn as_str(&self) -> &str

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a UTF-8 str.

    +
    source

    pub fn as_bytes(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (ascii_char)

    Views this slice of ASCII characters as a slice of u8 bytes.

    +
    1.23.0 · source

    pub fn is_ascii(&self) -> bool

    Checks if all bytes in this slice are within the ASCII range.

    +
    source

    pub fn as_ascii(&self) -> Option<&[AsciiChar]>

    🔬This is a nightly-only experimental API. (ascii_char)

    If this slice is_ascii, returns it as a slice of +ASCII characters, otherwise returns None.

    +
    source

    pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar]

    🔬This is a nightly-only experimental API. (ascii_char)

    Converts this slice of bytes into a slice of ASCII characters, +without checking whether they’re valid.

    +
    Safety
    +

    Every byte in the slice must be in 0..=127, or else this is UB.

    +
    1.23.0 · source

    pub fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool

    Checks that two slices are an ASCII case-insensitive match.

    +

    Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), +but without allocating and copying temporaries.

    +
    1.60.0 · source

    pub fn escape_ascii(&self) -> EscapeAscii<'_>

    Returns an iterator that produces an escaped version of this slice, +treating it as an ASCII string.

    +
    Examples
    +
    
    +let s = b"0\t\r\n'\"\\\x9d";
    +let escaped = s.escape_ascii().to_string();
    +assert_eq!(escaped, "0\\t\\r\\n\\'\\\"\\\\\\x9d");
    +
    source

    pub fn trim_ascii_start(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b" \t hello world\n".trim_ascii_start(), b"hello world\n");
    +assert_eq!(b"  ".trim_ascii_start(), b"");
    +assert_eq!(b"".trim_ascii_start(), b"");
    +
    source

    pub fn trim_ascii_end(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with trailing ASCII whitespace bytes removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii_end(), b"\r hello world");
    +assert_eq!(b"  ".trim_ascii_end(), b"");
    +assert_eq!(b"".trim_ascii_end(), b"");
    +
    source

    pub fn trim_ascii(&self) -> &[u8]

    🔬This is a nightly-only experimental API. (byte_slice_trim_ascii)

    Returns a byte slice with leading and trailing ASCII whitespace bytes +removed.

    +

    ‘Whitespace’ refers to the definition used by +u8::is_ascii_whitespace.

    +
    Examples
    +
    #![feature(byte_slice_trim_ascii)]
    +
    +assert_eq!(b"\r hello world\n ".trim_ascii(), b"hello world");
    +assert_eq!(b"  ".trim_ascii(), b"");
    +assert_eq!(b"".trim_ascii(), b"");
    +
    source

    pub fn flatten(&self) -> &[T]

    🔬This is a nightly-only experimental API. (slice_flatten)

    Takes a &[[T; N]], and flattens it to a &[T].

    +
    Panics
    +

    This panics if the length of the resulting slice would overflow a usize.

    +

    This is only possible when flattening a slice of arrays of zero-sized +types, and thus tends to be irrelevant in practice. If +size_of::<T>() > 0, this will never panic.

    +
    Examples
    +
    #![feature(slice_flatten)]
    +
    +assert_eq!([[1, 2, 3], [4, 5, 6]].flatten(), &[1, 2, 3, 4, 5, 6]);
    +
    +assert_eq!(
    +    [[1, 2, 3], [4, 5, 6]].flatten(),
    +    [[1, 2], [3, 4], [5, 6]].flatten(),
    +);
    +
    +let slice_of_empty_arrays: &[[i32; 0]] = &[[], [], [], [], []];
    +assert!(slice_of_empty_arrays.flatten().is_empty());
    +
    +let empty_slice_of_arrays: &[[u32; 10]] = &[];
    +assert!(empty_slice_of_arrays.flatten().is_empty());
    +
    1.0.0 · source

    pub fn len(&self) -> usize

    Returns the number of elements in the slice.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert_eq!(a.len(), 3);
    +
    1.0.0 · source

    pub fn is_empty(&self) -> bool

    Returns true if the slice has a length of 0.

    +
    Examples
    +
    let a = [1, 2, 3];
    +assert!(!a.is_empty());
    +
    1.0.0 · source

    pub fn first(&self) -> Option<&T>

    Returns the first element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&10), v.first());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.first());
    +
    1.5.0 · source

    pub fn split_first(&self) -> Option<(&T, &[T])>

    Returns the first and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first() {
    +    assert_eq!(first, &0);
    +    assert_eq!(elements, &[1, 2]);
    +}
    +
    1.5.0 · source

    pub fn split_last(&self) -> Option<(&T, &[T])>

    Returns the last and all the rest of the elements of the slice, or None if it is empty.

    +
    Examples
    +
    let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last() {
    +    assert_eq!(last, &2);
    +    assert_eq!(elements, &[0, 1]);
    +}
    +
    1.0.0 · source

    pub fn last(&self) -> Option<&T>

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&30), v.last());
    +
    +let w: &[i32] = &[];
    +assert_eq!(None, w.last());
    +
    source

    pub fn first_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice, or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[10, 40]), u.first_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.first_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.first_chunk::<0>());
    +
    source

    pub fn split_first_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the first N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((first, elements)) = x.split_first_chunk::<2>() {
    +    assert_eq!(first, &[0, 1]);
    +    assert_eq!(elements, &[2]);
    +}
    +
    source

    pub fn split_last_chunk<const N: usize>(&self) -> Option<(&[T; N], &[T])>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last N elements of the slice and the remainder, +or None if it has fewer than N elements.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let x = &[0, 1, 2];
    +
    +if let Some((last, elements)) = x.split_last_chunk::<2>() {
    +    assert_eq!(last, &[1, 2]);
    +    assert_eq!(elements, &[0]);
    +}
    +
    source

    pub fn last_chunk<const N: usize>(&self) -> Option<&[T; N]>

    🔬This is a nightly-only experimental API. (slice_first_last_chunk)

    Returns the last element of the slice, or None if it is empty.

    +
    Examples
    +
    #![feature(slice_first_last_chunk)]
    +
    +let u = [10, 40, 30];
    +assert_eq!(Some(&[40, 30]), u.last_chunk::<2>());
    +
    +let v: &[i32] = &[10];
    +assert_eq!(None, v.last_chunk::<2>());
    +
    +let w: &[i32] = &[];
    +assert_eq!(Some(&[]), w.last_chunk::<0>());
    +
    1.0.0 · source

    pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>where + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice depending on the type of +index.

    +
      +
    • If given a position, returns a reference to the element at that +position or None if out of bounds.
    • +
    • If given a range, returns the subslice corresponding to that range, +or None if out of bounds.
    • +
    +
    Examples
    +
    let v = [10, 40, 30];
    +assert_eq!(Some(&40), v.get(1));
    +assert_eq!(Some(&[10, 40][..]), v.get(0..2));
    +assert_eq!(None, v.get(3));
    +assert_eq!(None, v.get(0..4));
    +
    1.0.0 · source

    pub unsafe fn get_unchecked<I>( + &self, + index: I +) -> &<I as SliceIndex<[T]>>::Outputwhere + I: SliceIndex<[T]>,

    Returns a reference to an element or subslice, without doing bounds +checking.

    +

    For a safe alternative see get.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +
    +unsafe {
    +    assert_eq!(x.get_unchecked(1), &2);
    +}
    +
    1.0.0 · source

    pub fn as_ptr(&self) -> *const T

    Returns a raw pointer to the slice’s buffer.

    +

    The caller must ensure that the slice outlives the pointer this +function returns, or else it will end up pointing to garbage.

    +

    The caller must also ensure that the memory the pointer (non-transitively) points to +is never written to (except inside an UnsafeCell) using this pointer or any pointer +derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

    +

    Modifying the container referenced by this slice may cause its buffer +to be reallocated, which would also make any pointers to it invalid.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let x_ptr = x.as_ptr();
    +
    +unsafe {
    +    for i in 0..x.len() {
    +        assert_eq!(x.get_unchecked(i), &*x_ptr.add(i));
    +    }
    +}
    +
    1.48.0 · source

    pub fn as_ptr_range(&self) -> Range<*const T>

    Returns the two raw pointers spanning the slice.

    +

    The returned range is half-open, which means that the end pointer +points one past the last element of the slice. This way, an empty +slice is represented by two equal pointers, and the difference between +the two pointers represents the size of the slice.

    +

    See as_ptr for warnings on using these pointers. The end pointer +requires extra caution, as it does not point to a valid element in the +slice.

    +

    This function is useful for interacting with foreign interfaces which +use two pointers to refer to a range of elements in memory, as is +common in C++.

    +

    It can also be useful to check if a pointer to an element refers to an +element of this slice:

    + +
    let a = [1, 2, 3];
    +let x = &a[1] as *const _;
    +let y = &5 as *const _;
    +
    +assert!(a.as_ptr_range().contains(&x));
    +assert!(!a.as_ptr_range().contains(&y));
    +
    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, T>

    Returns an iterator over the slice.

    +

    The iterator yields all items from start to end.

    +
    Examples
    +
    let x = &[1, 2, 4];
    +let mut iterator = x.iter();
    +
    +assert_eq!(iterator.next(), Some(&1));
    +assert_eq!(iterator.next(), Some(&2));
    +assert_eq!(iterator.next(), Some(&4));
    +assert_eq!(iterator.next(), None);
    +
    1.0.0 · source

    pub fn windows(&self, size: usize) -> Windows<'_, T>

    Returns an iterator over all contiguous windows of length +size. The windows overlap. If the slice is shorter than +size, the iterator returns no values.

    +
    Panics
    +

    Panics if size is 0.

    +
    Examples
    +
    let slice = ['r', 'u', 's', 't'];
    +let mut iter = slice.windows(2);
    +assert_eq!(iter.next().unwrap(), &['r', 'u']);
    +assert_eq!(iter.next().unwrap(), &['u', 's']);
    +assert_eq!(iter.next().unwrap(), &['s', 't']);
    +assert!(iter.next().is_none());
    +

    If the slice is shorter than size:

    + +
    let slice = ['f', 'o', 'o'];
    +let mut iter = slice.windows(4);
    +assert!(iter.next().is_none());
    +

    There’s no windows_mut, as that existing would let safe code violate the +“only one &mut at a time to the same thing” rule. However, you can sometimes +use Cell::as_slice_of_cells in +conjunction with windows to accomplish something similar:

    + +
    use std::cell::Cell;
    +
    +let mut array = ['R', 'u', 's', 't', ' ', '2', '0', '1', '5'];
    +let slice = &mut array[..];
    +let slice_of_cells: &[Cell<char>] = Cell::from_mut(slice).as_slice_of_cells();
    +for w in slice_of_cells.windows(3) {
    +    Cell::swap(&w[0], &w[2]);
    +}
    +assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
    +
    1.0.0 · source

    pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See chunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and rchunks for the same iterator but starting at the end of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert_eq!(iter.next().unwrap(), &['m']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of chunks.

    +

    See chunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and rchunks_exact for the same iterator but starting at the end of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.chunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub unsafe fn as_chunks_unchecked<const N: usize>(&self) -> &[[T; N]]

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +assuming that there’s no remainder.

    +
    Safety
    +

    This may only be called when

    +
      +
    • The slice splits exactly into N-element chunks (aka self.len() % N == 0).
    • +
    • N != 0.
    • +
    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice: &[char] = &['l', 'o', 'r', 'e', 'm', '!'];
    +let chunks: &[[char; 1]] =
    +    // SAFETY: 1-element chunks never have remainder
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l'], ['o'], ['r'], ['e'], ['m'], ['!']]);
    +let chunks: &[[char; 3]] =
    +    // SAFETY: The slice length (6) is a multiple of 3
    +    unsafe { slice.as_chunks_unchecked() };
    +assert_eq!(chunks, &[['l', 'o', 'r'], ['e', 'm', '!']]);
    +
    +// These would be unsound:
    +// let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5
    +// let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed
    +
    source

    pub fn as_chunks<const N: usize>(&self) -> (&[[T; N]], &[T])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the beginning of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (chunks, remainder) = slice.as_chunks();
    +assert_eq!(chunks, &[['l', 'o'], ['r', 'e']]);
    +assert_eq!(remainder, &['m']);
    +

    If you expect the slice to be an exact multiple, you can combine +let-else with an empty slice pattern:

    + +
    #![feature(slice_as_chunks)]
    +let slice = ['R', 'u', 's', 't'];
    +let (chunks, []) = slice.as_chunks::<2>() else {
    +    panic!("slice didn't have even length")
    +};
    +assert_eq!(chunks, &[['R', 'u'], ['s', 't']]);
    +
    source

    pub fn as_rchunks<const N: usize>(&self) -> (&[T], &[[T; N]])

    🔬This is a nightly-only experimental API. (slice_as_chunks)

    Splits the slice into a slice of N-element arrays, +starting at the end of the slice, +and a remainder slice with length strictly less than N.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(slice_as_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let (remainder, chunks) = slice.as_rchunks();
    +assert_eq!(remainder, &['l']);
    +assert_eq!(chunks, &[['o', 'r'], ['e', 'm']]);
    +
    source

    pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N>

    🔬This is a nightly-only experimental API. (array_chunks)

    Returns an iterator over N elements of the slice at a time, starting at the +beginning of the slice.

    +

    The chunks are array references and do not overlap. If N does not divide the +length of the slice, then the last up to N-1 elements will be omitted and can be +retrieved from the remainder function of the iterator.

    +

    This method is the const generic equivalent of chunks_exact.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_chunks)]
    +let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.array_chunks();
    +assert_eq!(iter.next().unwrap(), &['l', 'o']);
    +assert_eq!(iter.next().unwrap(), &['r', 'e']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['m']);
    +
    source

    pub fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N>

    🔬This is a nightly-only experimental API. (array_windows)

    Returns an iterator over overlapping windows of N elements of a slice, +starting at the beginning of the slice.

    +

    This is the const generic equivalent of windows.

    +

    If N is greater than the size of the slice, it will return no windows.

    +
    Panics
    +

    Panics if N is 0. This check will most probably get changed to a compile time +error before this method gets stabilized.

    +
    Examples
    +
    #![feature(array_windows)]
    +let slice = [0, 1, 2, 3];
    +let mut iter = slice.array_windows();
    +assert_eq!(iter.next().unwrap(), &[0, 1]);
    +assert_eq!(iter.next().unwrap(), &[1, 2]);
    +assert_eq!(iter.next().unwrap(), &[2, 3]);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the end +of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last chunk will not have length chunk_size.

    +

    See rchunks_exact for a variant of this iterator that returns chunks of always exactly +chunk_size elements, and chunks for the same iterator but starting at the beginning +of the slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert_eq!(iter.next().unwrap(), &['l']);
    +assert!(iter.next().is_none());
    +
    1.31.0 · source

    pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T>

    Returns an iterator over chunk_size elements of the slice at a time, starting at the +end of the slice.

    +

    The chunks are slices and do not overlap. If chunk_size does not divide the length of the +slice, then the last up to chunk_size-1 elements will be omitted and can be retrieved +from the remainder function of the iterator.

    +

    Due to each chunk having exactly chunk_size elements, the compiler can often optimize the +resulting code better than in the case of rchunks.

    +

    See rchunks for a variant of this iterator that also returns the remainder as a smaller +chunk, and chunks_exact for the same iterator but starting at the beginning of the +slice.

    +
    Panics
    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    let slice = ['l', 'o', 'r', 'e', 'm'];
    +let mut iter = slice.rchunks_exact(2);
    +assert_eq!(iter.next().unwrap(), &['e', 'm']);
    +assert_eq!(iter.next().unwrap(), &['o', 'r']);
    +assert!(iter.next().is_none());
    +assert_eq!(iter.remainder(), &['l']);
    +
    source

    pub fn group_by<F>(&self, pred: F) -> GroupBy<'_, T, F>where + F: FnMut(&T, &T) -> bool,

    🔬This is a nightly-only experimental API. (slice_group_by)

    Returns an iterator over the slice producing non-overlapping runs +of elements using the predicate to separate them.

    +

    The predicate is called on two elements following themselves, +it means the predicate is called on slice[0] and slice[1] +then on slice[1] and slice[2] and so on.

    +
    Examples
    +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
    +
    +let mut iter = slice.group_by(|a, b| a == b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
    +assert_eq!(iter.next(), Some(&[3, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
    +assert_eq!(iter.next(), None);
    +

    This method can be used to extract the sorted subslices:

    + +
    #![feature(slice_group_by)]
    +
    +let slice = &[1, 1, 2, 3, 2, 3, 2, 3, 4];
    +
    +let mut iter = slice.group_by(|a, b| a <= b);
    +
    +assert_eq!(iter.next(), Some(&[1, 1, 2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3][..]));
    +assert_eq!(iter.next(), Some(&[2, 3, 4][..]));
    +assert_eq!(iter.next(), None);
    +
    1.0.0 · source

    pub fn split_at(&self, mid: usize) -> (&[T], &[T])

    Divides one slice into two at an index.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if mid > len.

    +
    Examples
    +
    let v = [1, 2, 3, 4, 5, 6];
    +
    +{
    +   let (left, right) = v.split_at(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_at(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T])

    🔬This is a nightly-only experimental API. (slice_split_at_unchecked)

    Divides one slice into two at an index, without doing bounds checking.

    +

    The first will contain all indices from [0, mid) (excluding +the index mid itself) and the second will contain all +indices from [mid, len) (excluding the index len itself).

    +

    For a safe alternative see split_at.

    +
    Safety
    +

    Calling this method with an out-of-bounds index is undefined behavior +even if the resulting reference is not used. The caller has to ensure that +0 <= mid <= self.len().

    +
    Examples
    +
    #![feature(slice_split_at_unchecked)]
    +
    +let v = [1, 2, 3, 4, 5, 6];
    +
    +unsafe {
    +   let (left, right) = v.split_at_unchecked(0);
    +   assert_eq!(left, []);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(2);
    +    assert_eq!(left, [1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +unsafe {
    +    let (left, right) = v.split_at_unchecked(6);
    +    assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn split_array_ref<const N: usize>(&self) -> (&[T; N], &[T])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index.

    +

    The array will contain all indices from [0, N) (excluding +the index N itself) and the slice will contain all +indices from [N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.split_array_ref::<0>();
    +   assert_eq!(left, &[]);
    +   assert_eq!(right, [1, 2, 3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<2>();
    +    assert_eq!(left, &[1, 2]);
    +    assert_eq!(right, [3, 4, 5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.split_array_ref::<6>();
    +    assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
    +    assert_eq!(right, []);
    +}
    +
    source

    pub fn rsplit_array_ref<const N: usize>(&self) -> (&[T], &[T; N])

    🔬This is a nightly-only experimental API. (split_array)

    Divides one slice into an array and a remainder slice at an index from +the end.

    +

    The slice will contain all indices from [0, len - N) (excluding +the index len - N itself) and the array will contain all +indices from [len - N, len) (excluding the index len itself).

    +
    Panics
    +

    Panics if N > len.

    +
    Examples
    +
    #![feature(split_array)]
    +
    +let v = &[1, 2, 3, 4, 5, 6][..];
    +
    +{
    +   let (left, right) = v.rsplit_array_ref::<0>();
    +   assert_eq!(left, [1, 2, 3, 4, 5, 6]);
    +   assert_eq!(right, &[]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<2>();
    +    assert_eq!(left, [1, 2, 3, 4]);
    +    assert_eq!(right, &[5, 6]);
    +}
    +
    +{
    +    let (left, right) = v.rsplit_array_ref::<6>();
    +    assert_eq!(left, []);
    +    assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
    +}
    +
    1.0.0 · source

    pub fn split<F>(&self, pred: F) -> Split<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the first element is matched, an empty slice will be the first item +returned by the iterator. Similarly, if the last element in the slice +is matched, an empty slice will be the last item returned by the +iterator:

    + +
    let slice = [10, 40, 33];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert!(iter.next().is_none());
    +

    If two matched elements are directly adjacent, an empty slice will be +present between them:

    + +
    let slice = [10, 6, 33, 20];
    +let mut iter = slice.split(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10]);
    +assert_eq!(iter.next().unwrap(), &[]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +
    1.51.0 · source

    pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred. The matched element is contained in the end of the previous +subslice as a terminator.

    +
    Examples
    +
    let slice = [10, 40, 33, 20];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert_eq!(iter.next().unwrap(), &[20]);
    +assert!(iter.next().is_none());
    +

    If the last element of the slice is matched, +that element will be considered the terminator of the preceding slice. +That slice will be the last item returned by the iterator.

    + +
    let slice = [3, 10, 40, 33];
    +let mut iter = slice.split_inclusive(|num| num % 3 == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[3]);
    +assert_eq!(iter.next().unwrap(), &[10, 40, 33]);
    +assert!(iter.next().is_none());
    +
    1.27.0 · source

    pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, starting at the end of the slice and working backwards. +The matched element is not contained in the subslices.

    +
    Examples
    +
    let slice = [11, 22, 33, 0, 44, 55];
    +let mut iter = slice.rsplit(|num| *num == 0);
    +
    +assert_eq!(iter.next().unwrap(), &[44, 55]);
    +assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
    +assert_eq!(iter.next(), None);
    +

    As with split(), if the first or last element is matched, an empty +slice will be the first (or last) item returned by the iterator.

    + +
    let v = &[0, 1, 1, 2, 3, 5, 8];
    +let mut it = v.rsplit(|n| *n % 2 == 0);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next().unwrap(), &[3, 5]);
    +assert_eq!(it.next().unwrap(), &[1, 1]);
    +assert_eq!(it.next().unwrap(), &[]);
    +assert_eq!(it.next(), None);
    +
    1.0.0 · source

    pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred, limited to returning at most n items. The matched element is +not contained in the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once by numbers divisible by 3 (i.e., [10, 40], +[20, 60, 50]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.splitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F>where + F: FnMut(&T) -> bool,

    Returns an iterator over subslices separated by elements that match +pred limited to returning at most n items. This starts at the end of +the slice and works backwards. The matched element is not contained in +the subslices.

    +

    The last element returned, if any, will contain the remainder of the +slice.

    +
    Examples
    +

    Print the slice split once, starting from the end, by numbers divisible +by 3 (i.e., [50], [10, 40, 30, 20]):

    + +
    let v = [10, 40, 30, 20, 60, 50];
    +
    +for group in v.rsplitn(2, |num| *num % 3 == 0) {
    +    println!("{group:?}");
    +}
    +
    1.0.0 · source

    pub fn contains(&self, x: &T) -> boolwhere + T: PartialEq<T>,

    Returns true if the slice contains an element with the given value.

    +

    This operation is O(n).

    +

    Note that if you have a sorted slice, binary_search may be faster.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.contains(&30));
    +assert!(!v.contains(&50));
    +

    If you do not have a &T, but some other value that you can compare +with one (for example, String implements PartialEq<str>), you can +use iter().any:

    + +
    let v = [String::from("hello"), String::from("world")]; // slice of `String`
    +assert!(v.iter().any(|e| e == "hello")); // search with `&str`
    +assert!(!v.iter().any(|e| e == "hi"));
    +
    1.0.0 · source

    pub fn starts_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a prefix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.starts_with(&[10]));
    +assert!(v.starts_with(&[10, 40]));
    +assert!(!v.starts_with(&[50]));
    +assert!(!v.starts_with(&[10, 50]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.starts_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.starts_with(&[]));
    +
    1.0.0 · source

    pub fn ends_with(&self, needle: &[T]) -> boolwhere + T: PartialEq<T>,

    Returns true if needle is a suffix of the slice.

    +
    Examples
    +
    let v = [10, 40, 30];
    +assert!(v.ends_with(&[30]));
    +assert!(v.ends_with(&[40, 30]));
    +assert!(!v.ends_with(&[50]));
    +assert!(!v.ends_with(&[50, 30]));
    +

    Always returns true if needle is an empty slice:

    + +
    let v = &[10, 40, 30];
    +assert!(v.ends_with(&[]));
    +let v: &[u8] = &[];
    +assert!(v.ends_with(&[]));
    +
    1.51.0 · source

    pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the prefix removed.

    +

    If the slice starts with prefix, returns the subslice after the prefix, wrapped in Some. +If prefix is empty, simply returns the original slice.

    +

    If the slice does not start with prefix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_prefix(&[10]), Some(&[40, 30][..]));
    +assert_eq!(v.strip_prefix(&[10, 40]), Some(&[30][..]));
    +assert_eq!(v.strip_prefix(&[50]), None);
    +assert_eq!(v.strip_prefix(&[10, 50]), None);
    +
    +let prefix : &str = "he";
    +assert_eq!(b"hello".strip_prefix(prefix.as_bytes()),
    +           Some(b"llo".as_ref()));
    +
    1.51.0 · source

    pub fn strip_suffix<P>(&self, suffix: &P) -> Option<&[T]>where + P: SlicePattern<Item = T> + ?Sized, + T: PartialEq<T>,

    Returns a subslice with the suffix removed.

    +

    If the slice ends with suffix, returns the subslice before the suffix, wrapped in Some. +If suffix is empty, simply returns the original slice.

    +

    If the slice does not end with suffix, returns None.

    +
    Examples
    +
    let v = &[10, 40, 30];
    +assert_eq!(v.strip_suffix(&[30]), Some(&[10, 40][..]));
    +assert_eq!(v.strip_suffix(&[40, 30]), Some(&[10][..]));
    +assert_eq!(v.strip_suffix(&[50]), None);
    +assert_eq!(v.strip_suffix(&[50, 30]), None);
    +

    Binary searches this slice for a given element. +If the slice is not sorted, the returned result is unspecified and +meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search_by, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +assert_eq!(s.binary_search(&13),  Ok(9));
    +assert_eq!(s.binary_search(&4),   Err(7));
    +assert_eq!(s.binary_search(&100), Err(13));
    +let r = s.binary_search(&1);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +

    If you want to find that whole range of matching items, rather than +an arbitrary matching one, that can be done using partition_point:

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let low = s.partition_point(|x| x < &1);
    +assert_eq!(low, 1);
    +let high = s.partition_point(|x| x <= &1);
    +assert_eq!(high, 5);
    +let r = s.binary_search(&1);
    +assert!((low..high).contains(&r.unwrap()));
    +
    +assert!(s[..low].iter().all(|&x| x < 1));
    +assert!(s[low..high].iter().all(|&x| x == 1));
    +assert!(s[high..].iter().all(|&x| x > 1));
    +
    +// For something not found, the "range" of equal items is empty
    +assert_eq!(s.partition_point(|x| x < &11), 9);
    +assert_eq!(s.partition_point(|x| x <= &11), 9);
    +assert_eq!(s.binary_search(&11), Err(9));
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order, consider using partition_point:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +// The above is equivalent to `let idx = s.binary_search(&num).unwrap_or_else(|x| x);`
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize>where + F: FnMut(&'a T) -> Ordering,

    Binary searches this slice with a comparator function.

    +

    The comparator function should return an order code that indicates +whether its argument is Less, Equal or Greater the desired +target. +If the slice is not sorted or if the comparator function does not +implement an order consistent with the sort order of the underlying +slice, the returned result is unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by_key, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements. The first is found, with a +uniquely determined position; the second and third are not +found; the fourth could match any position in [1, 4].

    + +
    let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +
    +let seek = 13;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
    +let seek = 4;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
    +let seek = 100;
    +assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
    +let seek = 1;
    +let r = s.binary_search_by(|probe| probe.cmp(&seek));
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.10.0 · source

    pub fn binary_search_by_key<'a, B, F>( + &'a self, + b: &B, + f: F +) -> Result<usize, usize>where + F: FnMut(&'a T) -> B, + B: Ord,

    Binary searches this slice with a key extraction function.

    +

    Assumes that the slice is sorted by the key, for instance with +sort_by_key using the same key extraction function. +If the slice is not sorted by the key, the returned result is +unspecified and meaningless.

    +

    If the value is found then Result::Ok is returned, containing the +index of the matching element. If there are multiple matches, then any +one of the matches could be returned. The index is chosen +deterministically, but is subject to change in future versions of Rust. +If the value is not found then Result::Err is returned, containing +the index where a matching element could be inserted while maintaining +sorted order.

    +

    See also binary_search, binary_search_by, and partition_point.

    +
    Examples
    +

    Looks up a series of four elements in a slice of pairs sorted by +their second elements. The first is found, with a uniquely +determined position; the second and third are not found; the +fourth could match any position in [1, 4].

    + +
    let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
    +         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
    +         (1, 21), (2, 34), (4, 55)];
    +
    +assert_eq!(s.binary_search_by_key(&13, |&(a, b)| b),  Ok(9));
    +assert_eq!(s.binary_search_by_key(&4, |&(a, b)| b),   Err(7));
    +assert_eq!(s.binary_search_by_key(&100, |&(a, b)| b), Err(13));
    +let r = s.binary_search_by_key(&1, |&(a, b)| b);
    +assert!(match r { Ok(1..=4) => true, _ => false, });
    +
    1.30.0 · source

    pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])

    Transmute the slice to a slice of another type, ensuring alignment of the types is +maintained.

    +

    This method splits the slice into three distinct slices: prefix, correctly aligned middle +slice of a new type, and the suffix slice. How exactly the slice is split up is not +specified; the middle part may be smaller than necessary. However, if this fails to return a +maximal middle part, that is because code is running in a context where performance does not +matter, such as a sanitizer attempting to find alignment bugs. Regular code running +in a default (debug or release) execution will return a maximal middle part.

    +

    This method has no purpose when either input element T or output element U are +zero-sized and will return the original slice without splitting anything.

    +
    Safety
    +

    This method is essentially a transmute with respect to the elements in the returned +middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

    +
    Examples
    +

    Basic usage:

    + +
    unsafe {
    +    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    +    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
    +    // less_efficient_algorithm_for_bytes(prefix);
    +    // more_efficient_algorithm_for_aligned_shorts(shorts);
    +    // less_efficient_algorithm_for_bytes(suffix);
    +}
    +
    source

    pub fn as_simd<const LANES: usize>(&self) -> (&[T], &[Simd<T, LANES>], &[T])where + Simd<T, LANES>: AsRef<[T; LANES]>, + T: SimdElement, + LaneCount<LANES>: SupportedLaneCount,

    🔬This is a nightly-only experimental API. (portable_simd)

    Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.

    +

    This is a safe wrapper around slice::align_to, so has the same weak +postconditions as that method. You’re only assured that +self.len() == prefix.len() + middle.len() * LANES + suffix.len().

    +

    Notably, all of the following are possible:

    +
      +
    • prefix.len() >= LANES.
    • +
    • middle.is_empty() despite self.len() >= 3 * LANES.
    • +
    • suffix.len() >= LANES.
    • +
    +

    That said, this is a safe method, so if you’re only writing safe code, +then this can at most cause incorrect logic, not unsoundness.

    +
    Panics
    +

    This will panic if the size of the SIMD type is different from +LANES times that of the scalar.

    +

    At the time of writing, the trait restrictions on Simd<T, LANES> keeps +that from ever happening, as only power-of-two numbers of lanes are +supported. It’s possible that, in the future, those restrictions might +be lifted in a way that would make it possible to see panics from this +method for something like LANES == 3.

    +
    Examples
    +
    #![feature(portable_simd)]
    +use core::simd::SimdFloat;
    +
    +let short = &[1, 2, 3];
    +let (prefix, middle, suffix) = short.as_simd::<4>();
    +assert_eq!(middle, []); // Not enough elements for anything in the middle
    +
    +// They might be split in any possible way between prefix and suffix
    +let it = prefix.iter().chain(suffix).copied();
    +assert_eq!(it.collect::<Vec<_>>(), vec![1, 2, 3]);
    +
    +fn basic_simd_sum(x: &[f32]) -> f32 {
    +    use std::ops::Add;
    +    use std::simd::f32x4;
    +    let (prefix, middle, suffix) = x.as_simd();
    +    let sums = f32x4::from_array([
    +        prefix.iter().copied().sum(),
    +        0.0,
    +        0.0,
    +        suffix.iter().copied().sum(),
    +    ]);
    +    let sums = middle.iter().copied().fold(sums, f32x4::add);
    +    sums.reduce_sum()
    +}
    +
    +let numbers: Vec<f32> = (1..101).map(|x| x as _).collect();
    +assert_eq!(basic_simd_sum(&numbers[1..99]), 4949.0);
    +
    source

    pub fn is_sorted(&self) -> boolwhere + T: PartialOrd<T>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted.

    +

    That is, for each element a and its following element b, a <= b must hold. If the +slice yields exactly zero or one element, true is returned.

    +

    Note that if Self::Item is only PartialOrd, but not Ord, the above definition +implies that this function returns false if any two consecutive items are not +comparable.

    +
    Examples
    +
    #![feature(is_sorted)]
    +let empty: [i32; 0] = [];
    +
    +assert!([1, 2, 2, 9].is_sorted());
    +assert!(![1, 3, 2, 4].is_sorted());
    +assert!([0].is_sorted());
    +assert!(empty.is_sorted());
    +assert!(![0.0, 1.0, f32::NAN].is_sorted());
    +
    source

    pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> boolwhere + F: FnMut(&'a T, &'a T) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given comparator function.

    +

    Instead of using PartialOrd::partial_cmp, this function uses the given compare +function to determine the ordering of two elements. Apart from that, it’s equivalent to +is_sorted; see its documentation for more information.

    +
    source

    pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> boolwhere + F: FnMut(&'a T) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)

    Checks if the elements of this slice are sorted using the given key extraction function.

    +

    Instead of comparing the slice’s elements directly, this function compares the keys of the +elements, as determined by f. Apart from that, it’s equivalent to is_sorted; see its +documentation for more information.

    +
    Examples
    +
    #![feature(is_sorted)]
    +
    +assert!(["c", "bb", "aaa"].is_sorted_by_key(|s| s.len()));
    +assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));
    +
    1.52.0 · source

    pub fn partition_point<P>(&self, pred: P) -> usizewhere + P: FnMut(&T) -> bool,

    Returns the index of the partition point according to the given predicate +(the index of the first element of the second partition).

    +

    The slice is assumed to be partitioned according to the given predicate. +This means that all elements for which the predicate returns true are at the start of the slice +and all elements for which the predicate returns false are at the end. +For example, [7, 15, 3, 5, 4, 12, 6] is partitioned under the predicate x % 2 != 0 +(all odd numbers are at the start, all even at the end).

    +

    If this slice is not partitioned, the returned result is unspecified and meaningless, +as this method performs a kind of binary search.

    +

    See also binary_search, binary_search_by, and binary_search_by_key.

    +
    Examples
    +
    let v = [1, 2, 3, 3, 5, 6, 7];
    +let i = v.partition_point(|&x| x < 5);
    +
    +assert_eq!(i, 4);
    +assert!(v[..i].iter().all(|&x| x < 5));
    +assert!(v[i..].iter().all(|&x| !(x < 5)));
    +

    If all elements of the slice match the predicate, including if the slice +is empty, then the length of the slice will be returned:

    + +
    let a = [2, 4, 8];
    +assert_eq!(a.partition_point(|x| x < &100), a.len());
    +let a: [i32; 0] = [];
    +assert_eq!(a.partition_point(|x| x < &100), 0);
    +

    If you want to insert an item to a sorted vector, while maintaining +sort order:

    + +
    let mut s = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
    +let num = 42;
    +let idx = s.partition_point(|&x| x < num);
    +s.insert(idx, num);
    +assert_eq!(s, [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);
    +
    1.0.0 · source

    pub fn to_vec(&self) -> Vec<T, Global>where + T: Clone,

    Copies self into a new Vec.

    +
    Examples
    +
    let s = [10, 40, 30];
    +let x = s.to_vec();
    +// Here, `s` and `x` can be modified independently.
    +
    source

    pub fn to_vec_in<A>(&self, alloc: A) -> Vec<T, A>where + A: Allocator, + T: Clone,

    🔬This is a nightly-only experimental API. (allocator_api)

    Copies self into a new Vec with an allocator.

    +
    Examples
    +
    #![feature(allocator_api)]
    +
    +use std::alloc::System;
    +
    +let s = [10, 40, 30];
    +let x = s.to_vec_in(System);
    +// Here, `s` and `x` can be modified independently.
    +
    1.40.0 · source

    pub fn repeat(&self, n: usize) -> Vec<T, Global>where + T: Copy,

    Creates a vector by copying a slice n times.

    +
    Panics
    +

    This function will panic if the capacity would overflow.

    +
    Examples
    +

    Basic usage:

    + +
    assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
    +

    A panic upon overflow:

    + +
    // this will panic at runtime
    +b"0123456789abcdef".repeat(usize::MAX);
    +
    1.0.0 · source

    pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where + [T]: Concat<Item>, + Item: ?Sized,

    Flattens a slice of T into a single value Self::Output.

    +
    Examples
    +
    assert_eq!(["hello", "world"].concat(), "helloworld");
    +assert_eq!([[1, 2], [3, 4]].concat(), [1, 2, 3, 4]);
    +
    1.3.0 · source

    pub fn join<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].join(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);
    +assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);
    +
    1.0.0 · source

    pub fn connect<Separator>( + &self, + sep: Separator +) -> <[T] as Join<Separator>>::Output where + [T]: Join<Separator>,

    👎Deprecated since 1.3.0: renamed to join

    Flattens a slice of T into a single value Self::Output, placing a +given separator between each.

    +
    Examples
    +
    assert_eq!(["hello", "world"].connect(" "), "hello world");
    +assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    +
    1.23.0 · source

    pub fn to_ascii_uppercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII upper case equivalent.

    +

    ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, +but non-ASCII letters are unchanged.

    +

    To uppercase the value in-place, use make_ascii_uppercase.

    +
    1.23.0 · source

    pub fn to_ascii_lowercase(&self) -> Vec<u8, Global>

    Returns a vector containing a copy of this slice where each byte +is mapped to its ASCII lower case equivalent.

    +

    ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, +but non-ASCII letters are unchanged.

    +

    To lowercase the value in-place, use make_ascii_lowercase.

    +

    Trait Implementations§

    1.0.0 · source§

    impl<T, A> Deref for Vec<T, A>where + A: Allocator,

    §

    type Target = [T]

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &[T]

    Dereferences the value.
    \ No newline at end of file diff --git a/docs/ext/type.CCC.html b/docs/ext/type.CCC.html index b5481bb0f..f87c1679b 100644 --- a/docs/ext/type.CCC.html +++ b/docs/ext/type.CCC.html @@ -1,4 +1,4 @@ -CCC in ext - Rust +CCC in ext - Rust @@ -23,4 +23,44 @@ }); -

    Type Definition ext::CCC

    source ·
    pub type CCC = FiniteChainComplex<SteenrodModule>;
    \ No newline at end of file +

    Type Alias ext::CCC

    source ·
    pub type CCC = FiniteChainComplex<SteenrodModule>;

    Aliased Type§

    struct CCC {
    +    modules: Vec<Arc<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Global>, Global>,
    +    zero_module: Arc<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Global>,
    +    differentials: Vec<Arc<FullModuleHomomorphism<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Box<dyn Module<Algebra = SteenrodAlgebra>, Global>>, Global>, Global>,
    +}

    Fields§

    §modules: Vec<Arc<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Global>, Global>§zero_module: Arc<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Global>§differentials: Vec<Arc<FullModuleHomomorphism<Box<dyn Module<Algebra = SteenrodAlgebra>, Global>, Box<dyn Module<Algebra = SteenrodAlgebra>, Global>>, Global>, Global>

    Implementations§

    source§

    impl<M, F> FiniteChainComplex<M, F>where + M: Module + ZeroModule, + F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn new(modules: Vec<Arc<M>>, differentials: Vec<Arc<F>>) -> Self

    source

    pub fn ccdz(module: Arc<M>) -> Self

    source§

    impl<M, F> FiniteChainComplex<M, F>where + M: Module, + F: ModuleHomomorphism<Source = M, Target = M> + ZeroHomomorphism<M, M>,

    source

    pub fn pop(&mut self)

    source§

    impl<M: Module> FiniteChainComplex<M, FullModuleHomomorphism<M>>

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( + &self, + f: impl FnMut(&M) -> N +) -> FiniteChainComplex<N, FullModuleHomomorphism<N>>

    source§

    impl<M, F1> FiniteChainComplex<M, F1>where + M: Module, + F1: ModuleHomomorphism<Source = M, Target = M>,

    source

    pub fn augment<CC: ChainComplex<Algebra = M::Algebra>, F2: ModuleHomomorphism<Source = M, Target = CC::Module>>( + self, + target_cc: Arc<CC>, + chain_maps: Vec<Arc<F2>> +) -> FiniteAugmentedChainComplex<M, F1, F2, CC>

    Trait Implementations§

    source§

    impl<M, F> BoundedChainComplex for FiniteChainComplex<M, F>where + M: Module, + F: ModuleHomomorphism<Source = M, Target = M>,

    source§

    impl<M, F> ChainComplex for FiniteChainComplex<M, F>where + M: Module, + F: ModuleHomomorphism<Source = M, Target = M>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +computed at (s, t), and so has the differential at (s, t). In the case of a free module, +the target of the differential, namely the bidegree (s - 1, t), need not be computed, as +long as all the generators hit by the differential have already been computed.
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( + &self, + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. +This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    source§

    impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where + M: Module, + CC: ChainComplex<Algebra = M::Algebra>, + F1: ModuleHomomorphism<Source = M, Target = M>, + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn from( + c: FiniteAugmentedChainComplex<M, F1, F2, CC> +) -> FiniteChainComplex<M, F1>

    Converts to this type from the input type.
    \ No newline at end of file diff --git a/docs/ext/utils/constant.STATIC_MODULES_PATH.html b/docs/ext/utils/constant.STATIC_MODULES_PATH.html index b34b82a97..dabbc60df 100644 --- a/docs/ext/utils/constant.STATIC_MODULES_PATH.html +++ b/docs/ext/utils/constant.STATIC_MODULES_PATH.html @@ -1,4 +1,4 @@ -STATIC_MODULES_PATH in ext::utils - Rust +STATIC_MODULES_PATH in ext::utils - Rust @@ -23,4 +23,4 @@ }); -

    Constant ext::utils::STATIC_MODULES_PATH

    source ·
    const STATIC_MODULES_PATH: &str = _;
    \ No newline at end of file +

    Constant ext::utils::STATIC_MODULES_PATH

    source ·
    const STATIC_MODULES_PATH: &str = _;
    \ No newline at end of file diff --git a/docs/ext/utils/fn.construct.html b/docs/ext/utils/fn.construct.html index f1a3cd734..57a8d0e6e 100644 --- a/docs/ext/utils/fn.construct.html +++ b/docs/ext/utils/fn.construct.html @@ -1,4 +1,4 @@ -construct in ext::utils - Rust +construct in ext::utils - Rust @@ -23,19 +23,19 @@ }); -

    Function ext::utils::construct

    source ·
    pub fn construct<T, E>(
    +

    Function ext::utils::construct

    source ·
    pub fn construct<T, E>(
         module_spec: T,
    -    save_dir: Option<PathBuf>
    +    save_dir: Option<PathBuf>
     ) -> Result<QueryModuleResolution>where
    -    Error: From<E>,
    -    T: TryInto<Config, Error = E>,
    Expand description

    This constructs a resolution resolving a module according to the specifications

    + Error: From<E>, + T: TryInto<Config, Error = E>,
    Expand description

    This constructs a resolution resolving a module according to the specifications

    Arguments

    \ No newline at end of file diff --git a/docs/ext/utils/struct.Timer.html b/docs/ext/utils/struct.Timer.html index 85ba379c5..949048a29 100644 --- a/docs/ext/utils/struct.Timer.html +++ b/docs/ext/utils/struct.Timer.html @@ -1,4 +1,4 @@ -Timer in ext::utils - Rust +Timer in ext::utils - Rust @@ -23,20 +23,20 @@ }); -

    Struct ext::utils::Timer

    source ·
    pub struct Timer(Instant);
    Expand description

    If the logging feature is enabled, this can be used to time how long an operation takes. +

    Struct ext::utils::Timer

    source ·
    pub struct Timer(Instant);
    Expand description

    If the logging feature is enabled, this can be used to time how long an operation takes. If the logging features is disabled, this is a no-op.

    Example

    let timer = Timer::start();
     // slow_function();
     timer.end(format_args!("Ran slow_function"));
    -

    Tuple Fields§

    §0: Instant

    Implementations§

    source§

    impl Timer

    source

    pub fn start() -> Self

    source

    pub fn end(self, msg: Arguments<'_>)

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Timer

    §

    impl Send for Timer

    §

    impl Sync for Timer

    §

    impl Unpin for Timer

    §

    impl UnwindSafe for Timer

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Tuple Fields§

    §0: Instant

    Implementations§

    source§

    impl Timer

    source

    pub fn start() -> Self

    source

    pub fn end(self, msg: Arguments<'_>)

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Timer

    §

    impl Send for Timer

    §

    impl Sync for Timer

    §

    impl Unpin for Timer

    §

    impl UnwindSafe for Timer

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/ext/utils/type.QueryModuleResolution.html b/docs/ext/utils/type.QueryModuleResolution.html index 30350479f..e56932062 100644 --- a/docs/ext/utils/type.QueryModuleResolution.html +++ b/docs/ext/utils/type.QueryModuleResolution.html @@ -1,4 +1,4 @@ -QueryModuleResolution in ext::utils - Rust +QueryModuleResolution in ext::utils - Rust @@ -23,8 +23,55 @@ }); -

    Type Definition ext::utils::QueryModuleResolution

    source ·
    pub type QueryModuleResolution = Resolution<FDModule<MilnorAlgebra>>;
    Expand description

    The type returned by query_module. The value of this type depends on whether +

    Type Alias ext::utils::QueryModuleResolution

    source ·
    pub type QueryModuleResolution = Resolution<FDModule<MilnorAlgebra>>;
    Expand description

    The type returned by query_module. The value of this type depends on whether nassau is enabled. In any case, it is an augmented free chain complex over either SteenrodAlgebra or MilnorAlgebra and supports the compute_through_stem function.

    -
    \ No newline at end of file +

    Aliased Type§

    struct QueryModuleResolution {
    +    lock: Mutex<()>,
    +    name: String,
    +    max_degree: i32,
    +    modules: OnceVec<Arc<MuFreeModule<false, MilnorAlgebra>, Global>>,
    +    zero_module: Arc<MuFreeModule<false, MilnorAlgebra>, Global>,
    +    differentials: OnceVec<Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, MilnorAlgebra>>, Global>>,
    +    target: Arc<FiniteChainComplex<FiniteDimensionalModule<MilnorAlgebra>, FullModuleHomomorphism<FiniteDimensionalModule<MilnorAlgebra>, FiniteDimensionalModule<MilnorAlgebra>>>, Global>,
    +    chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<false, FiniteDimensionalModule<MilnorAlgebra>>, Global>>,
    +    save_dir: Option<PathBuf>,
    +}

    Fields§

    §lock: Mutex<()>§name: String§max_degree: i32§modules: OnceVec<Arc<MuFreeModule<false, MilnorAlgebra>, Global>>§zero_module: Arc<MuFreeModule<false, MilnorAlgebra>, Global>§differentials: OnceVec<Arc<MuFreeModuleHomomorphism<false, MuFreeModule<false, MilnorAlgebra>>, Global>>§target: Arc<FiniteChainComplex<FiniteDimensionalModule<MilnorAlgebra>, FullModuleHomomorphism<FiniteDimensionalModule<MilnorAlgebra>, FiniteDimensionalModule<MilnorAlgebra>>>, Global>§chain_maps: OnceVec<Arc<MuFreeModuleHomomorphism<false, FiniteDimensionalModule<MilnorAlgebra>>, Global>>§save_dir: Option<PathBuf>

    Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> Resolution<M>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn name(&self) -> &str

    source

    pub fn set_name(&mut self, name: String)

    source

    pub fn new(module: Arc<M>) -> Self

    source

    pub fn new_with_save(module: Arc<M>, save_dir: Option<PathBuf>) -> Result<Self>

    source

    fn extend_through_degree(&self, max_s: u32)

    This function prepares the Resolution object to perform computations up to the +specified s degree. It does not perform any computations by itself. It simply lengthens +the OnceVecs modules, chain_maps, etc. to the right length.

    +
    source

    fn write_qi( + f: &mut Option<impl Write>, + b: Bidegree, + subalgebra: &MilnorSubalgebra, + scratch: &mut FpVector, + signature: &[PPartEntry], + next_mask: &[usize], + full_matrix: &Matrix, + masked_matrix: &AugmentedMatrix<2> +) -> Result<()>

    source

    fn write_differential( + &self, + b: Bidegree, + num_new_gens: usize, + target_dim: usize +) -> Result<()>

    source

    fn step_resolution_with_subalgebra( + &self, + b: Bidegree, + subalgebra: MilnorSubalgebra +) -> Result<()>

    source

    fn step0(&self, t: i32)

    Step resolution for s = 0

    +
    source

    fn step1(&self, t: i32) -> Result<()>

    Step resolution for s = 1

    +
    source

    fn step_resolution_with_result(&self, b: Bidegree) -> Result<()>

    source

    fn step_resolution(&self, b: Bidegree)

    source

    pub fn compute_through_stem(&self, max: Bidegree)

    This function resolves up till a fixed stem instead of a fixed t.

    +

    Trait Implementations§

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> AugmentedChainComplex for Resolution<M>

    source§

    impl<M: ZeroModule<Algebra = MilnorAlgebra>> ChainComplex for Resolution<M>

    §

    type Algebra = MilnorAlgebra

    §

    type Module = MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>

    §

    type Homomorphism = MuFreeModuleHomomorphism<false, MuFreeModule<false, <Resolution<M> as ChainComplex>::Algebra>>

    source§

    fn algebra(&self) -> Arc<Self::Algebra>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +computed at (s, t), and so has the differential at (s, t). In the case of a free module, +the target of the differential, namely the bidegree (s - 1, t), need not be computed, as +long as all the generators hit by the differential have already been computed.
    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, max: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn apply_quasi_inverse<T, S>( + &self, + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. +This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    \ No newline at end of file diff --git a/docs/ext/yoneda/constant.PENALTY_UNIT.html b/docs/ext/yoneda/constant.PENALTY_UNIT.html index 15ee5a5ef..d469196d8 100644 --- a/docs/ext/yoneda/constant.PENALTY_UNIT.html +++ b/docs/ext/yoneda/constant.PENALTY_UNIT.html @@ -1,4 +1,4 @@ -PENALTY_UNIT in ext::yoneda - Rust +PENALTY_UNIT in ext::yoneda - Rust @@ -23,4 +23,4 @@ }); -

    Constant ext::yoneda::PENALTY_UNIT

    source ·
    const PENALTY_UNIT: i32 = 10000;
    \ No newline at end of file +

    Constant ext::yoneda::PENALTY_UNIT

    source ·
    const PENALTY_UNIT: i32 = 10000;
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.compute_kernel_image.html b/docs/ext/yoneda/fn.compute_kernel_image.html index 974208780..0e27a3af3 100644 --- a/docs/ext/yoneda/fn.compute_kernel_image.html +++ b/docs/ext/yoneda/fn.compute_kernel_image.html @@ -1,4 +1,4 @@ -compute_kernel_image in ext::yoneda - Rust +compute_kernel_image in ext::yoneda - Rust @@ -23,13 +23,13 @@ }); -
    fn compute_kernel_image<M: Module, F: ModuleHomomorphism, G: ModuleHomomorphism>(
    +
    fn compute_kernel_image<M: Module, F: ModuleHomomorphism, G: ModuleHomomorphism>(
         source: &QuotientModule<M>,
    -    augmentation_map: Option<&F>,
    -    preserve_map: Option<&G>,
    -    keep: Option<&Subspace>,
    -    t: i32
    -) -> (Matrix, Matrix)where
    +    augmentation_map: Option<&F>,
    +    preserve_map: Option<&G>,
    +    keep: Option<&Subspace>,
    +    t: i32
    +) -> (Matrix, Matrix)where
         M::Algebra: GeneratedAlgebra,
    Expand description

    This function does the following computation:

    Given the source module source and a subspace keep, the function returns the subspace of all elements in source of degree t that are killed by all non-trivial actions of the algebra, diff --git a/docs/ext/yoneda/fn.operation_drop.html b/docs/ext/yoneda/fn.operation_drop.html index ccf9d5869..9d3fb14f6 100644 --- a/docs/ext/yoneda/fn.operation_drop.html +++ b/docs/ext/yoneda/fn.operation_drop.html @@ -1,4 +1,4 @@ -operation_drop in ext::yoneda - Rust +operation_drop in ext::yoneda - Rust @@ -23,4 +23,4 @@ }); -

    Function ext::yoneda::operation_drop

    source ·
    fn operation_drop(algebra: &AdemAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file +

    Function ext::yoneda::operation_drop

    source ·
    fn operation_drop(algebra: &AdemAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.rate_adem_operation.html b/docs/ext/yoneda/fn.rate_adem_operation.html index 07dbcebd7..636e5e6f5 100644 --- a/docs/ext/yoneda/fn.rate_adem_operation.html +++ b/docs/ext/yoneda/fn.rate_adem_operation.html @@ -1,4 +1,4 @@ -rate_adem_operation in ext::yoneda - Rust +rate_adem_operation in ext::yoneda - Rust @@ -23,4 +23,4 @@ }); -
    fn rate_adem_operation(algebra: &AdemAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file +
    fn rate_adem_operation(algebra: &AdemAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.rate_milnor_operation.html b/docs/ext/yoneda/fn.rate_milnor_operation.html index 4ac24aadc..0982d44be 100644 --- a/docs/ext/yoneda/fn.rate_milnor_operation.html +++ b/docs/ext/yoneda/fn.rate_milnor_operation.html @@ -1,4 +1,4 @@ -rate_milnor_operation in ext::yoneda - Rust +rate_milnor_operation in ext::yoneda - Rust @@ -23,4 +23,4 @@ }); -
    fn rate_milnor_operation(algebra: &MilnorAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file +
    fn rate_milnor_operation(algebra: &MilnorAlgebra, deg: i32, idx: usize) -> i32
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.rate_operation.html b/docs/ext/yoneda/fn.rate_operation.html index 6059a03d0..3ef923ce8 100644 --- a/docs/ext/yoneda/fn.rate_operation.html +++ b/docs/ext/yoneda/fn.rate_operation.html @@ -1,4 +1,4 @@ -rate_operation in ext::yoneda - Rust +rate_operation in ext::yoneda - Rust @@ -23,8 +23,8 @@ }); -

    Function ext::yoneda::rate_operation

    source ·
    fn rate_operation<A: Algebra>(
    -    algebra: &Arc<A>,
    -    op_deg: i32,
    -    op_idx: usize
    -) -> i32
    \ No newline at end of file +

    Function ext::yoneda::rate_operation

    source ·
    fn rate_operation<A: Algebra>(
    +    algebra: &Arc<A>,
    +    op_deg: i32,
    +    op_idx: usize
    +) -> i32
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.split_mut_borrow.html b/docs/ext/yoneda/fn.split_mut_borrow.html index 82c0c7bd7..24b880b18 100644 --- a/docs/ext/yoneda/fn.split_mut_borrow.html +++ b/docs/ext/yoneda/fn.split_mut_borrow.html @@ -1,4 +1,4 @@ -split_mut_borrow in ext::yoneda - Rust +split_mut_borrow in ext::yoneda - Rust @@ -23,4 +23,4 @@ }); -

    Function ext::yoneda::split_mut_borrow

    source ·
    fn split_mut_borrow<T>(v: &mut [T], i: usize, j: usize) -> (&mut T, &mut T)
    \ No newline at end of file +

    Function ext::yoneda::split_mut_borrow

    source ·
    fn split_mut_borrow<T>(v: &mut [T], i: usize, j: usize) -> (&mut T, &mut T)
    \ No newline at end of file diff --git a/docs/ext/yoneda/fn.yoneda_representative.html b/docs/ext/yoneda/fn.yoneda_representative.html index ae2cc6460..4f2a9458c 100644 --- a/docs/ext/yoneda/fn.yoneda_representative.html +++ b/docs/ext/yoneda/fn.yoneda_representative.html @@ -1,4 +1,4 @@ -yoneda_representative in ext::yoneda - Rust +yoneda_representative in ext::yoneda - Rust @@ -23,8 +23,8 @@ }); -
    pub fn yoneda_representative<CC>(
    -    cc: Arc<CC>,
    +
    pub fn yoneda_representative<CC>(
    +    cc: Arc<CC>,
         map: ChainMap<FreeModuleHomomorphism<impl Module<Algebra = CC::Algebra>>>
     ) -> Yoneda<CC>where
         CC: FreeChainComplex + AugmentedChainComplex<ChainMap = FreeModuleHomomorphism<<<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>>,
    diff --git a/docs/ext/yoneda/fn.yoneda_representative_element.html b/docs/ext/yoneda/fn.yoneda_representative_element.html
    index 35e839e85..bda695f95 100644
    --- a/docs/ext/yoneda/fn.yoneda_representative_element.html
    +++ b/docs/ext/yoneda/fn.yoneda_representative_element.html
    @@ -1,4 +1,4 @@
    -yoneda_representative_element in ext::yoneda - Rust
    +yoneda_representative_element in ext::yoneda - Rust
     
     
     
    @@ -23,10 +23,10 @@
         });
     
     
    -
    pub fn yoneda_representative_element<CC>(
    -    cc: Arc<CC>,
    -    b: Bidegree,
    -    class: &[u32]
    +
    pub fn yoneda_representative_element<CC>(
    +    cc: Arc<CC>,
    +    b: Bidegree,
    +    class: &[u32]
     ) -> Yoneda<CC>where
         CC: FreeChainComplex + AugmentedChainComplex<ChainMap = FreeModuleHomomorphism<<<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>>,
         CC::TargetComplex: BoundedChainComplex,
    diff --git a/docs/ext/yoneda/fn.yoneda_representative_with_strategy.html b/docs/ext/yoneda/fn.yoneda_representative_with_strategy.html
    index d69468465..67f77a256 100644
    --- a/docs/ext/yoneda/fn.yoneda_representative_with_strategy.html
    +++ b/docs/ext/yoneda/fn.yoneda_representative_with_strategy.html
    @@ -1,4 +1,4 @@
    -yoneda_representative_with_strategy in ext::yoneda - Rust
    +yoneda_representative_with_strategy in ext::yoneda - Rust
     
     
     
    @@ -23,10 +23,10 @@
         });
     
     
    -
    pub fn yoneda_representative_with_strategy<CC>(
    -    cc: Arc<CC>,
    +
    pub fn yoneda_representative_with_strategy<CC>(
    +    cc: Arc<CC>,
         map: ChainMap<FreeModuleHomomorphism<impl Module<Algebra = CC::Algebra>>>,
    -    strategy: impl Fn(&CC::Module, &Subspace, i32, usize) -> i32
    +    strategy: impl Fn(&CC::Module, &Subspace, i32, usize) -> i32
     ) -> Yoneda<CC>where
         CC: FreeChainComplex + AugmentedChainComplex<ChainMap = FreeModuleHomomorphism<<<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>>,
         CC::TargetComplex: BoundedChainComplex,
    diff --git a/docs/ext/yoneda/index.html b/docs/ext/yoneda/index.html
    index 90dc9a27e..74365f1cf 100644
    --- a/docs/ext/yoneda/index.html
    +++ b/docs/ext/yoneda/index.html
    @@ -1,4 +1,4 @@
    -ext::yoneda - Rust
    +ext::yoneda - Rust
     
     
     
    @@ -23,4 +23,4 @@
         });
     
     
    -

    Module ext::yoneda

    source ·

    Constants

    Functions

    Type Definitions

    \ No newline at end of file +

    Module ext::yoneda

    source ·

    Constants

    Functions

    Type Aliases

    \ No newline at end of file diff --git a/docs/ext/yoneda/type.Yoneda.html b/docs/ext/yoneda/type.Yoneda.html index eb53d103c..cab89a056 100644 --- a/docs/ext/yoneda/type.Yoneda.html +++ b/docs/ext/yoneda/type.Yoneda.html @@ -1,4 +1,4 @@ -Yoneda in ext::yoneda - Rust +Yoneda in ext::yoneda - Rust @@ -23,4 +23,39 @@ }); -
    \ No newline at end of file +

    Type Alias ext::yoneda::Yoneda

    source ·
    pub type Yoneda<CC> = FiniteAugmentedChainComplex<FDModule<<CC as ChainComplex>::Algebra>, FullModuleHomomorphism<FDModule<<CC as ChainComplex>::Algebra>>, FullModuleHomomorphism<FDModule<<CC as ChainComplex>::Algebra>, <<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>, <CC as AugmentedChainComplex>::TargetComplex>;

    Aliased Type§

    struct Yoneda<CC> {
    +    cc: FiniteChainComplex<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, FullModuleHomomorphism<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, FiniteDimensionalModule<<CC as ChainComplex>::Algebra>>>,
    +    target_cc: Arc<<CC as AugmentedChainComplex>::TargetComplex, Global>,
    +    chain_maps: Vec<Arc<FullModuleHomomorphism<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, <<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>, Global>, Global>,
    +}

    Fields§

    §cc: FiniteChainComplex<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, FullModuleHomomorphism<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, FiniteDimensionalModule<<CC as ChainComplex>::Algebra>>>§target_cc: Arc<<CC as AugmentedChainComplex>::TargetComplex, Global>§chain_maps: Vec<Arc<FullModuleHomomorphism<FiniteDimensionalModule<<CC as ChainComplex>::Algebra>, <<CC as AugmentedChainComplex>::TargetComplex as ChainComplex>::Module>, Global>, Global>

    Implementations§

    source§

    impl<M, CC> FiniteAugmentedChainComplex<M, FullModuleHomomorphism<M>, FullModuleHomomorphism<M, CC::Module>, CC>where + M: Module, + CC: ChainComplex<Algebra = M::Algebra>,

    source

    pub fn map<N: Module<Algebra = M::Algebra>>( + &self, + f: impl FnMut(&M) -> N +) -> FiniteAugmentedChainComplex<N, FullModuleHomomorphism<N>, FullModuleHomomorphism<N, CC::Module>, CC>

    Trait Implementations§

    source§

    impl<M, F1, F2, CC> AugmentedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + M: Module, + CC: ChainComplex<Algebra = M::Algebra>, + F1: ModuleHomomorphism<Source = M, Target = M>, + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    fn chain_map(&self, s: u32) -> Arc<Self::ChainMap>

    This currently crashes if s is greater than the s degree of the class this came from.

    +
    §

    type TargetComplex = CC

    §

    type ChainMap = F2

    source§

    fn target(&self) -> Arc<Self::TargetComplex>

    source§

    impl<M, F1, F2, CC> BoundedChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + M: Module, + CC: ChainComplex<Algebra = M::Algebra>, + F1: ModuleHomomorphism<Source = M, Target = M>, + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    source§

    impl<M, F1, F2, CC> ChainComplex for FiniteAugmentedChainComplex<M, F1, F2, CC>where + M: Module, + CC: ChainComplex<Algebra = M::Algebra>, + F1: ModuleHomomorphism<Source = M, Target = M>, + F2: ModuleHomomorphism<Source = M, Target = CC::Module>,

    §

    type Algebra = <M as Module>::Algebra

    §

    type Module = M

    §

    type Homomorphism = F1

    source§

    fn algebra(&self) -> Arc<M::Algebra>

    source§

    fn min_degree(&self) -> i32

    source§

    fn has_computed_bidegree(&self, b: Bidegree) -> bool

    If the complex has been computed at bidegree (s, t). This means the module has been +computed at (s, t), and so has the differential at (s, t). In the case of a free module, +the target of the differential, namely the bidegree (s - 1, t), need not be computed, as +long as all the generators hit by the differential have already been computed.
    source§

    fn zero_module(&self) -> Arc<Self::Module>

    source§

    fn module(&self, s: u32) -> Arc<Self::Module>

    source§

    fn differential(&self, s: u32) -> Arc<Self::Homomorphism>

    This returns the differential starting from the sth module.
    source§

    fn compute_through_bidegree(&self, b: Bidegree)

    Ensure all bidegrees less than or equal to (s, t) have been computed
    source§

    fn next_homological_degree(&self) -> u32

    The first s such that self.module(s) is not defined.
    source§

    fn prime(&self) -> ValidPrime

    source§

    fn iter_stem(&self) -> StemIterator<'_, Self>

    Iterate through all defined bidegrees in increasing order of stem. The return values are of +the form (s, n, t).
    source§

    fn apply_quasi_inverse<T, S>( + &self, + results: &mut [T], + b: Bidegree, + inputs: &[S] +) -> boolwhere + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Apply the quasi-inverse of the (s, t)th differential to the list of inputs and results. +This defaults to applying self.differentials(s).quasi_inverse(t), but in some cases +the quasi-inverse might be stored separately on disk. Read more
    source§

    fn save_dir(&self) -> Option<&Path>

    A directory used to save information about the chain complex.
    source§

    fn save_file(&self, kind: SaveKind, b: Bidegree) -> SaveFile<Self::Algebra>

    Get the save file of a bidegree
    \ No newline at end of file diff --git a/docs/ext_m_n/all.html b/docs/ext_m_n/all.html index 167eb64b5..eda24e1bf 100644 --- a/docs/ext_m_n/all.html +++ b/docs/ext_m_n/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/ext_m_n/index.html b/docs/ext_m_n/index.html index f15f4bf51..8df91edfd 100644 --- a/docs/ext_m_n/index.html +++ b/docs/ext_m_n/index.html @@ -1,4 +1,4 @@ -ext_m_n - Rust +ext_m_n - Rust @@ -23,4 +23,4 @@ }); -

    Crate ext_m_n

    source ·
    \ No newline at end of file +

    Crate ext_m_n

    source ·
    \ No newline at end of file diff --git a/docs/filtration_one/all.html b/docs/filtration_one/all.html index 6c1dc96cf..d17553dd6 100644 --- a/docs/filtration_one/all.html +++ b/docs/filtration_one/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/filtration_one/index.html b/docs/filtration_one/index.html index 807c858f4..c05a8dbe9 100644 --- a/docs/filtration_one/index.html +++ b/docs/filtration_one/index.html @@ -1,4 +1,4 @@ -filtration_one - Rust +filtration_one - Rust @@ -23,7 +23,7 @@ }); -

    Crate filtration_one

    source ·
    Expand description

    This computes all available filtration one products for a module. This only works at the prime +

    Crate filtration_one

    source ·
    Expand description

    This computes all available filtration one products for a module. This only works at the prime 2 for the moment.

    We omit outputs where the target bidegree is zero (or not yet computed)

    \ No newline at end of file diff --git a/docs/fp/all.html b/docs/fp/all.html index 881781768..a8b36e3e9 100644 --- a/docs/fp/all.html +++ b/docs/fp/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    Structs

    Enums

    Traits

    Macros

    Functions

    Type Definitions

    Statics

    Constants

    \ No newline at end of file +

    List of all items

    Structs

    Enums

    Traits

    Macros

    Functions

    Type Aliases

    Statics

    Constants

    \ No newline at end of file diff --git a/docs/fp/constant.MAX_MULTINOMIAL_LEN.html b/docs/fp/constant.MAX_MULTINOMIAL_LEN.html index 13618c88f..c3c15aeb6 100644 --- a/docs/fp/constant.MAX_MULTINOMIAL_LEN.html +++ b/docs/fp/constant.MAX_MULTINOMIAL_LEN.html @@ -1,4 +1,4 @@ -MAX_MULTINOMIAL_LEN in fp - Rust +MAX_MULTINOMIAL_LEN in fp - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::MAX_MULTINOMIAL_LEN

    source ·
    pub const MAX_MULTINOMIAL_LEN: usize = 10;
    \ No newline at end of file +

    Constant fp::MAX_MULTINOMIAL_LEN

    source ·
    pub const MAX_MULTINOMIAL_LEN: usize = 10;
    \ No newline at end of file diff --git a/docs/fp/constant.NUM_PRIMES.html b/docs/fp/constant.NUM_PRIMES.html index ca3d523c3..eda038085 100644 --- a/docs/fp/constant.NUM_PRIMES.html +++ b/docs/fp/constant.NUM_PRIMES.html @@ -1,4 +1,4 @@ -NUM_PRIMES in fp - Rust +NUM_PRIMES in fp - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::NUM_PRIMES

    source ·
    pub const NUM_PRIMES: usize = 8;
    Expand description

    The number of primes that are supported.

    +

    Constant fp::NUM_PRIMES

    source ·
    pub const NUM_PRIMES: usize = 8;
    Expand description

    The number of primes that are supported.

    \ No newline at end of file diff --git a/docs/fp/constant.ODD_PRIMES.html b/docs/fp/constant.ODD_PRIMES.html index 03b96c7e8..6b9f1fd0c 100644 --- a/docs/fp/constant.ODD_PRIMES.html +++ b/docs/fp/constant.ODD_PRIMES.html @@ -1,4 +1,4 @@ -ODD_PRIMES in fp - Rust +ODD_PRIMES in fp - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::ODD_PRIMES

    source ·
    pub const ODD_PRIMES: bool = true;
    \ No newline at end of file +

    Constant fp::ODD_PRIMES

    source ·
    pub const ODD_PRIMES: bool = true;
    \ No newline at end of file diff --git a/docs/fp/constant.PRIMES.html b/docs/fp/constant.PRIMES.html index 9f566768d..b39074ca6 100644 --- a/docs/fp/constant.PRIMES.html +++ b/docs/fp/constant.PRIMES.html @@ -1,4 +1,4 @@ -PRIMES in fp - Rust +PRIMES in fp - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::PRIMES

    source ·
    pub const PRIMES: [u32; 8];
    Expand description

    An array containing the first NUM_PRIMES prime numbers.

    +

    Constant fp::PRIMES

    source ·
    pub const PRIMES: [u32; 8];
    Expand description

    An array containing the first NUM_PRIMES prime numbers.

    \ No newline at end of file diff --git a/docs/fp/constant.PRIME_TO_INDEX_MAP.html b/docs/fp/constant.PRIME_TO_INDEX_MAP.html index b1d8c035e..4eebfd555 100644 --- a/docs/fp/constant.PRIME_TO_INDEX_MAP.html +++ b/docs/fp/constant.PRIME_TO_INDEX_MAP.html @@ -1,4 +1,4 @@ -PRIME_TO_INDEX_MAP in fp - Rust +PRIME_TO_INDEX_MAP in fp - Rust @@ -23,6 +23,6 @@ }); -

    Constant fp::PRIME_TO_INDEX_MAP

    source ·
    pub const PRIME_TO_INDEX_MAP: [usize; 20];
    Expand description

    For any integer i less than or equal to MAX_PRIME, PRIME_TO_INDEX_MAP[i] is +

    Constant fp::PRIME_TO_INDEX_MAP

    source ·
    pub const PRIME_TO_INDEX_MAP: [usize; 20];
    Expand description

    For any integer i less than or equal to MAX_PRIME, PRIME_TO_INDEX_MAP[i] is the index of i in PRIMES if i is prime; otherwise, it is NOT_A_PRIME.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.BINOMIAL4_TABLE.html b/docs/fp/constants/constant.BINOMIAL4_TABLE.html index 2e695a598..f6249332d 100644 --- a/docs/fp/constants/constant.BINOMIAL4_TABLE.html +++ b/docs/fp/constants/constant.BINOMIAL4_TABLE.html @@ -1,4 +1,4 @@ -BINOMIAL4_TABLE in fp::constants - Rust +BINOMIAL4_TABLE in fp::constants - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::constants::BINOMIAL4_TABLE

    source ·
    pub(crate) const BINOMIAL4_TABLE: [[u32; 50]; 50];
    \ No newline at end of file +

    Constant fp::constants::BINOMIAL4_TABLE

    source ·
    pub(crate) const BINOMIAL4_TABLE: [[u32; 50]; 50];
    \ No newline at end of file diff --git a/docs/fp/constants/constant.BINOMIAL4_TABLE_SIZE.html b/docs/fp/constants/constant.BINOMIAL4_TABLE_SIZE.html index 47cbedc81..c27a7393d 100644 --- a/docs/fp/constants/constant.BINOMIAL4_TABLE_SIZE.html +++ b/docs/fp/constants/constant.BINOMIAL4_TABLE_SIZE.html @@ -1,4 +1,4 @@ -BINOMIAL4_TABLE_SIZE in fp::constants - Rust +BINOMIAL4_TABLE_SIZE in fp::constants - Rust @@ -23,4 +23,4 @@ }); -
    pub(crate) const BINOMIAL4_TABLE_SIZE: usize = 50;
    \ No newline at end of file +
    pub(crate) const BINOMIAL4_TABLE_SIZE: usize = 50;
    \ No newline at end of file diff --git a/docs/fp/constants/constant.BITS_PER_LIMB.html b/docs/fp/constants/constant.BITS_PER_LIMB.html index 536318ac8..c1dac8e0a 100644 --- a/docs/fp/constants/constant.BITS_PER_LIMB.html +++ b/docs/fp/constants/constant.BITS_PER_LIMB.html @@ -1,4 +1,4 @@ -BITS_PER_LIMB in fp::constants - Rust +BITS_PER_LIMB in fp::constants - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::constants::BITS_PER_LIMB

    source ·
    pub const BITS_PER_LIMB: usize = 64;
    Expand description

    The number of bits each Limb occupies.

    +

    Constant fp::constants::BITS_PER_LIMB

    source ·
    pub const BITS_PER_LIMB: usize = 64;
    Expand description

    The number of bits each Limb occupies.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.BYTES_PER_LIMB.html b/docs/fp/constants/constant.BYTES_PER_LIMB.html index 16ab8175b..0e5204de9 100644 --- a/docs/fp/constants/constant.BYTES_PER_LIMB.html +++ b/docs/fp/constants/constant.BYTES_PER_LIMB.html @@ -1,4 +1,4 @@ -BYTES_PER_LIMB in fp::constants - Rust +BYTES_PER_LIMB in fp::constants - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::constants::BYTES_PER_LIMB

    source ·
    pub const BYTES_PER_LIMB: usize = 8;
    Expand description

    The number of bytes each Limb occupies.

    +

    Constant fp::constants::BYTES_PER_LIMB

    source ·
    pub const BYTES_PER_LIMB: usize = 8;
    Expand description

    The number of bytes each Limb occupies.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.INVERSE_TABLE.html b/docs/fp/constants/constant.INVERSE_TABLE.html index 1324d64c1..ab3707f69 100644 --- a/docs/fp/constants/constant.INVERSE_TABLE.html +++ b/docs/fp/constants/constant.INVERSE_TABLE.html @@ -1,4 +1,4 @@ -INVERSE_TABLE in fp::constants - Rust +INVERSE_TABLE in fp::constants - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::constants::INVERSE_TABLE

    source ·
    pub(crate) const INVERSE_TABLE: [[u32; 19]; 8];
    \ No newline at end of file +

    Constant fp::constants::INVERSE_TABLE

    source ·
    pub(crate) const INVERSE_TABLE: [[u32; 19]; 8];
    \ No newline at end of file diff --git a/docs/fp/constants/constant.MAX_MULTINOMIAL_LEN.html b/docs/fp/constants/constant.MAX_MULTINOMIAL_LEN.html index 3ccdc0e1e..f4a6d8217 100644 --- a/docs/fp/constants/constant.MAX_MULTINOMIAL_LEN.html +++ b/docs/fp/constants/constant.MAX_MULTINOMIAL_LEN.html @@ -1,4 +1,4 @@ -MAX_MULTINOMIAL_LEN in fp::constants - Rust +MAX_MULTINOMIAL_LEN in fp::constants - Rust @@ -23,4 +23,4 @@ }); -
    pub const MAX_MULTINOMIAL_LEN: usize = 10;
    \ No newline at end of file +
    pub const MAX_MULTINOMIAL_LEN: usize = 10;
    \ No newline at end of file diff --git a/docs/fp/constants/constant.MAX_PRIME.html b/docs/fp/constants/constant.MAX_PRIME.html index 076727dd7..bf2c3fecc 100644 --- a/docs/fp/constants/constant.MAX_PRIME.html +++ b/docs/fp/constants/constant.MAX_PRIME.html @@ -1,4 +1,4 @@ -MAX_PRIME in fp::constants - Rust +MAX_PRIME in fp::constants - Rust @@ -23,6 +23,6 @@ }); -

    Constant fp::constants::MAX_PRIME

    source ·
    pub const MAX_PRIME: usize = 19;
    Expand description

    The MAX_PRIMEth prime number. Constructing a ValidPrime using any number larger than +

    Constant fp::constants::MAX_PRIME

    source ·
    pub const MAX_PRIME: usize = 19;
    Expand description

    The MAX_PRIMEth prime number. Constructing a ValidPrime using any number larger than this value will cause a panic.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.NOT_A_PRIME.html b/docs/fp/constants/constant.NOT_A_PRIME.html index 10a1819a1..c0373aff3 100644 --- a/docs/fp/constants/constant.NOT_A_PRIME.html +++ b/docs/fp/constants/constant.NOT_A_PRIME.html @@ -1,4 +1,4 @@ -NOT_A_PRIME in fp::constants - Rust +NOT_A_PRIME in fp::constants - Rust @@ -23,6 +23,6 @@ }); -

    Constant fp::constants::NOT_A_PRIME

    source ·
    pub const NOT_A_PRIME: usize = 4294967295;
    Expand description

    A sentinel value. PRIME_TO_INDEX_MAP[i] == NOT_A_PRIME if and only if i is not +

    Constant fp::constants::NOT_A_PRIME

    source ·
    pub const NOT_A_PRIME: usize = 4294967295;
    Expand description

    A sentinel value. PRIME_TO_INDEX_MAP[i] == NOT_A_PRIME if and only if i is not a prime number.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.NUM_PRIMES.html b/docs/fp/constants/constant.NUM_PRIMES.html index 286445f39..c6e68caa6 100644 --- a/docs/fp/constants/constant.NUM_PRIMES.html +++ b/docs/fp/constants/constant.NUM_PRIMES.html @@ -1,4 +1,4 @@ -NUM_PRIMES in fp::constants - Rust +NUM_PRIMES in fp::constants - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::constants::NUM_PRIMES

    source ·
    pub const NUM_PRIMES: usize = 8;
    Expand description

    The number of primes that are supported.

    +

    Constant fp::constants::NUM_PRIMES

    source ·
    pub const NUM_PRIMES: usize = 8;
    Expand description

    The number of primes that are supported.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.PRIMES.html b/docs/fp/constants/constant.PRIMES.html index 5c87dadcb..ec4a8d847 100644 --- a/docs/fp/constants/constant.PRIMES.html +++ b/docs/fp/constants/constant.PRIMES.html @@ -1,4 +1,4 @@ -PRIMES in fp::constants - Rust +PRIMES in fp::constants - Rust @@ -23,5 +23,5 @@ }); -

    Constant fp::constants::PRIMES

    source ·
    pub const PRIMES: [u32; 8];
    Expand description

    An array containing the first NUM_PRIMES prime numbers.

    +

    Constant fp::constants::PRIMES

    source ·
    pub const PRIMES: [u32; 8];
    Expand description

    An array containing the first NUM_PRIMES prime numbers.

    \ No newline at end of file diff --git a/docs/fp/constants/constant.PRIME_TO_INDEX_MAP.html b/docs/fp/constants/constant.PRIME_TO_INDEX_MAP.html index b75aa3769..46e1c54ae 100644 --- a/docs/fp/constants/constant.PRIME_TO_INDEX_MAP.html +++ b/docs/fp/constants/constant.PRIME_TO_INDEX_MAP.html @@ -1,4 +1,4 @@ -PRIME_TO_INDEX_MAP in fp::constants - Rust +PRIME_TO_INDEX_MAP in fp::constants - Rust @@ -23,6 +23,6 @@ }); -
    pub const PRIME_TO_INDEX_MAP: [usize; 20];
    Expand description

    For any integer i less than or equal to MAX_PRIME, PRIME_TO_INDEX_MAP[i] is +

    pub const PRIME_TO_INDEX_MAP: [usize; 20];
    Expand description

    For any integer i less than or equal to MAX_PRIME, PRIME_TO_INDEX_MAP[i] is the index of i in PRIMES if i is prime; otherwise, it is NOT_A_PRIME.

    \ No newline at end of file diff --git a/docs/fp/constants/index.html b/docs/fp/constants/index.html index 15ff70a9d..c368cc19a 100644 --- a/docs/fp/constants/index.html +++ b/docs/fp/constants/index.html @@ -1,4 +1,4 @@ -fp::constants - Rust +fp::constants - Rust @@ -23,7 +23,7 @@ }); -

    Module fp::constants

    source ·

    Macros

    Constants

    Statics

    Type Aliases

    \ No newline at end of file diff --git a/docs/fp/constants/macro.populate_binomial_table.html b/docs/fp/constants/macro.populate_binomial_table.html index 0b3bae4b5..7f1e6102f 100644 --- a/docs/fp/constants/macro.populate_binomial_table.html +++ b/docs/fp/constants/macro.populate_binomial_table.html @@ -1,4 +1,4 @@ -populate_binomial_table in fp::constants - Rust +populate_binomial_table in fp::constants - Rust @@ -23,6 +23,6 @@ }); -
    macro_rules! populate_binomial_table {
    +
    macro_rules! populate_binomial_table {
         ($res:expr, $size:ident, $mod:expr) => { ... };
     }
    \ No newline at end of file diff --git a/docs/fp/constants/static.BINOMIAL_TABLE.html b/docs/fp/constants/static.BINOMIAL_TABLE.html index 36247f841..7815ff0dc 100644 --- a/docs/fp/constants/static.BINOMIAL_TABLE.html +++ b/docs/fp/constants/static.BINOMIAL_TABLE.html @@ -1,4 +1,4 @@ -BINOMIAL_TABLE in fp::constants - Rust +BINOMIAL_TABLE in fp::constants - Rust @@ -23,4 +23,4 @@ }); -
    pub(crate) static BINOMIAL_TABLE: [[[u32; 19]; 19]; 8]
    \ No newline at end of file +
    pub(crate) static BINOMIAL_TABLE: [[[u32; 19]; 19]; 8]
    \ No newline at end of file diff --git a/docs/fp/constants/type.Limb.html b/docs/fp/constants/type.Limb.html index 05ab537a7..498e1ca3c 100644 --- a/docs/fp/constants/type.Limb.html +++ b/docs/fp/constants/type.Limb.html @@ -1,4 +1,4 @@ -Limb in fp::constants - Rust +Limb in fp::constants - Rust @@ -23,4 +23,4 @@ }); -

    Type Definition fp::constants::Limb

    source ·
    pub(crate) type Limb = u64;
    \ No newline at end of file +

    Type Alias fp::constants::Limb

    source ·
    pub(crate) type Limb = u64;
    \ No newline at end of file diff --git a/docs/fp/index.html b/docs/fp/index.html index 273305a1e..bb25eb778 100644 --- a/docs/fp/index.html +++ b/docs/fp/index.html @@ -1,4 +1,4 @@ -fp - Rust +fp - Rust @@ -23,5 +23,5 @@ }); -

    Crate fp

    source ·

    Modules

    Macros

    Constants

    -
    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) +

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) first_column.

    -
    source

    pub fn compute_quasi_inverse( +

    source

    pub fn compute_quasi_inverse( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> QuasiInverse

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -152,10 +152,10 @@
    Example
    let preimage = [vec![0, 1, 0], vec![0, 2, 2]]; assert_eq!(qi.preimage(), &Matrix::from_vec(p, &preimage));
    -
    source

    pub fn compute_image( +

    source

    pub fn compute_image( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> Subspace

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -178,7 +178,7 @@
    Example
    vec![0, 1, 1, 0, 1]]; assert_eq!(computed_image.matrix, Matrix::from_vec(p, &image)); assert_eq!(computed_image.pivots(), &vec![0, 1, -1, -1, -1]);
    -
    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix +

    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix A, produce an augmented matrix of the form

    [A | I]
     
    @@ -204,12 +204,12 @@
    Example
    let mut target = vec![0; 3]; assert_eq!(Vec::<u32>::from(&ker.matrix[0]), vec![1, 1, 2]);
    -
    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( +

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( &mut self, - start_column: usize, - end_column: usize, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the + start_column: usize, + end_column: usize, + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the columns between start_column and end_column. That is, if M = [|B|] where B is between columns start_column and end_column, we want the new B to be surjective. This doesn’t change the size of the matrix. Rather, it adds the new row to the next empty row in the @@ -225,13 +225,13 @@

    Arguments
    Panics

    The function panics if there are not enough empty rows.

    -
    source

    pub fn extend_image( +

    source

    pub fn extend_image( &mut self, - start_column: usize, - end_column: usize, + start_column: usize, + end_column: usize, desired_image: &Subspace, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and end_columns, and a superspace of the image of B, add rows to the matrix such that the image of B becomes this superspace.

    The rows added are basis vectors of the desired image as specified in the Subspace object. @@ -239,7 +239,7 @@

    Panics
    Panics

    It may panic if the current image is not contained in desired_image, but is not guaranteed to do so.

    -
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    +
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    Example
    let p = ValidPrime::new(7);
     let input  = [vec![1, 3, 6],
    @@ -251,15 +251,15 @@ 
    Example
    let desired_result = FpVector::from_slice(p, &vec![3, 5, 1]); m.apply(result.as_slice_mut(), 1, v.as_slice()); assert_eq!(result, desired_result);
    -
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl<const N: usize> Clone for AugmentedMatrix<N>

    source§

    fn clone(&self) -> AugmentedMatrix<N>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<const N: usize> Deref for AugmentedMatrix<N>

    §

    type Target = Matrix

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Matrix

    Dereferences the value.
    source§

    impl<const N: usize> DerefMut for AugmentedMatrix<N>

    source§

    fn deref_mut(&mut self) -> &mut Matrix

    Mutably dereferences the value.

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>

    §

    impl<const N: usize> Send for AugmentedMatrix<N>

    §

    impl<const N: usize> Sync for AugmentedMatrix<N>

    §

    impl<const N: usize> Unpin for AugmentedMatrix<N>

    §

    impl<const N: usize> UnwindSafe for AugmentedMatrix<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl<const N: usize> Clone for AugmentedMatrix<N>

    source§

    fn clone(&self) -> AugmentedMatrix<N>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<const N: usize> Deref for AugmentedMatrix<N>

    §

    type Target = Matrix

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Matrix

    Dereferences the value.
    source§

    impl<const N: usize> DerefMut for AugmentedMatrix<N>

    source§

    fn deref_mut(&mut self) -> &mut Matrix

    Mutably dereferences the value.

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>

    §

    impl<const N: usize> Send for AugmentedMatrix<N>

    §

    impl<const N: usize> Sync for AugmentedMatrix<N>

    §

    impl<const N: usize> Unpin for AugmentedMatrix<N>

    §

    impl<const N: usize> UnwindSafe for AugmentedMatrix<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/matrix_inner/struct.Matrix.html b/docs/fp/matrix/matrix_inner/struct.Matrix.html index 2cc762d97..c7a3ac2e9 100644 --- a/docs/fp/matrix/matrix_inner/struct.Matrix.html +++ b/docs/fp/matrix/matrix_inner/struct.Matrix.html @@ -1,4 +1,4 @@ -Matrix in fp::matrix::matrix_inner - Rust +Matrix in fp::matrix::matrix_inner - Rust @@ -23,36 +23,36 @@ }); -

    Struct fp::matrix::matrix_inner::Matrix

    source ·
    pub struct Matrix {
    +

    Struct fp::matrix::matrix_inner::Matrix

    source ·
    pub struct Matrix {
         p: ValidPrime,
    -    columns: usize,
    -    vectors: Vec<FpVector>,
    -    pub(crate) pivots: Vec<isize>,
    +    columns: usize,
    +    vectors: Vec<FpVector>,
    +    pub(crate) pivots: Vec<isize>,
     }
    Expand description

    A matrix! In particular, a matrix with values in F_p. The way we store matrices means it is easier to perform row operations than column operations, and the way we use matrices means we want our matrices to act on the right. Hence we think of vectors as row vectors.

    -

    Fields§

    §p: ValidPrime§columns: usize§vectors: Vec<FpVector>§pivots: Vec<isize>

    The pivot columns of the matrix. pivots[n] is k if column n is the kth pivot +

    Fields§

    §p: ValidPrime§columns: usize§vectors: Vec<FpVector>§pivots: Vec<isize>

    The pivot columns of the matrix. pivots[n] is k if column n is the kth pivot column, and a negative number otherwise. Said negative number is often -1 but this is not guaranteed.

    -

    Implementations§

    source§

    impl Matrix

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Matrix

    Produces a new matrix over F_p with the specified number of rows and columns, initialized +

    Implementations§

    source§

    impl Matrix

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Matrix

    Produces a new matrix over F_p with the specified number of rows and columns, initialized to the 0 matrix.

    source

    pub fn new_with_capacity( p: ValidPrime, - rows: usize, - columns: usize, - rows_capacity: usize, - columns_capacity: usize -) -> Matrix

    source

    pub fn identity(p: ValidPrime, dim: usize) -> Self

    source

    pub fn from_bytes( + rows: usize, + columns: usize, + rows_capacity: usize, + columns_capacity: usize +) -> Matrix

    source

    pub fn identity(p: ValidPrime, dim: usize) -> Self

    source

    pub fn from_bytes( p: ValidPrime, - rows: usize, - columns: usize, - data: &mut impl Read -) -> Result<Matrix>

    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub(crate) fn write_pivot(v: &[isize], buffer: &mut impl Write) -> Result<()>

    Read a vector of isize

    -
    source

    pub(crate) fn read_pivot(dim: usize, data: &mut impl Read) -> Result<Vec<isize>>

    Read a vector of isize of length dim.

    -
    source§

    impl Matrix

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    -
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    + rows: usize, + columns: usize, + data: &mut impl Read +) -> Result<Matrix>
    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub(crate) fn write_pivot(v: &[isize], buffer: &mut impl Write) -> Result<()>

    Read a vector of isize

    +
    source

    pub(crate) fn read_pivot(dim: usize, data: &mut impl Read) -> Result<Vec<isize>>

    Read a vector of isize of length dim.

    +
    source§

    impl Matrix

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    +
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    source

    pub fn initialize_pivots(&mut self)

    Set the pivots to -1 in every entry. This is called by Matrix::row_reduce.

    -
    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn from_vec(p: ValidPrime, input: &[Vec<u32>]) -> Matrix

    Produces a Matrix from an &[Vec<u32>] object. If the number of rows is 0, the number +

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn from_vec(p: ValidPrime, input: &[Vec<u32>]) -> Matrix

    Produces a Matrix from an &[Vec<u32>] object. If the number of rows is 0, the number of columns is also assumed to be zero.

    Example
    let p = ValidPrime::new(7);
    @@ -60,7 +60,7 @@ 
    Example
    vec![0, 3, 4]]; let m = Matrix::from_vec(p, &input);
    -
    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn augmented_from_vec(p: ValidPrime, input: &[Vec<u32>]) -> (usize, Matrix)

    Produces a padded augmented matrix from an &[Vec<u32>] object (produces [A|0|I] from +

    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn augmented_from_vec(p: ValidPrime, input: &[Vec<u32>]) -> (usize, Matrix)

    Produces a padded augmented matrix from an &[Vec<u32>] object (produces [A|0|I] from A). Returns the matrix and the first column index of I.

    Example
    let p = ValidPrime::new(7);
    @@ -69,47 +69,47 @@ 
    Example
    let (n, m) = Matrix::augmented_from_vec(p, &input); assert!(n >= input[0].len());
    -
    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( +

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( &mut self, - row_start: usize, - row_end: usize, - col_start: usize, - col_end: usize -) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source§

    impl Matrix

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn par_iter_mut( + row_start: usize, + row_end: usize, + col_start: usize, + col_end: usize +) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source§

    impl Matrix

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn maybe_par_iter_mut( &mut self -) -> impl IndexedParallelIterator<Item = &mut FpVector> + '_

    source§

    impl Matrix

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    -
    source

    pub unsafe fn row_op( +) -> impl MaybeIndexedParallelIterator<Item = &mut FpVector> + '_

    source§

    impl Matrix

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    +
    source

    pub unsafe fn row_op( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    Performs a row operation using pivot_column as the pivot column. This assumes that the source row is zero in all columns before the pivot column.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub unsafe fn row_op_naive( +

    source

    pub unsafe fn row_op_naive( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    A version of Matrix::row_op without the zero assumption.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub(crate) unsafe fn split_borrow( +

    source

    pub(crate) unsafe fn split_borrow( &mut self, - i: usize, - j: usize + i: usize, + j: usize ) -> (&mut FpVector, &mut FpVector)

    Mutably borrows x[i] and x[j].

    Safety

    i and j must be distinct and not out of bounds.

    -
    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( +

    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( &mut self, permutation: T -) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not +) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not reduced row echelon form. It also returns the list of pivots instead.

    -
    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in +

    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in place and records the pivots in column_to_pivot_row. The way the pivots are recorded is that column_to_pivot_row[i] is the row of the pivot if the ith row contains a pivot, and -1 otherwise.

    @@ -133,12 +133,12 @@
    Example
    m.row_reduce(); assert_eq!(m, Matrix::from_vec(p, &result));
    -
    source§

    impl Matrix

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) +

    source§

    impl Matrix

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) first_column.

    -
    source

    pub fn compute_quasi_inverse( +

    source

    pub fn compute_quasi_inverse( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> QuasiInverse

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -159,10 +159,10 @@
    Example
    let preimage = [vec![0, 1, 0], vec![0, 2, 2]]; assert_eq!(qi.preimage(), &Matrix::from_vec(p, &preimage));
    -
    source

    pub fn compute_image( +

    source

    pub fn compute_image( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> Subspace

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -185,7 +185,7 @@
    Example
    vec![0, 1, 1, 0, 1]]; assert_eq!(computed_image.matrix, Matrix::from_vec(p, &image)); assert_eq!(computed_image.pivots(), &vec![0, 1, -1, -1, -1]);
    -
    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix +

    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix A, produce an augmented matrix of the form

    [A | I]
     
    @@ -211,12 +211,12 @@
    Example
    let mut target = vec![0; 3]; assert_eq!(Vec::<u32>::from(&ker.matrix[0]), vec![1, 1, 2]);
    -
    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( +

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( &mut self, - start_column: usize, - end_column: usize, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the + start_column: usize, + end_column: usize, + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the columns between start_column and end_column. That is, if M = [|B|] where B is between columns start_column and end_column, we want the new B to be surjective. This doesn’t change the size of the matrix. Rather, it adds the new row to the next empty row in the @@ -232,13 +232,13 @@

    Arguments
    Panics

    The function panics if there are not enough empty rows.

    -
    source

    pub fn extend_image( +

    source

    pub fn extend_image( &mut self, - start_column: usize, - end_column: usize, + start_column: usize, + end_column: usize, desired_image: &Subspace, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and end_columns, and a superspace of the image of B, add rows to the matrix such that the image of B becomes this superspace.

    The rows added are basis vectors of the desired image as specified in the Subspace object. @@ -246,7 +246,7 @@

    Panics
    Panics

    It may panic if the current image is not contained in desired_image, but is not guaranteed to do so.

    -
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    +
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    Example
    let p = ValidPrime::new(7);
     let input  = [vec![1, 3, 6],
    @@ -258,7 +258,7 @@ 
    Example
    let desired_result = FpVector::from_slice(p, &vec![3, 5, 1]); m.apply(result.as_slice_mut(), 1, v.as_slice()); assert_eq!(result, desired_result);
    -
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl AddAssign<&Matrix> for Matrix

    source§

    fn add_assign(&mut self, rhs: &Matrix)

    Performs the += operation. Read more
    source§

    impl Clone for Matrix

    source§

    fn clone(&self) -> Matrix

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl AddAssign<&Matrix> for Matrix

    source§

    fn add_assign(&mut self, rhs: &Matrix)

    Performs the += operation. Read more
    source§

    impl Clone for Matrix

    source§

    fn clone(&self) -> Matrix

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Example
    let m = Matrix::from_vec(ValidPrime::new(2),
        &[
             vec![0, 1, 0],
    @@ -266,22 +266,22 @@ 
    Example
    ]); assert_eq!(&format!("{m}"), "[\n [0, 1, 0],\n [1, 1, 0]\n]"); assert_eq!(&format!("{m:#}"), "010\n110");
    -
    source§

    impl<I> Index<I> for Matrixwhere - Vec<FpVector>: Index<I>,

    source§

    fn index(&self, i: I) -> &Self::Output

    Returns the ith row of the matrix

    -
    §

    type Output = <Vec<FpVector, Global> as Index<I>>::Output

    The returned type after indexing.
    source§

    impl<I> IndexMut<I> for Matrixwhere - Vec<FpVector>: IndexMut<I>,

    source§

    fn index_mut(&mut self, i: I) -> &mut Self::Output

    Returns the ith row of the matrix

    -
    source§

    impl<'a> IntoIterator for &'a Matrix

    §

    type Item = &'a FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = Iter<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<'a> IntoIterator for &'a mut Matrix

    §

    type Item = &'a mut FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = IterMut<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl Mul<&Matrix> for &Matrix

    §

    type Output = Matrix

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: Self) -> Matrix

    Performs the * operation. Read more
    source§

    impl MulAssign<u32> for Matrix

    source§

    fn mul_assign(&mut self, rhs: u32)

    Performs the *= operation. Read more
    source§

    impl PartialEq<Matrix> for Matrix

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Matrix

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl<I> Index<I> for Matrixwhere + Vec<FpVector>: Index<I>,

    source§

    fn index(&self, i: I) -> &Self::Output

    Returns the ith row of the matrix

    +
    §

    type Output = <Vec<FpVector, Global> as Index<I>>::Output

    The returned type after indexing.
    source§

    impl<I> IndexMut<I> for Matrixwhere + Vec<FpVector>: IndexMut<I>,

    source§

    fn index_mut(&mut self, i: I) -> &mut Self::Output

    Returns the ith row of the matrix

    +
    source§

    impl<'a> IntoIterator for &'a Matrix

    §

    type Item = &'a FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = Iter<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<'a> IntoIterator for &'a mut Matrix

    §

    type Item = &'a mut FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = IterMut<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl Mul<&Matrix> for &Matrix

    §

    type Output = Matrix

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: Self) -> Matrix

    Performs the * operation. Read more
    source§

    impl MulAssign<u32> for Matrix

    source§

    fn mul_assign(&mut self, rhs: u32)

    Performs the *= operation. Read more
    source§

    impl PartialEq<Matrix> for Matrix

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Matrix

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/matrix_inner/struct.MatrixSliceMut.html b/docs/fp/matrix/matrix_inner/struct.MatrixSliceMut.html index 5e496356b..f24b52dd1 100644 --- a/docs/fp/matrix/matrix_inner/struct.MatrixSliceMut.html +++ b/docs/fp/matrix/matrix_inner/struct.MatrixSliceMut.html @@ -1,4 +1,4 @@ -MatrixSliceMut in fp::matrix::matrix_inner - Rust +MatrixSliceMut in fp::matrix::matrix_inner - Rust @@ -23,25 +23,25 @@ }); -
    pub struct MatrixSliceMut<'a> {
    +
    pub struct MatrixSliceMut<'a> {
         vectors: &'a mut [FpVector],
    -    col_start: usize,
    -    col_end: usize,
    -}

    Fields§

    §vectors: &'a mut [FpVector]§col_start: usize§col_end: usize

    Implementations§

    source§

    impl<'a> MatrixSliceMut<'a>

    source

    pub fn columns(&self) -> usize

    source

    pub fn rows(&self) -> usize

    source

    pub fn row_slice<'b: 'a>( + col_start: usize, + col_end: usize, +}

    Fields§

    §vectors: &'a mut [FpVector]§col_start: usize§col_end: usize

    Implementations§

    source§

    impl<'a> MatrixSliceMut<'a>

    source

    pub fn columns(&self) -> usize

    source

    pub fn rows(&self) -> usize

    source

    pub fn row_slice<'b: 'a>( &'b mut self, - row_start: usize, - row_end: usize -) -> MatrixSliceMut<'b>

    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>> + '_

    source

    pub fn iter_mut(&mut self) -> impl Iterator<Item = SliceMut<'_>> + '_

    source

    pub fn par_iter_mut( + row_start: usize, + row_end: usize +) -> MatrixSliceMut<'b>

    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>> + '_

    source

    pub fn iter_mut(&mut self) -> impl Iterator<Item = SliceMut<'_>> + '_

    source

    pub fn maybe_par_iter_mut( &mut self -) -> impl IndexedParallelIterator<Item = SliceMut<'_>> + '_

    source

    pub fn row(&mut self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn add_identity(&mut self)

    source

    pub fn add_masked(&mut self, other: &Matrix, mask: &[usize])

    For each row, add the v[i]th entry of other to self.

    -

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for MatrixSliceMut<'a>

    §

    impl<'a> Send for MatrixSliceMut<'a>

    §

    impl<'a> Sync for MatrixSliceMut<'a>

    §

    impl<'a> Unpin for MatrixSliceMut<'a>

    §

    impl<'a> !UnwindSafe for MatrixSliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> impl MaybeIndexedParallelIterator<Item = SliceMut<'_>> + '_
    source

    pub fn row(&mut self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn add_identity(&mut self)

    source

    pub fn add_masked(&mut self, other: &Matrix, mask: &[usize])

    For each row, add the v[i]th entry of other to self.

    +

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for MatrixSliceMut<'a>

    §

    impl<'a> Send for MatrixSliceMut<'a>

    §

    impl<'a> Sync for MatrixSliceMut<'a>

    §

    impl<'a> Unpin for MatrixSliceMut<'a>

    §

    impl<'a> !UnwindSafe for MatrixSliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/quasi_inverse/index.html b/docs/fp/matrix/quasi_inverse/index.html index 5ae12a58e..aac96a6db 100644 --- a/docs/fp/matrix/quasi_inverse/index.html +++ b/docs/fp/matrix/quasi_inverse/index.html @@ -1,4 +1,4 @@ -fp::matrix::quasi_inverse - Rust +fp::matrix::quasi_inverse - Rust @@ -23,5 +23,5 @@ }); -

    Module fp::matrix::quasi_inverse

    source ·

    Structs

    -

    Fields§

    §image: Option<Vec<isize>>§preimage: Matrix

    Implementations§

    source§

    impl QuasiInverse

    source

    pub fn new(image: Option<Vec<isize>>, preimage: Matrix) -> Self

    source

    pub fn image_dimension(&self) -> usize

    source

    pub fn source_dimension(&self) -> usize

    source

    pub fn target_dimension(&self) -> usize

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn stream_quasi_inverse<T, S>( +

    Fields§

    §image: Option<Vec<isize>>§preimage: Matrix

    Implementations§

    source§

    impl QuasiInverse

    source

    pub fn new(image: Option<Vec<isize>>, preimage: Matrix) -> Self

    source

    pub fn image_dimension(&self) -> usize

    source

    pub fn source_dimension(&self) -> usize

    source

    pub fn target_dimension(&self) -> usize

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn stream_quasi_inverse<T, S>( p: ValidPrime, - data: &mut impl Read, - results: &mut [T], - inputs: &[S] -) -> Result<()>where - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Given a data file containing a quasi-inverse, apply it to all the vectors in input + data: &mut impl Read, + results: &mut [T], + inputs: &[S] +) -> Result<()>where + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Given a data file containing a quasi-inverse, apply it to all the vectors in input and write the results to the corresponding vectors in results. This reads in the quasi-inverse row by row to minimize memory usage.

    -
    source

    pub fn preimage(&self) -> &Matrix

    source

    pub fn pivots(&self) -> Option<&[isize]>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn apply(&self, target: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Apply the quasi-inverse to an input vector and add a constant multiple of the result +

    source

    pub fn preimage(&self) -> &Matrix

    source

    pub fn pivots(&self) -> Option<&[isize]>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn apply(&self, target: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Apply the quasi-inverse to an input vector and add a constant multiple of the result to an output vector

    Arguments
      @@ -53,17 +53,17 @@
      Arguments
    • coeff - The constant multiple above
    • input - The input vector, expressed in the basis of the ambient space
    -

    Trait Implementations§

    source§

    impl Clone for QuasiInverse

    source§

    fn clone(&self) -> QuasiInverse

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for QuasiInverse

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<QuasiInverse> for QuasiInverse

    source§

    fn eq(&self, other: &QuasiInverse) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for QuasiInverse

    source§

    impl StructuralEq for QuasiInverse

    source§

    impl StructuralPartialEq for QuasiInverse

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for QuasiInverse

    source§

    fn clone(&self) -> QuasiInverse

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for QuasiInverse

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<QuasiInverse> for QuasiInverse

    source§

    fn eq(&self, other: &QuasiInverse) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for QuasiInverse

    source§

    impl StructuralEq for QuasiInverse

    source§

    impl StructuralPartialEq for QuasiInverse

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.AugmentedMatrix.html b/docs/fp/matrix/struct.AugmentedMatrix.html index 70cafac58..c0b1557e3 100644 --- a/docs/fp/matrix/struct.AugmentedMatrix.html +++ b/docs/fp/matrix/struct.AugmentedMatrix.html @@ -1,4 +1,4 @@ -AugmentedMatrix in fp::matrix - Rust +AugmentedMatrix in fp::matrix - Rust @@ -23,9 +23,9 @@ }); -

    Struct fp::matrix::AugmentedMatrix

    source ·
    pub struct AugmentedMatrix<const N: usize> {
    -    pub end: [usize; N],
    -    pub start: [usize; N],
    +

    Struct fp::matrix::AugmentedMatrix

    source ·
    pub struct AugmentedMatrix<const N: usize> {
    +    pub end: [usize; N],
    +    pub start: [usize; N],
         pub inner: Matrix,
     }
    Expand description

    This models an augmented matrix.

    In an ideal world, this will have no public fields. The inner matrix @@ -38,71 +38,71 @@ because it is not clear if we first do the deref_mut then retrieve start[0]. (since deref_mut takes in a mutable borrow, it could in theory modify m non-trivially)

    -

    Fields§

    §end: [usize; N]§start: [usize; N]§inner: Matrix

    Implementations§

    source§

    impl<const N: usize> AugmentedMatrix<N>

    source

    pub fn new(p: ValidPrime, rows: usize, columns: [usize; N]) -> Self

    source

    pub fn new_with_capacity( +

    Fields§

    §end: [usize; N]§start: [usize; N]§inner: Matrix

    Implementations§

    source§

    impl<const N: usize> AugmentedMatrix<N>

    source

    pub fn new(p: ValidPrime, rows: usize, columns: [usize; N]) -> Self

    source

    pub fn new_with_capacity( p: ValidPrime, - rows: usize, - columns: &[usize], - row_capacity: usize, - extra_column_capacity: usize -) -> Self

    source

    pub fn segment(&mut self, start: usize, end: usize) -> MatrixSliceMut<'_>

    source

    pub fn row_segment_mut( + rows: usize, + columns: &[usize], + row_capacity: usize, + extra_column_capacity: usize +) -> Self

    source

    pub fn segment(&mut self, start: usize, end: usize) -> MatrixSliceMut<'_>

    source

    pub fn row_segment_mut( &mut self, - i: usize, - start: usize, - end: usize -) -> SliceMut<'_>

    source

    pub fn row_segment(&self, i: usize, start: usize, end: usize) -> Slice<'_>

    source

    pub fn into_matrix(self) -> Matrix

    source

    pub fn into_tail_segment( + i: usize, + start: usize, + end: usize +) -> SliceMut<'_>

    source

    pub fn row_segment(&self, i: usize, start: usize, end: usize) -> Slice<'_>

    source

    pub fn into_matrix(self) -> Matrix

    source

    pub fn into_tail_segment( self, - row_start: usize, - row_end: usize, - segment_start: usize -) -> Matrix

    source

    pub fn compute_kernel(&self) -> Subspace

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source§

    impl AugmentedMatrix<2>

    source§

    impl AugmentedMatrix<3>

    source

    pub fn drop_first(self) -> AugmentedMatrix<2>

    source

    pub fn compute_quasi_inverses(self) -> (QuasiInverse, QuasiInverse)

    This function computes quasi-inverses for matrices A, B given a reduced row echelon form of + row_start: usize, + row_end: usize, + segment_start: usize +) -> Matrix

    source

    pub fn compute_kernel(&self) -> Subspace

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source§

    impl AugmentedMatrix<2>

    source§

    impl AugmentedMatrix<3>

    source

    pub fn drop_first(self) -> AugmentedMatrix<2>

    source

    pub fn compute_quasi_inverses(self) -> (QuasiInverse, QuasiInverse)

    This function computes quasi-inverses for matrices A, B given a reduced row echelon form of [A|0|B|0|I] such that A is surjective. Moreover, if Q is the quasi-inverse of A, it is guaranteed that the image of QB and B|_{ker A} are disjoint.

    This takes ownership of the matrix since it heavily modifies the matrix. This is not strictly necessary but is fine in most applications.

    -

    Methods from Deref<Target = Matrix>§

    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    -
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    +

    Methods from Deref<Target = Matrix>§

    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    +
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    source

    pub fn initialize_pivots(&mut self)

    Set the pivots to -1 in every entry. This is called by Matrix::row_reduce.

    -
    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( +

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( &mut self, - row_start: usize, - row_end: usize, - col_start: usize, - col_end: usize -) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn par_iter_mut( + row_start: usize, + row_end: usize, + col_start: usize, + col_end: usize +) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn maybe_par_iter_mut( &mut self -) -> impl IndexedParallelIterator<Item = &mut FpVector> + '_

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    -
    source

    pub unsafe fn row_op( +) -> impl MaybeIndexedParallelIterator<Item = &mut FpVector> + '_

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    +
    source

    pub unsafe fn row_op( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    Performs a row operation using pivot_column as the pivot column. This assumes that the source row is zero in all columns before the pivot column.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub unsafe fn row_op_naive( +

    source

    pub unsafe fn row_op_naive( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    A version of Matrix::row_op without the zero assumption.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub(crate) unsafe fn split_borrow( +

    source

    pub(crate) unsafe fn split_borrow( &mut self, - i: usize, - j: usize + i: usize, + j: usize ) -> (&mut FpVector, &mut FpVector)

    Mutably borrows x[i] and x[j].

    Safety

    i and j must be distinct and not out of bounds.

    -
    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( +

    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( &mut self, permutation: T -) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not +) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not reduced row echelon form. It also returns the list of pivots instead.

    -
    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in +

    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in place and records the pivots in column_to_pivot_row. The way the pivots are recorded is that column_to_pivot_row[i] is the row of the pivot if the ith row contains a pivot, and -1 otherwise.

    @@ -126,12 +126,12 @@
    Example
    m.row_reduce(); assert_eq!(m, Matrix::from_vec(p, &result));
    -
    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) +

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) first_column.

    -
    source

    pub fn compute_quasi_inverse( +

    source

    pub fn compute_quasi_inverse( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> QuasiInverse

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -152,10 +152,10 @@
    Example
    let preimage = [vec![0, 1, 0], vec![0, 2, 2]]; assert_eq!(qi.preimage(), &Matrix::from_vec(p, &preimage));
    -
    source

    pub fn compute_image( +

    source

    pub fn compute_image( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> Subspace

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -178,7 +178,7 @@
    Example
    vec![0, 1, 1, 0, 1]]; assert_eq!(computed_image.matrix, Matrix::from_vec(p, &image)); assert_eq!(computed_image.pivots(), &vec![0, 1, -1, -1, -1]);
    -
    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix +

    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix A, produce an augmented matrix of the form

    [A | I]
     
    @@ -204,12 +204,12 @@
    Example
    let mut target = vec![0; 3]; assert_eq!(Vec::<u32>::from(&ker.matrix[0]), vec![1, 1, 2]);
    -
    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( +

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( &mut self, - start_column: usize, - end_column: usize, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the + start_column: usize, + end_column: usize, + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the columns between start_column and end_column. That is, if M = [|B|] where B is between columns start_column and end_column, we want the new B to be surjective. This doesn’t change the size of the matrix. Rather, it adds the new row to the next empty row in the @@ -225,13 +225,13 @@

    Arguments
    Panics

    The function panics if there are not enough empty rows.

    -
    source

    pub fn extend_image( +

    source

    pub fn extend_image( &mut self, - start_column: usize, - end_column: usize, + start_column: usize, + end_column: usize, desired_image: &Subspace, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and end_columns, and a superspace of the image of B, add rows to the matrix such that the image of B becomes this superspace.

    The rows added are basis vectors of the desired image as specified in the Subspace object. @@ -239,7 +239,7 @@

    Panics
    Panics

    It may panic if the current image is not contained in desired_image, but is not guaranteed to do so.

    -
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    +
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    Example
    let p = ValidPrime::new(7);
     let input  = [vec![1, 3, 6],
    @@ -251,15 +251,15 @@ 
    Example
    let desired_result = FpVector::from_slice(p, &vec![3, 5, 1]); m.apply(result.as_slice_mut(), 1, v.as_slice()); assert_eq!(result, desired_result);
    -
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl<const N: usize> Clone for AugmentedMatrix<N>

    source§

    fn clone(&self) -> AugmentedMatrix<N>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<const N: usize> Deref for AugmentedMatrix<N>

    §

    type Target = Matrix

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Matrix

    Dereferences the value.
    source§

    impl<const N: usize> DerefMut for AugmentedMatrix<N>

    source§

    fn deref_mut(&mut self) -> &mut Matrix

    Mutably dereferences the value.

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>

    §

    impl<const N: usize> Send for AugmentedMatrix<N>

    §

    impl<const N: usize> Sync for AugmentedMatrix<N>

    §

    impl<const N: usize> Unpin for AugmentedMatrix<N>

    §

    impl<const N: usize> UnwindSafe for AugmentedMatrix<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl<const N: usize> Clone for AugmentedMatrix<N>

    source§

    fn clone(&self) -> AugmentedMatrix<N>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<const N: usize> Deref for AugmentedMatrix<N>

    §

    type Target = Matrix

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Matrix

    Dereferences the value.
    source§

    impl<const N: usize> DerefMut for AugmentedMatrix<N>

    source§

    fn deref_mut(&mut self) -> &mut Matrix

    Mutably dereferences the value.

    Auto Trait Implementations§

    §

    impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>

    §

    impl<const N: usize> Send for AugmentedMatrix<N>

    §

    impl<const N: usize> Sync for AugmentedMatrix<N>

    §

    impl<const N: usize> Unpin for AugmentedMatrix<N>

    §

    impl<const N: usize> UnwindSafe for AugmentedMatrix<N>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.Matrix.html b/docs/fp/matrix/struct.Matrix.html index 94bd33423..2ca8f53ef 100644 --- a/docs/fp/matrix/struct.Matrix.html +++ b/docs/fp/matrix/struct.Matrix.html @@ -1,4 +1,4 @@ -Matrix in fp::matrix - Rust +Matrix in fp::matrix - Rust @@ -23,36 +23,36 @@ }); -

    Struct fp::matrix::Matrix

    source ·
    pub struct Matrix {
    +

    Struct fp::matrix::Matrix

    source ·
    pub struct Matrix {
         p: ValidPrime,
    -    columns: usize,
    -    vectors: Vec<FpVector>,
    -    pub(crate) pivots: Vec<isize>,
    +    columns: usize,
    +    vectors: Vec<FpVector>,
    +    pub(crate) pivots: Vec<isize>,
     }
    Expand description

    A matrix! In particular, a matrix with values in F_p. The way we store matrices means it is easier to perform row operations than column operations, and the way we use matrices means we want our matrices to act on the right. Hence we think of vectors as row vectors.

    -

    Fields§

    §p: ValidPrime§columns: usize§vectors: Vec<FpVector>§pivots: Vec<isize>

    The pivot columns of the matrix. pivots[n] is k if column n is the kth pivot +

    Fields§

    §p: ValidPrime§columns: usize§vectors: Vec<FpVector>§pivots: Vec<isize>

    The pivot columns of the matrix. pivots[n] is k if column n is the kth pivot column, and a negative number otherwise. Said negative number is often -1 but this is not guaranteed.

    -

    Implementations§

    source§

    impl Matrix

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Matrix

    Produces a new matrix over F_p with the specified number of rows and columns, initialized +

    Implementations§

    source§

    impl Matrix

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Matrix

    Produces a new matrix over F_p with the specified number of rows and columns, initialized to the 0 matrix.

    source

    pub fn new_with_capacity( p: ValidPrime, - rows: usize, - columns: usize, - rows_capacity: usize, - columns_capacity: usize -) -> Matrix

    source

    pub fn identity(p: ValidPrime, dim: usize) -> Self

    source

    pub fn from_bytes( + rows: usize, + columns: usize, + rows_capacity: usize, + columns_capacity: usize +) -> Matrix

    source

    pub fn identity(p: ValidPrime, dim: usize) -> Self

    source

    pub fn from_bytes( p: ValidPrime, - rows: usize, - columns: usize, - data: &mut impl Read -) -> Result<Matrix>

    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub(crate) fn write_pivot(v: &[isize], buffer: &mut impl Write) -> Result<()>

    Read a vector of isize

    -
    source

    pub(crate) fn read_pivot(dim: usize, data: &mut impl Read) -> Result<Vec<isize>>

    Read a vector of isize of length dim.

    -
    source§

    impl Matrix

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    -
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    + rows: usize, + columns: usize, + data: &mut impl Read +) -> Result<Matrix>
    source

    pub fn to_bytes(&self, data: &mut impl Write) -> Result<()>

    source

    pub(crate) fn write_pivot(v: &[isize], buffer: &mut impl Write) -> Result<()>

    Read a vector of isize

    +
    source

    pub(crate) fn read_pivot(dim: usize, data: &mut impl Read) -> Result<Vec<isize>>

    Read a vector of isize of length dim.

    +
    source§

    impl Matrix

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn rows(&self) -> usize

    Gets the number of rows in the matrix.

    +
    source

    pub fn columns(&self) -> usize

    Gets the number of columns in the matrix.

    source

    pub fn initialize_pivots(&mut self)

    Set the pivots to -1 in every entry. This is called by Matrix::row_reduce.

    -
    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn from_vec(p: ValidPrime, input: &[Vec<u32>]) -> Matrix

    Produces a Matrix from an &[Vec<u32>] object. If the number of rows is 0, the number +

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn pivots_mut(&mut self) -> &mut [isize]

    source

    pub fn from_vec(p: ValidPrime, input: &[Vec<u32>]) -> Matrix

    Produces a Matrix from an &[Vec<u32>] object. If the number of rows is 0, the number of columns is also assumed to be zero.

    Example
    let p = ValidPrime::new(7);
    @@ -60,7 +60,7 @@ 
    Example
    vec![0, 3, 4]]; let m = Matrix::from_vec(p, &input);
    -
    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn augmented_from_vec(p: ValidPrime, input: &[Vec<u32>]) -> (usize, Matrix)

    Produces a padded augmented matrix from an &[Vec<u32>] object (produces [A|0|I] from +

    source

    pub fn to_vec(&self) -> Vec<Vec<u32>>

    source

    pub fn augmented_from_vec(p: ValidPrime, input: &[Vec<u32>]) -> (usize, Matrix)

    Produces a padded augmented matrix from an &[Vec<u32>] object (produces [A|0|I] from A). Returns the matrix and the first column index of I.

    Example
    let p = ValidPrime::new(7);
    @@ -69,47 +69,47 @@ 
    Example
    let (n, m) = Matrix::augmented_from_vec(p, &input); assert!(n >= input[0].len());
    -
    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( +

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn assign(&mut self, other: &Matrix)

    source

    pub fn as_slice_mut(&mut self) -> MatrixSliceMut<'_>

    source

    pub fn slice_mut( &mut self, - row_start: usize, - row_end: usize, - col_start: usize, - col_end: usize -) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source§

    impl Matrix

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn par_iter_mut( + row_start: usize, + row_end: usize, + col_start: usize, + col_end: usize +) -> MatrixSliceMut<'_>

    source

    pub fn row(&self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source§

    impl Matrix

    source

    pub fn iter(&self) -> Iter<'_, FpVector>

    source

    pub fn iter_mut(&mut self) -> IterMut<'_, FpVector>

    source

    pub fn maybe_par_iter_mut( &mut self -) -> impl IndexedParallelIterator<Item = &mut FpVector> + '_

    source§

    impl Matrix

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    -
    source

    pub unsafe fn row_op( +) -> impl MaybeIndexedParallelIterator<Item = &mut FpVector> + '_

    source§

    impl Matrix

    source

    pub fn safe_row_op(&mut self, target: usize, source: usize, c: u32)

    A no-nonsense, safe, row operation. Adds c * self[source] to self[target].

    +
    source

    pub unsafe fn row_op( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    Performs a row operation using pivot_column as the pivot column. This assumes that the source row is zero in all columns before the pivot column.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub unsafe fn row_op_naive( +

    source

    pub unsafe fn row_op_naive( &mut self, - target: usize, - source: usize, - pivot_column: usize, + target: usize, + source: usize, + pivot_column: usize, prime: ValidPrime )

    A version of Matrix::row_op without the zero assumption.

    Safety

    target and source must be distinct and less that vectors.len()

    -
    source

    pub(crate) unsafe fn split_borrow( +

    source

    pub(crate) unsafe fn split_borrow( &mut self, - i: usize, - j: usize + i: usize, + j: usize ) -> (&mut FpVector, &mut FpVector)

    Mutably borrows x[i] and x[j].

    Safety

    i and j must be distinct and not out of bounds.

    -
    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( +

    source

    pub fn find_pivots_permutation<T: Iterator<Item = usize>>( &mut self, permutation: T -) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not +) -> Vec<usize>

    This is very similar to row_reduce, except we only need to get to row echelon form, not reduced row echelon form. It also returns the list of pivots instead.

    -
    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in +

    source

    pub fn row_reduce(&mut self) -> usize

    Perform row reduction to reduce it to reduced row echelon form. This modifies the matrix in place and records the pivots in column_to_pivot_row. The way the pivots are recorded is that column_to_pivot_row[i] is the row of the pivot if the ith row contains a pivot, and -1 otherwise.

    @@ -133,12 +133,12 @@
    Example
    m.row_reduce(); assert_eq!(m, Matrix::from_vec(p, &result));
    -
    source§

    impl Matrix

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) +

    source§

    impl Matrix

    source

    pub fn find_first_row_in_block(&self, first_column: usize) -> usize

    Given a row reduced matrix, find the first row whose pivot column is after (or at) first_column.

    -
    source

    pub fn compute_quasi_inverse( +

    source

    pub fn compute_quasi_inverse( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> QuasiInverse

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -159,10 +159,10 @@
    Example
    let preimage = [vec![0, 1, 0], vec![0, 2, 2]]; assert_eq!(qi.preimage(), &Matrix::from_vec(p, &preimage));
    -
    source

    pub fn compute_image( +

    source

    pub fn compute_image( &self, - last_target_col: usize, - first_source_col: usize + last_target_col: usize, + first_source_col: usize ) -> Subspace

    Computes the quasi-inverse of a matrix given a rref of [A|0|I], where 0 is the zero padding as usual.

    Arguments
    @@ -185,7 +185,7 @@
    Example
    vec![0, 1, 1, 0, 1]]; assert_eq!(computed_image.matrix, Matrix::from_vec(p, &image)); assert_eq!(computed_image.pivots(), &vec![0, 1, -1, -1, -1]);
    -
    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix +

    source

    pub fn compute_kernel(&self, first_source_column: usize) -> Subspace

    Computes the kernel from an augmented matrix in rref. To compute the kernel of a matrix A, produce an augmented matrix of the form

    [A | I]
     
    @@ -211,12 +211,12 @@
    Example
    let mut target = vec![0; 3]; assert_eq!(Vec::<u32>::from(&ker.matrix[0]), vec![1, 1, 2]);
    -
    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( +

    source

    pub fn extend_column_dimension(&mut self, columns: usize)

    source

    pub fn extend_to_surjection( &mut self, - start_column: usize, - end_column: usize, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the + start_column: usize, + end_column: usize, + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix M in rref, add rows to make the matrix surjective when restricted to the columns between start_column and end_column. That is, if M = [|B|] where B is between columns start_column and end_column, we want the new B to be surjective. This doesn’t change the size of the matrix. Rather, it adds the new row to the next empty row in the @@ -232,13 +232,13 @@

    Arguments
    Panics

    The function panics if there are not enough empty rows.

    -
    source

    pub fn extend_image( +

    source

    pub fn extend_image( &mut self, - start_column: usize, - end_column: usize, + start_column: usize, + end_column: usize, desired_image: &Subspace, - extra_column_capacity: usize -) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and + extra_column_capacity: usize +) -> Vec<usize>

    Given a matrix in rref, say [A|B|C], where B lies between columns start_column and end_columns, and a superspace of the image of B, add rows to the matrix such that the image of B becomes this superspace.

    The rows added are basis vectors of the desired image as specified in the Subspace object. @@ -246,7 +246,7 @@

    Panics
    Panics

    It may panic if the current image is not contained in desired_image, but is not guaranteed to do so.

    -
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    +
    source

    pub fn apply(&self, result: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Applies a matrix to a vector.

    Example
    let p = ValidPrime::new(7);
     let input  = [vec![1, 3, 6],
    @@ -258,7 +258,7 @@ 
    Example
    let desired_result = FpVector::from_slice(p, &vec![3, 5, 1]); m.apply(result.as_slice_mut(), 1, v.as_slice()); assert_eq!(result, desired_result);
    -
    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl AddAssign<&Matrix> for Matrix

    source§

    fn add_assign(&mut self, rhs: &Matrix)

    Performs the += operation. Read more
    source§

    impl Clone for Matrix

    source§

    fn clone(&self) -> Matrix

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    source

    pub fn trim(&mut self, row_start: usize, row_end: usize, col_start: usize)

    Trait Implementations§

    source§

    impl AddAssign<&Matrix> for Matrix

    source§

    fn add_assign(&mut self, rhs: &Matrix)

    Performs the += operation. Read more
    source§

    impl Clone for Matrix

    source§

    fn clone(&self) -> Matrix

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Matrix

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Example
    let m = Matrix::from_vec(ValidPrime::new(2),
        &[
             vec![0, 1, 0],
    @@ -266,22 +266,22 @@ 
    Example
    ]); assert_eq!(&format!("{m}"), "[\n [0, 1, 0],\n [1, 1, 0]\n]"); assert_eq!(&format!("{m:#}"), "010\n110");
    -
    source§

    impl<I> Index<I> for Matrixwhere - Vec<FpVector>: Index<I>,

    source§

    fn index(&self, i: I) -> &Self::Output

    Returns the ith row of the matrix

    -
    §

    type Output = <Vec<FpVector, Global> as Index<I>>::Output

    The returned type after indexing.
    source§

    impl<I> IndexMut<I> for Matrixwhere - Vec<FpVector>: IndexMut<I>,

    source§

    fn index_mut(&mut self, i: I) -> &mut Self::Output

    Returns the ith row of the matrix

    -
    source§

    impl<'a> IntoIterator for &'a Matrix

    §

    type Item = &'a FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = Iter<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<'a> IntoIterator for &'a mut Matrix

    §

    type Item = &'a mut FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = IterMut<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl Mul<&Matrix> for &Matrix

    §

    type Output = Matrix

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: Self) -> Matrix

    Performs the * operation. Read more
    source§

    impl MulAssign<u32> for Matrix

    source§

    fn mul_assign(&mut self, rhs: u32)

    Performs the *= operation. Read more
    source§

    impl PartialEq<Matrix> for Matrix

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Matrix

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl<I> Index<I> for Matrixwhere + Vec<FpVector>: Index<I>,

    source§

    fn index(&self, i: I) -> &Self::Output

    Returns the ith row of the matrix

    +
    §

    type Output = <Vec<FpVector, Global> as Index<I>>::Output

    The returned type after indexing.
    source§

    impl<I> IndexMut<I> for Matrixwhere + Vec<FpVector>: IndexMut<I>,

    source§

    fn index_mut(&mut self, i: I) -> &mut Self::Output

    Returns the ith row of the matrix

    +
    source§

    impl<'a> IntoIterator for &'a Matrix

    §

    type Item = &'a FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = Iter<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl<'a> IntoIterator for &'a mut Matrix

    §

    type Item = &'a mut FpVector

    The type of the elements being iterated over.
    §

    type IntoIter = IterMut<'a, FpVector>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl Mul<&Matrix> for &Matrix

    §

    type Output = Matrix

    The resulting type after applying the * operator.
    source§

    fn mul(self, rhs: Self) -> Matrix

    Performs the * operation. Read more
    source§

    impl MulAssign<u32> for Matrix

    source§

    fn mul_assign(&mut self, rhs: u32)

    Performs the *= operation. Read more
    source§

    impl PartialEq<Matrix> for Matrix

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Matrix

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.MatrixSliceMut.html b/docs/fp/matrix/struct.MatrixSliceMut.html index 73abe3235..d6b8a0819 100644 --- a/docs/fp/matrix/struct.MatrixSliceMut.html +++ b/docs/fp/matrix/struct.MatrixSliceMut.html @@ -1,4 +1,4 @@ -MatrixSliceMut in fp::matrix - Rust +MatrixSliceMut in fp::matrix - Rust @@ -23,25 +23,25 @@ }); -

    Struct fp::matrix::MatrixSliceMut

    source ·
    pub struct MatrixSliceMut<'a> {
    +

    Struct fp::matrix::MatrixSliceMut

    source ·
    pub struct MatrixSliceMut<'a> {
         vectors: &'a mut [FpVector],
    -    col_start: usize,
    -    col_end: usize,
    -}

    Fields§

    §vectors: &'a mut [FpVector]§col_start: usize§col_end: usize

    Implementations§

    source§

    impl<'a> MatrixSliceMut<'a>

    source

    pub fn columns(&self) -> usize

    source

    pub fn rows(&self) -> usize

    source

    pub fn row_slice<'b: 'a>( + col_start: usize, + col_end: usize, +}

    Fields§

    §vectors: &'a mut [FpVector]§col_start: usize§col_end: usize

    Implementations§

    source§

    impl<'a> MatrixSliceMut<'a>

    source

    pub fn columns(&self) -> usize

    source

    pub fn rows(&self) -> usize

    source

    pub fn row_slice<'b: 'a>( &'b mut self, - row_start: usize, - row_end: usize -) -> MatrixSliceMut<'b>

    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>> + '_

    source

    pub fn iter_mut(&mut self) -> impl Iterator<Item = SliceMut<'_>> + '_

    source

    pub fn par_iter_mut( + row_start: usize, + row_end: usize +) -> MatrixSliceMut<'b>

    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>> + '_

    source

    pub fn iter_mut(&mut self) -> impl Iterator<Item = SliceMut<'_>> + '_

    source

    pub fn maybe_par_iter_mut( &mut self -) -> impl IndexedParallelIterator<Item = SliceMut<'_>> + '_

    source

    pub fn row(&mut self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn add_identity(&mut self)

    source

    pub fn add_masked(&mut self, other: &Matrix, mask: &[usize])

    For each row, add the v[i]th entry of other to self.

    -

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for MatrixSliceMut<'a>

    §

    impl<'a> Send for MatrixSliceMut<'a>

    §

    impl<'a> Sync for MatrixSliceMut<'a>

    §

    impl<'a> Unpin for MatrixSliceMut<'a>

    §

    impl<'a> !UnwindSafe for MatrixSliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> impl MaybeIndexedParallelIterator<Item = SliceMut<'_>> + '_
    source

    pub fn row(&mut self, row: usize) -> Slice<'_>

    source

    pub fn row_mut(&mut self, row: usize) -> SliceMut<'_>

    source

    pub fn add_identity(&mut self)

    source

    pub fn add_masked(&mut self, other: &Matrix, mask: &[usize])

    For each row, add the v[i]th entry of other to self.

    +

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for MatrixSliceMut<'a>

    §

    impl<'a> Send for MatrixSliceMut<'a>

    §

    impl<'a> Sync for MatrixSliceMut<'a>

    §

    impl<'a> Unpin for MatrixSliceMut<'a>

    §

    impl<'a> !UnwindSafe for MatrixSliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.QuasiInverse.html b/docs/fp/matrix/struct.QuasiInverse.html index 3c0a4cace..33bf563bc 100644 --- a/docs/fp/matrix/struct.QuasiInverse.html +++ b/docs/fp/matrix/struct.QuasiInverse.html @@ -1,4 +1,4 @@ -QuasiInverse in fp::matrix - Rust +QuasiInverse in fp::matrix - Rust @@ -23,8 +23,8 @@ }); -

    Struct fp::matrix::QuasiInverse

    source ·
    pub struct QuasiInverse {
    -    image: Option<Vec<isize>>,
    +

    Struct fp::matrix::QuasiInverse

    source ·
    pub struct QuasiInverse {
    +    image: Option<Vec<isize>>,
         preimage: Matrix,
     }
    Expand description

    Given a matrix M, a quasi-inverse Q is a map from the co-domain to the domain such that xQM = x for all x in the image (recall our matrices act on the right).

    @@ -35,17 +35,17 @@

    Fields

  • preimage - The actual quasi-inverse, where the basis of the image is that given by image.
  • -

    Fields§

    §image: Option<Vec<isize>>§preimage: Matrix

    Implementations§

    source§

    impl QuasiInverse

    source

    pub fn new(image: Option<Vec<isize>>, preimage: Matrix) -> Self

    source

    pub fn image_dimension(&self) -> usize

    source

    pub fn source_dimension(&self) -> usize

    source

    pub fn target_dimension(&self) -> usize

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn stream_quasi_inverse<T, S>( +

    Fields§

    §image: Option<Vec<isize>>§preimage: Matrix

    Implementations§

    source§

    impl QuasiInverse

    source

    pub fn new(image: Option<Vec<isize>>, preimage: Matrix) -> Self

    source

    pub fn image_dimension(&self) -> usize

    source

    pub fn source_dimension(&self) -> usize

    source

    pub fn target_dimension(&self) -> usize

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn stream_quasi_inverse<T, S>( p: ValidPrime, - data: &mut impl Read, - results: &mut [T], - inputs: &[S] -) -> Result<()>where - for<'a> &'a mut T: Into<SliceMut<'a>>, - for<'a> &'a S: Into<Slice<'a>>,

    Given a data file containing a quasi-inverse, apply it to all the vectors in input + data: &mut impl Read, + results: &mut [T], + inputs: &[S] +) -> Result<()>where + for<'a> &'a mut T: Into<SliceMut<'a>>, + for<'a> &'a S: Into<Slice<'a>>,

    Given a data file containing a quasi-inverse, apply it to all the vectors in input and write the results to the corresponding vectors in results. This reads in the quasi-inverse row by row to minimize memory usage.

    -
    source

    pub fn preimage(&self) -> &Matrix

    source

    pub fn pivots(&self) -> Option<&[isize]>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn apply(&self, target: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Apply the quasi-inverse to an input vector and add a constant multiple of the result +

    source

    pub fn preimage(&self) -> &Matrix

    source

    pub fn pivots(&self) -> Option<&[isize]>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn apply(&self, target: SliceMut<'_>, coeff: u32, input: Slice<'_>)

    Apply the quasi-inverse to an input vector and add a constant multiple of the result to an output vector

    Arguments
      @@ -53,17 +53,17 @@
      Arguments
    • coeff - The constant multiple above
    • input - The input vector, expressed in the basis of the ambient space
    -

    Trait Implementations§

    source§

    impl Clone for QuasiInverse

    source§

    fn clone(&self) -> QuasiInverse

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for QuasiInverse

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<QuasiInverse> for QuasiInverse

    source§

    fn eq(&self, other: &QuasiInverse) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for QuasiInverse

    source§

    impl StructuralEq for QuasiInverse

    source§

    impl StructuralPartialEq for QuasiInverse

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Clone for QuasiInverse

    source§

    fn clone(&self) -> QuasiInverse

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for QuasiInverse

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<QuasiInverse> for QuasiInverse

    source§

    fn eq(&self, other: &QuasiInverse) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for QuasiInverse

    source§

    impl StructuralEq for QuasiInverse

    source§

    impl StructuralPartialEq for QuasiInverse

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.Subquotient.html b/docs/fp/matrix/struct.Subquotient.html index 6ce71357c..bf6de8937 100644 --- a/docs/fp/matrix/struct.Subquotient.html +++ b/docs/fp/matrix/struct.Subquotient.html @@ -1,4 +1,4 @@ -Subquotient in fp::matrix - Rust +Subquotient in fp::matrix - Rust @@ -23,27 +23,27 @@ }); -

    Struct fp::matrix::Subquotient

    source ·
    pub struct Subquotient {
    +

    Struct fp::matrix::Subquotient

    source ·
    pub struct Subquotient {
         gens: Subspace,
         quotient: Subspace,
    -    dimension: usize,
    -}

    Fields§

    §gens: Subspace§quotient: Subspace§dimension: usize

    Implementations§

    source§

    impl Subquotient

    source

    pub fn new(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim. This defaults to the zero + dimension: usize, +}

    Fields§

    §gens: Subspace§quotient: Subspace§dimension: usize

    Implementations§

    source§

    impl Subquotient

    source

    pub fn new(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim. This defaults to the zero subspace.

    -
    source

    pub fn new_full(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim, where the subspace is the +

    source

    pub fn new_full(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim, where the subspace is the full subspace and quotient is trivial.

    -
    source

    pub fn reduce(&self, elt: SliceMut<'_>) -> Vec<u32>

    Given a vector elt, project elt to the complement and express +

    source

    pub fn reduce(&self, elt: SliceMut<'_>) -> Vec<u32>

    Given a vector elt, project elt to the complement and express as a linear combination of the basis. The result is returned as a list of coefficients. If elt is nonzero afterwards, this means the vector was not in the subspace to begin with.

    source

    pub fn reduce_by_quotient(&self, elt: SliceMut<'_>)

    Project the vector onto the complement of the quotient part of the subquotient.

    source

    pub fn set_to_full(&mut self)

    Set the subquotient to be the full ambient space quotiented by zero

    -
    source

    pub fn zeros(&self) -> &Subspace

    source

    pub fn gens(&self) -> impl Iterator<Item = Slice<'_>>

    source

    pub fn quotient_dimension(&self) -> usize

    source

    pub fn subspace_dimension(&self) -> usize

    The dimension of the subspace part of the subquotient.

    -
    source

    pub fn subspace_gens(&self) -> impl Iterator<Item = Slice<'_>>

    The generators of the subspace part of the subquotient.

    -
    source

    pub fn complement_pivots(&self) -> impl Iterator<Item = usize> + '_

    The pivot columns of the complement to the subspace

    -
    source

    pub fn quotient(&mut self, elt: Slice<'_>)

    source

    pub fn dimension(&self) -> usize

    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn clear_gens(&mut self)

    source

    pub fn add_gen(&mut self, gen: Slice<'_>)

    source

    pub fn reduce_matrix( +

    source

    pub fn zeros(&self) -> &Subspace

    source

    pub fn gens(&self) -> impl Iterator<Item = Slice<'_>>

    source

    pub fn quotient_dimension(&self) -> usize

    source

    pub fn subspace_dimension(&self) -> usize

    The dimension of the subspace part of the subquotient.

    +
    source

    pub fn subspace_gens(&self) -> impl Iterator<Item = Slice<'_>>

    The generators of the subspace part of the subquotient.

    +
    source

    pub fn complement_pivots(&self) -> impl Iterator<Item = usize> + '_

    The pivot columns of the complement to the subspace

    +
    source

    pub fn quotient(&mut self, elt: Slice<'_>)

    source

    pub fn dimension(&self) -> usize

    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn clear_gens(&mut self)

    source

    pub fn add_gen(&mut self, gen: Slice<'_>)

    source

    pub fn reduce_matrix( matrix: &Matrix, - source: &Self, - target: &Self -) -> Vec<Vec<u32>>

    source

    pub fn from_parts(sub: Subspace, quotient: Subspace) -> Self

    Given a chain of subspaces subspace < space < k^ambient_dimension, compute the + source: &Self, + target: &Self +) -> Vec<Vec<u32>>

    source

    pub fn from_parts(sub: Subspace, quotient: Subspace) -> Self

    Given a chain of subspaces subspace < space < k^ambient_dimension, compute the subquotient space/subspace. The answer is expressed as a list of basis vectors of space whose image in space/subspace forms a basis, and a basis vector of space is described by its index in the list of basis vectors of space (not the ambient space).

    @@ -52,16 +52,16 @@
    Arguments
  • space - If this is None, it is the whole space k^ambient_dimension
  • subspace - If this is None, it is empty
  • -
    source

    pub fn quotient_pivots(&self) -> &[isize]

    Trait Implementations§

    source§

    impl Clone for Subquotient

    source§

    fn clone(&self) -> Subquotient

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for Subquotient

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn quotient_pivots(&self) -> &[isize]

    Trait Implementations§

    source§

    impl Clone for Subquotient

    source§

    fn clone(&self) -> Subquotient

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for Subquotient

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/struct.Subspace.html b/docs/fp/matrix/struct.Subspace.html index c2b619759..90cb83f42 100644 --- a/docs/fp/matrix/struct.Subspace.html +++ b/docs/fp/matrix/struct.Subspace.html @@ -1,4 +1,4 @@ -Subspace in fp::matrix - Rust +Subspace in fp::matrix - Rust @@ -23,7 +23,7 @@ }); -

    Struct fp::matrix::Subspace

    source ·
    #[repr(transparent)]
    pub struct Subspace { +

    Struct fp::matrix::Subspace

    source ·
    #[repr(transparent)]
    pub struct Subspace { pub matrix: Matrix, }
    Expand description

    A subspace of a vector space.

    In general, a method is defined on the Subspace if it is a meaningful property of the @@ -35,7 +35,7 @@

    Fields

  • matrix - A matrix in reduced row echelon, whose number of columns is the dimension of the ambient space and each row is a basis vector of the subspace.
  • -

    Fields§

    §matrix: Matrix

    Implementations§

    source§

    impl Subspace

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Self

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn empty_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn entire_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn add_vector(&mut self, row: Slice<'_>) -> usize

    This adds a vector to the subspace. This function assumes that the last row of the +

    Fields§

    §matrix: Matrix

    Implementations§

    source§

    impl Subspace

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Self

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn empty_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn entire_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn add_vector(&mut self, row: Slice<'_>) -> usize

    This adds a vector to the subspace. This function assumes that the last row of the matrix is zero, i.e. the dimension of the current subspace is strictly less than the number of rows. This can be achieved by setting the number of rows to be the dimension plus one when creating the subspace.

    @@ -43,31 +43,31 @@
    Returns

    The new dimension of the subspace

    source

    pub fn add_vectors( &mut self, - rows: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> + rows: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> )

    This adds some rows to the subspace

    Arguments
    • rows: A function that writes the row to be added to the given SliceMut. This returns None if it runs out of rows, Some(()) otherwise.
    -
    source

    pub fn add_basis_elements(&mut self, rows: impl Iterator<Item = usize>)

    source

    pub fn reduce(&self, vector: SliceMut<'_>)

    Projects a vector to a complement of the subspace. The complement is the set of vectors +

    source

    pub fn add_basis_elements(&mut self, rows: impl Iterator<Item = usize>)

    source

    pub fn reduce(&self, vector: SliceMut<'_>)

    Projects a vector to a complement of the subspace. The complement is the set of vectors that have a 0 in every column where there is a pivot in matrix

    -
    source

    pub fn contains(&self, vector: Slice<'_>) -> bool

    source

    pub fn dimension(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    Whether the subspace is empty. This assumes the subspace is row reduced.

    -
    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn basis(&self) -> &[FpVector]

    Returns a basis of the subspace.

    +
    source

    pub fn contains(&self, vector: Slice<'_>) -> bool

    source

    pub fn dimension(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    Whether the subspace is empty. This assumes the subspace is row reduced.

    +
    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn basis(&self) -> &[FpVector]

    Returns a basis of the subspace.

    source

    pub fn set_to_zero(&mut self)

    Sets the subspace to be the zero subspace.

    source

    pub fn set_to_entire(&mut self)

    Sets the subspace to be the entire subspace.

    -
    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>>

    Trait Implementations§

    source§

    impl Clone for Subspace

    source§

    fn clone(&self) -> Subspace

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<Subspace> for Subspace

    source§

    fn eq(&self, other: &Subspace) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Subspace

    source§

    impl StructuralEq for Subspace

    source§

    impl StructuralPartialEq for Subspace

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>>

    Trait Implementations§

    source§

    impl Clone for Subspace

    source§

    fn clone(&self) -> Subspace

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<Subspace> for Subspace

    source§

    fn eq(&self, other: &Subspace) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Subspace

    source§

    impl StructuralEq for Subspace

    source§

    impl StructuralPartialEq for Subspace

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/subquotient/index.html b/docs/fp/matrix/subquotient/index.html index 4444e8306..cfd040199 100644 --- a/docs/fp/matrix/subquotient/index.html +++ b/docs/fp/matrix/subquotient/index.html @@ -1,4 +1,4 @@ -fp::matrix::subquotient - Rust +fp::matrix::subquotient - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/fp/matrix/subquotient/struct.Subquotient.html b/docs/fp/matrix/subquotient/struct.Subquotient.html index 1d97d5fd4..c67289f0c 100644 --- a/docs/fp/matrix/subquotient/struct.Subquotient.html +++ b/docs/fp/matrix/subquotient/struct.Subquotient.html @@ -1,4 +1,4 @@ -Subquotient in fp::matrix::subquotient - Rust +Subquotient in fp::matrix::subquotient - Rust @@ -23,27 +23,27 @@ }); -
    pub struct Subquotient {
    +
    pub struct Subquotient {
         gens: Subspace,
         quotient: Subspace,
    -    dimension: usize,
    -}

    Fields§

    §gens: Subspace§quotient: Subspace§dimension: usize

    Implementations§

    source§

    impl Subquotient

    source

    pub fn new(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim. This defaults to the zero + dimension: usize, +}

    Fields§

    §gens: Subspace§quotient: Subspace§dimension: usize

    Implementations§

    source§

    impl Subquotient

    source

    pub fn new(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim. This defaults to the zero subspace.

    -
    source

    pub fn new_full(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim, where the subspace is the +

    source

    pub fn new_full(p: ValidPrime, dim: usize) -> Self

    Create a new subquotient of an ambient space of dimension dim, where the subspace is the full subspace and quotient is trivial.

    -
    source

    pub fn reduce(&self, elt: SliceMut<'_>) -> Vec<u32>

    Given a vector elt, project elt to the complement and express +

    source

    pub fn reduce(&self, elt: SliceMut<'_>) -> Vec<u32>

    Given a vector elt, project elt to the complement and express as a linear combination of the basis. The result is returned as a list of coefficients. If elt is nonzero afterwards, this means the vector was not in the subspace to begin with.

    source

    pub fn reduce_by_quotient(&self, elt: SliceMut<'_>)

    Project the vector onto the complement of the quotient part of the subquotient.

    source

    pub fn set_to_full(&mut self)

    Set the subquotient to be the full ambient space quotiented by zero

    -
    source

    pub fn zeros(&self) -> &Subspace

    source

    pub fn gens(&self) -> impl Iterator<Item = Slice<'_>>

    source

    pub fn quotient_dimension(&self) -> usize

    source

    pub fn subspace_dimension(&self) -> usize

    The dimension of the subspace part of the subquotient.

    -
    source

    pub fn subspace_gens(&self) -> impl Iterator<Item = Slice<'_>>

    The generators of the subspace part of the subquotient.

    -
    source

    pub fn complement_pivots(&self) -> impl Iterator<Item = usize> + '_

    The pivot columns of the complement to the subspace

    -
    source

    pub fn quotient(&mut self, elt: Slice<'_>)

    source

    pub fn dimension(&self) -> usize

    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn clear_gens(&mut self)

    source

    pub fn add_gen(&mut self, gen: Slice<'_>)

    source

    pub fn reduce_matrix( +

    source

    pub fn zeros(&self) -> &Subspace

    source

    pub fn gens(&self) -> impl Iterator<Item = Slice<'_>>

    source

    pub fn quotient_dimension(&self) -> usize

    source

    pub fn subspace_dimension(&self) -> usize

    The dimension of the subspace part of the subquotient.

    +
    source

    pub fn subspace_gens(&self) -> impl Iterator<Item = Slice<'_>>

    The generators of the subspace part of the subquotient.

    +
    source

    pub fn complement_pivots(&self) -> impl Iterator<Item = usize> + '_

    The pivot columns of the complement to the subspace

    +
    source

    pub fn quotient(&mut self, elt: Slice<'_>)

    source

    pub fn dimension(&self) -> usize

    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn clear_gens(&mut self)

    source

    pub fn add_gen(&mut self, gen: Slice<'_>)

    source

    pub fn reduce_matrix( matrix: &Matrix, - source: &Self, - target: &Self -) -> Vec<Vec<u32>>

    source

    pub fn from_parts(sub: Subspace, quotient: Subspace) -> Self

    Given a chain of subspaces subspace < space < k^ambient_dimension, compute the + source: &Self, + target: &Self +) -> Vec<Vec<u32>>

    source

    pub fn from_parts(sub: Subspace, quotient: Subspace) -> Self

    Given a chain of subspaces subspace < space < k^ambient_dimension, compute the subquotient space/subspace. The answer is expressed as a list of basis vectors of space whose image in space/subspace forms a basis, and a basis vector of space is described by its index in the list of basis vectors of space (not the ambient space).

    @@ -52,16 +52,16 @@
    Arguments
  • space - If this is None, it is the whole space k^ambient_dimension
  • subspace - If this is None, it is empty
  • -
    source

    pub fn quotient_pivots(&self) -> &[isize]

    Trait Implementations§

    source§

    impl Clone for Subquotient

    source§

    fn clone(&self) -> Subquotient

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for Subquotient

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn quotient_pivots(&self) -> &[isize]

    Trait Implementations§

    source§

    impl Clone for Subquotient

    source§

    fn clone(&self) -> Subquotient

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Display for Subquotient

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/matrix/subspace/index.html b/docs/fp/matrix/subspace/index.html index 7894db709..353c844be 100644 --- a/docs/fp/matrix/subspace/index.html +++ b/docs/fp/matrix/subspace/index.html @@ -1,4 +1,4 @@ -fp::matrix::subspace - Rust +fp::matrix::subspace - Rust @@ -23,4 +23,4 @@ }); -

    Module fp::matrix::subspace

    source ·

    Structs

    \ No newline at end of file +

    Module fp::matrix::subspace

    source ·

    Structs

    \ No newline at end of file diff --git a/docs/fp/matrix/subspace/struct.Subspace.html b/docs/fp/matrix/subspace/struct.Subspace.html index f5d5c8f36..60041bc65 100644 --- a/docs/fp/matrix/subspace/struct.Subspace.html +++ b/docs/fp/matrix/subspace/struct.Subspace.html @@ -1,4 +1,4 @@ -Subspace in fp::matrix::subspace - Rust +Subspace in fp::matrix::subspace - Rust @@ -23,7 +23,7 @@ }); -

    Struct fp::matrix::subspace::Subspace

    source ·
    #[repr(transparent)]
    pub struct Subspace { +

    Struct fp::matrix::subspace::Subspace

    source ·
    #[repr(transparent)]
    pub struct Subspace { pub matrix: Matrix, }
    Expand description

    A subspace of a vector space.

    In general, a method is defined on the Subspace if it is a meaningful property of the @@ -35,7 +35,7 @@

    Fields

  • matrix - A matrix in reduced row echelon, whose number of columns is the dimension of the ambient space and each row is a basis vector of the subspace.
  • -

    Fields§

    §matrix: Matrix

    Implementations§

    source§

    impl Subspace

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Self

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn empty_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn entire_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn add_vector(&mut self, row: Slice<'_>) -> usize

    This adds a vector to the subspace. This function assumes that the last row of the +

    Fields§

    §matrix: Matrix

    Implementations§

    source§

    impl Subspace

    source

    pub fn new(p: ValidPrime, rows: usize, columns: usize) -> Self

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn pivots(&self) -> &[isize]

    source

    pub fn from_bytes(p: ValidPrime, data: &mut impl Read) -> Result<Self>

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn empty_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn entire_space(p: ValidPrime, dim: usize) -> Self

    source

    pub fn add_vector(&mut self, row: Slice<'_>) -> usize

    This adds a vector to the subspace. This function assumes that the last row of the matrix is zero, i.e. the dimension of the current subspace is strictly less than the number of rows. This can be achieved by setting the number of rows to be the dimension plus one when creating the subspace.

    @@ -43,31 +43,31 @@
    Returns

    The new dimension of the subspace

    source

    pub fn add_vectors( &mut self, - rows: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> + rows: impl for<'a> FnMut(SliceMut<'a>) -> Option<()> )

    This adds some rows to the subspace

    Arguments
    • rows: A function that writes the row to be added to the given SliceMut. This returns None if it runs out of rows, Some(()) otherwise.
    -
    source

    pub fn add_basis_elements(&mut self, rows: impl Iterator<Item = usize>)

    source

    pub fn reduce(&self, vector: SliceMut<'_>)

    Projects a vector to a complement of the subspace. The complement is the set of vectors +

    source

    pub fn add_basis_elements(&mut self, rows: impl Iterator<Item = usize>)

    source

    pub fn reduce(&self, vector: SliceMut<'_>)

    Projects a vector to a complement of the subspace. The complement is the set of vectors that have a 0 in every column where there is a pivot in matrix

    -
    source

    pub fn contains(&self, vector: Slice<'_>) -> bool

    source

    pub fn dimension(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    Whether the subspace is empty. This assumes the subspace is row reduced.

    -
    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn basis(&self) -> &[FpVector]

    Returns a basis of the subspace.

    +
    source

    pub fn contains(&self, vector: Slice<'_>) -> bool

    source

    pub fn dimension(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    Whether the subspace is empty. This assumes the subspace is row reduced.

    +
    source

    pub fn ambient_dimension(&self) -> usize

    source

    pub fn basis(&self) -> &[FpVector]

    Returns a basis of the subspace.

    source

    pub fn set_to_zero(&mut self)

    Sets the subspace to be the zero subspace.

    source

    pub fn set_to_entire(&mut self)

    Sets the subspace to be the entire subspace.

    -
    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>>

    Trait Implementations§

    source§

    impl Clone for Subspace

    source§

    fn clone(&self) -> Subspace

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<Subspace> for Subspace

    source§

    fn eq(&self, other: &Subspace) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Subspace

    source§

    impl StructuralEq for Subspace

    source§

    impl StructuralPartialEq for Subspace

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn iter(&self) -> impl Iterator<Item = Slice<'_>>

    Trait Implementations§

    source§

    impl Clone for Subspace

    source§

    fn clone(&self) -> Subspace

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Subspace

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq<Subspace> for Subspace

    source§

    fn eq(&self, other: &Subspace) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for Subspace

    source§

    impl StructuralEq for Subspace

    source§

    impl StructuralPartialEq for Subspace

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/prime/constant.TWO.html b/docs/fp/prime/constant.TWO.html index 7a7febb3d..14ec912fa 100644 --- a/docs/fp/prime/constant.TWO.html +++ b/docs/fp/prime/constant.TWO.html @@ -1,4 +1,4 @@ -TWO in fp::prime - Rust +TWO in fp::prime - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::prime::TWO

    source ·
    pub const TWO: ValidPrime;
    \ No newline at end of file +

    Constant fp::prime::TWO

    source ·
    pub const TWO: ValidPrime;
    \ No newline at end of file diff --git a/docs/fp/prime/fn.direct_binomial.html b/docs/fp/prime/fn.direct_binomial.html index fa53d9624..835e921a6 100644 --- a/docs/fp/prime/fn.direct_binomial.html +++ b/docs/fp/prime/fn.direct_binomial.html @@ -1,4 +1,4 @@ -direct_binomial in fp::prime - Rust +direct_binomial in fp::prime - Rust @@ -23,7 +23,7 @@ }); -

    Function fp::prime::direct_binomial

    source ·
    unsafe fn direct_binomial(p: ValidPrime, n: usize, k: usize) -> u32
    Expand description

    This uses a lookup table for n choose k when n and k are both less than p. +

    Function fp::prime::direct_binomial

    source ·
    unsafe fn direct_binomial(p: ValidPrime, n: usize, k: usize) -> u32
    Expand description

    This uses a lookup table for n choose k when n and k are both less than p. Lucas’s theorem reduces general binomial coefficients to this case.

    Calling this function safely requires that k, n < p. These invariants are often known apriori because k and n are obtained by reducing mod p, so it is better to expose an unsafe diff --git a/docs/fp/prime/fn.factor_pk.html b/docs/fp/prime/fn.factor_pk.html index 719bb83d0..20f9776ee 100644 --- a/docs/fp/prime/fn.factor_pk.html +++ b/docs/fp/prime/fn.factor_pk.html @@ -1,4 +1,4 @@ -factor_pk in fp::prime - Rust +factor_pk in fp::prime - Rust @@ -23,5 +23,5 @@ }); -

    Function fp::prime::factor_pk

    source ·
    pub const fn factor_pk(p: u32, n: u32) -> (u32, u32)
    Expand description

    Factor $n$ as $p^k m$. Returns $(k, m)$.

    +

    Function fp::prime::factor_pk

    source ·
    pub const fn factor_pk(p: u32, n: u32) -> (u32, u32)
    Expand description

    Factor $n$ as $p^k m$. Returns $(k, m)$.

    \ No newline at end of file diff --git a/docs/fp/prime/fn.integer_power.html b/docs/fp/prime/fn.integer_power.html index 3790d3f36..f5cfaa518 100644 --- a/docs/fp/prime/fn.integer_power.html +++ b/docs/fp/prime/fn.integer_power.html @@ -1,4 +1,4 @@ -integer_power in fp::prime - Rust +integer_power in fp::prime - Rust @@ -23,5 +23,5 @@ }); -

    Function fp::prime::integer_power

    source ·
    pub const fn integer_power(b: u32, e: u32) -> u32
    Expand description

    Computes b^e.

    +

    Function fp::prime::integer_power

    source ·
    pub const fn integer_power(b: u32, e: u32) -> u32
    Expand description

    Computes b^e.

    \ No newline at end of file diff --git a/docs/fp/prime/fn.inverse.html b/docs/fp/prime/fn.inverse.html index c2679a90e..36fd31a67 100644 --- a/docs/fp/prime/fn.inverse.html +++ b/docs/fp/prime/fn.inverse.html @@ -1,4 +1,4 @@ -inverse in fp::prime - Rust +inverse in fp::prime - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::prime::inverse

    source ·
    pub fn inverse(p: ValidPrime, k: u32) -> u32
    \ No newline at end of file +

    Function fp::prime::inverse

    source ·
    pub fn inverse(p: ValidPrime, k: u32) -> u32
    \ No newline at end of file diff --git a/docs/fp/prime/fn.is_valid_prime.html b/docs/fp/prime/fn.is_valid_prime.html index d80e1b1d6..2fe15a2b8 100644 --- a/docs/fp/prime/fn.is_valid_prime.html +++ b/docs/fp/prime/fn.is_valid_prime.html @@ -1,4 +1,4 @@ -is_valid_prime in fp::prime - Rust +is_valid_prime in fp::prime - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::prime::is_valid_prime

    source ·
    pub const fn is_valid_prime(p: u32) -> bool
    \ No newline at end of file +

    Function fp::prime::is_valid_prime

    source ·
    pub const fn is_valid_prime(p: u32) -> bool
    \ No newline at end of file diff --git a/docs/fp/prime/fn.log2.html b/docs/fp/prime/fn.log2.html index dc3df98e4..2ff1a0bd0 100644 --- a/docs/fp/prime/fn.log2.html +++ b/docs/fp/prime/fn.log2.html @@ -1,4 +1,4 @@ -log2 in fp::prime - Rust +log2 in fp::prime - Rust @@ -23,7 +23,7 @@ }); -

    Function fp::prime::log2

    source ·
    pub const fn log2(n: usize) -> usize
    Expand description

    Compute the base 2 log of a number, rounded down to the nearest integer.

    +

    Function fp::prime::log2

    source ·
    pub const fn log2(n: usize) -> usize
    Expand description

    Compute the base 2 log of a number, rounded down to the nearest integer.

    Example

    assert_eq!(0, log2(0b1));
     assert_eq!(1, log2(0b10));
    diff --git a/docs/fp/prime/fn.logp.html b/docs/fp/prime/fn.logp.html
    index fafe7e82b..882062f48 100644
    --- a/docs/fp/prime/fn.logp.html
    +++ b/docs/fp/prime/fn.logp.html
    @@ -1,4 +1,4 @@
    -logp in fp::prime - Rust
    +logp in fp::prime - Rust
     
     
     
    @@ -23,5 +23,5 @@
         });
     
     
    -

    Function fp::prime::logp

    source ·
    pub const fn logp(p: u32, n: u32) -> u32
    Expand description

    Discrete log base p of n.

    +

    Function fp::prime::logp

    source ·
    pub const fn logp(p: u32, n: u32) -> u32
    Expand description

    Discrete log base p of n.

    \ No newline at end of file diff --git a/docs/fp/prime/fn.minus_one_to_the_n.html b/docs/fp/prime/fn.minus_one_to_the_n.html index 8b3bae4aa..e62221f45 100644 --- a/docs/fp/prime/fn.minus_one_to_the_n.html +++ b/docs/fp/prime/fn.minus_one_to_the_n.html @@ -1,4 +1,4 @@ -minus_one_to_the_n in fp::prime - Rust +minus_one_to_the_n in fp::prime - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::prime::minus_one_to_the_n

    source ·
    pub const fn minus_one_to_the_n(p: u32, i: i32) -> u32
    \ No newline at end of file +

    Function fp::prime::minus_one_to_the_n

    source ·
    pub const fn minus_one_to_the_n(p: u32, i: i32) -> u32
    \ No newline at end of file diff --git a/docs/fp/prime/fn.power_mod.html b/docs/fp/prime/fn.power_mod.html index 2e4e1165d..41dfb8817 100644 --- a/docs/fp/prime/fn.power_mod.html +++ b/docs/fp/prime/fn.power_mod.html @@ -1,4 +1,4 @@ -power_mod in fp::prime - Rust +power_mod in fp::prime - Rust @@ -23,5 +23,5 @@ }); -

    Function fp::prime::power_mod

    source ·
    pub const fn power_mod(p: u32, b: u32, e: u32) -> u32
    Expand description

    Compute b^e mod p.

    +

    Function fp::prime::power_mod

    source ·
    pub const fn power_mod(p: u32, b: u32, e: u32) -> u32
    Expand description

    Compute b^e mod p.

    \ No newline at end of file diff --git a/docs/fp/prime/index.html b/docs/fp/prime/index.html index d844b1de5..b5da86798 100644 --- a/docs/fp/prime/index.html +++ b/docs/fp/prime/index.html @@ -1,4 +1,4 @@ -fp::prime - Rust +fp::prime - Rust @@ -23,7 +23,7 @@ }); -

    Module fp::prime

    source ·

    Macros

    Structs

    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where + Self: Sized, + Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where - Self: Sized, - Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where - Self: Sized, - Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere - I: IntoIterator<Item = Self::Item>, - Self::Item: Ord, - Self: Sized,

    Lexicographically compares the elements of this Iterator with those -of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

    Lexicographically compares the elements of this Iterator with those +of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere - T: Iterator + Send, - <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere + T: Iterator + Send, + <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/prime/struct.BitflagIterator.html b/docs/fp/prime/struct.BitflagIterator.html index 5ed61abee..2f0846352 100644 --- a/docs/fp/prime/struct.BitflagIterator.html +++ b/docs/fp/prime/struct.BitflagIterator.html @@ -1,4 +1,4 @@ -BitflagIterator in fp::prime - Rust +BitflagIterator in fp::prime - Rust @@ -23,532 +23,532 @@ }); -

    Struct fp::prime::BitflagIterator

    source ·
    pub struct BitflagIterator {
    -    remaining: u8,
    -    flag: u64,
    -}

    Fields§

    §remaining: u8§flag: u64

    Implementations§

    source§

    impl BitflagIterator

    source

    pub fn new(flag: u64) -> Self

    source

    pub fn new_fixed_length(flag: u64, remaining: usize) -> Self

    source

    pub fn set_bit_iterator(flag: u64) -> impl Iterator<Item = usize>

    Trait Implementations§

    source§

    impl Iterator for BitflagIterator

    §

    type Item = bool

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Struct fp::prime::BitflagIterator

    source ·
    pub struct BitflagIterator {
    +    remaining: u8,
    +    flag: u64,
    +}

    Fields§

    §remaining: u8§flag: u64

    Implementations§

    source§

    impl BitflagIterator

    source

    pub fn new(flag: u64) -> Self

    source

    pub fn new_fixed_length(flag: u64, remaining: usize) -> Self

    source

    pub fn set_bit_iterator(flag: u64) -> impl Iterator<Item = usize>

    Trait Implementations§

    source§

    impl Iterator for BitflagIterator

    §

    type Item = bool

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where - Self: Sized, - Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse(self, separator: Self::Item) -> Intersperse<Self>where + Self: Sized, + Self::Item: Clone,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where - Self: Sized, - Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where - Self: Sized, - Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere - I: IntoIterator<Item = Self::Item>, - Self::Item: Ord, - Self: Sized,

    Lexicographically compares the elements of this Iterator with those -of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.0.0 · source§

    fn max(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the maximum element of an iterator. Read more
    1.0.0 · source§

    fn min(self) -> Option<Self::Item>where + Self: Sized, + Self::Item: Ord,

    Returns the minimum element of an iterator. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    1.5.0 · source§

    fn cmp<I>(self, other: I) -> Orderingwhere + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

    Lexicographically compares the elements of this Iterator with those +of another. Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted(self) -> boolwhere + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere - T: Iterator + Send, - <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> ParallelBridge for Twhere + T: Iterator + Send, + <T as Iterator>::Item: Send,

    §

    fn par_bridge(self) -> IterBridge<T>

    Creates a bridge from this type to a ParallelIterator.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/prime/struct.InvalidPrimeError.html b/docs/fp/prime/struct.InvalidPrimeError.html index 151ed89fa..b3271fd62 100644 --- a/docs/fp/prime/struct.InvalidPrimeError.html +++ b/docs/fp/prime/struct.InvalidPrimeError.html @@ -1,4 +1,4 @@ -InvalidPrimeError in fp::prime - Rust +InvalidPrimeError in fp::prime - Rust @@ -23,15 +23,15 @@ }); -

    Struct fp::prime::InvalidPrimeError

    source ·
    pub struct InvalidPrimeError(u32);

    Tuple Fields§

    §0: u32

    Trait Implementations§

    source§

    impl Debug for InvalidPrimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for InvalidPrimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for InvalidPrimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Struct fp::prime::InvalidPrimeError

    source ·
    pub struct InvalidPrimeError(u32);

    Tuple Fields§

    §0: u32

    Trait Implementations§

    source§

    impl Debug for InvalidPrimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for InvalidPrimeError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for InvalidPrimeError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/prime/struct.ValidPrime.html b/docs/fp/prime/struct.ValidPrime.html index 4c080e35f..7fd8715a5 100644 --- a/docs/fp/prime/struct.ValidPrime.html +++ b/docs/fp/prime/struct.ValidPrime.html @@ -1,4 +1,4 @@ -ValidPrime in fp::prime - Rust +ValidPrime in fp::prime - Rust @@ -23,30 +23,30 @@ }); -

    Struct fp::prime::ValidPrime

    source ·
    pub struct ValidPrime {
    -    p: u32,
    -}

    Fields§

    §p: u32

    Implementations§

    source§

    impl ValidPrime

    source

    pub const fn new(p: u32) -> Self

    source

    pub const fn value(&self) -> u32

    Get the underlying prime. This is the same function as deref but

    +

    Struct fp::prime::ValidPrime

    source ·
    pub struct ValidPrime {
    +    p: u32,
    +}

    Fields§

    §p: u32

    Implementations§

    source§

    impl ValidPrime

    source

    pub const fn new(p: u32) -> Self

    source

    pub const fn value(&self) -> u32

    Get the underlying prime. This is the same function as deref but

    1. This is a const fn
    2. This does not inform the compiler about properties of p via unreachable_unchecked.

    Use this function in a const context where you would expect it to be evaluated at compile-time.

    -

    Methods from Deref<Target = u32>§

    1.43.0 · source

    pub const MIN: u32 = 0u32

    1.43.0 · source

    pub const MAX: u32 = 4_294_967_295u32

    1.53.0 · source

    pub const BITS: u32 = 32u32

    Trait Implementations§

    source§

    impl Clone for ValidPrime

    source§

    fn clone(&self) -> ValidPrime

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ValidPrime

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for ValidPrime

    §

    type Target = u32

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<'de> Deserialize<'de> for ValidPrime

    source§

    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for ValidPrime

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ValidPrime> for u32

    source§

    fn from(p: ValidPrime) -> u32

    Converts to this type from the input type.
    source§

    impl FromStr for ValidPrime

    §

    type Err = String

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, String>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<ValidPrime> for ValidPrime

    source§

    fn eq(&self, other: &ValidPrime) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ValidPrime

    source§

    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where - S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl TryFrom<u32> for ValidPrime

    §

    type Error = InvalidPrimeError

    The type returned in the event of a conversion error.
    source§

    fn try_from(p: u32) -> Result<Self, InvalidPrimeError>

    Performs the conversion.
    source§

    impl Copy for ValidPrime

    source§

    impl Eq for ValidPrime

    source§

    impl StructuralEq for ValidPrime

    source§

    impl StructuralPartialEq for ValidPrime

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Methods from Deref<Target = u32>§

    1.43.0 · source

    pub const MIN: u32 = 0u32

    1.43.0 · source

    pub const MAX: u32 = 4_294_967_295u32

    1.53.0 · source

    pub const BITS: u32 = 32u32

    Trait Implementations§

    source§

    impl Clone for ValidPrime

    source§

    fn clone(&self) -> ValidPrime

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ValidPrime

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for ValidPrime

    §

    type Target = u32

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<'de> Deserialize<'de> for ValidPrime

    source§

    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for ValidPrime

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<ValidPrime> for u32

    source§

    fn from(p: ValidPrime) -> u32

    Converts to this type from the input type.
    source§

    impl FromStr for ValidPrime

    §

    type Err = String

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<Self, String>

    Parses a string s to return a value of this type. Read more
    source§

    impl PartialEq<ValidPrime> for ValidPrime

    source§

    fn eq(&self, other: &ValidPrime) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ValidPrime

    source§

    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where + S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl TryFrom<u32> for ValidPrime

    §

    type Error = InvalidPrimeError

    The type returned in the event of a conversion error.
    source§

    fn try_from(p: u32) -> Result<Self, InvalidPrimeError>

    Performs the conversion.
    source§

    impl Copy for ValidPrime

    source§

    impl Eq for ValidPrime

    source§

    impl StructuralEq for ValidPrime

    source§

    impl StructuralPartialEq for ValidPrime

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/fp/prime/trait.Binomial.html b/docs/fp/prime/trait.Binomial.html index 941d86c4a..4bb1eba02 100644 --- a/docs/fp/prime/trait.Binomial.html +++ b/docs/fp/prime/trait.Binomial.html @@ -1,4 +1,4 @@ -Binomial in fp::prime - Rust +Binomial in fp::prime - Rust @@ -23,37 +23,37 @@ }); -

    Trait fp::prime::Binomial

    source ·
    pub trait Binomial: Sized {
    +

    Trait fp::prime::Binomial

    source ·
    pub trait Binomial: Sized {
         // Required methods
    -    fn multinomial2(k: &[Self]) -> Self;
    +    fn multinomial2(k: &[Self]) -> Self;
         fn binomial2(n: Self, k: Self) -> Self;
         fn binomial4(n: Self, k: Self) -> Self;
         fn binomial4_rec(n: Self, k: Self) -> Self;
    -    fn multinomial_odd(p: ValidPrime, l: &mut [Self]) -> Self;
    +    fn multinomial_odd(p: ValidPrime, l: &mut [Self]) -> Self;
         fn binomial_odd(p: ValidPrime, n: Self, k: Self) -> Self;
    -    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool;
    +    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool;
     
         // Provided methods
    -    fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self { ... }
    +    fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self { ... }
         fn binomial(p: ValidPrime, n: Self, k: Self) -> Self { ... }
     }
    Expand description

    A number satisfying the Binomial trait supports computing various binomial coefficients. This is implemented using a macro, since the implementation for all types is syntactically the same.

    -

    Required Methods§

    source

    fn multinomial2(k: &[Self]) -> Self

    mod 2 multinomial coefficient

    -
    source

    fn binomial2(n: Self, k: Self) -> Self

    mod 2 binomial coefficient n choose k

    -
    source

    fn binomial4(n: Self, k: Self) -> Self

    Binomial coefficients mod 4. We pre-compute the coefficients for small values of n. For large +

    Required Methods§

    source

    fn multinomial2(k: &[Self]) -> Self

    mod 2 multinomial coefficient

    +
    source

    fn binomial2(n: Self, k: Self) -> Self

    mod 2 binomial coefficient n choose k

    +
    source

    fn binomial4(n: Self, k: Self) -> Self

    Binomial coefficients mod 4. We pre-compute the coefficients for small values of n. For large n, we recursively use the fact that if n = 2^k + l, l < 2^k, then

    n choose r = l choose r + 2 (l choose (r - 2^{k - 1})) + (l choose (r - 2^k))

    This is easy to verify using the fact that

    (x + y)^{2^k} = x^{2^k} + 2 x^{2^{k - 1}} y^{2^{k - 1}} + y^{2^k}

    -
    source

    fn binomial4_rec(n: Self, k: Self) -> Self

    Compute binomial coefficients mod 4 using the recursion relation in the documentation of +

    source

    fn binomial4_rec(n: Self, k: Self) -> Self

    Compute binomial coefficients mod 4 using the recursion relation in the documentation of Binomial::binomial4. This calls into binomial4 instead of binomial4_rec. The main purpose of this is to separate out the logic for testing.

    -
    source

    fn multinomial_odd(p: ValidPrime, l: &mut [Self]) -> Self

    Computes the multinomial coefficient mod p using Lucas’ theorem. This modifies the +

    source

    fn multinomial_odd(p: ValidPrime, l: &mut [Self]) -> Self

    Computes the multinomial coefficient mod p using Lucas’ theorem. This modifies the underlying list. For p = 2 it is more efficient to use multinomial2

    -
    source

    fn binomial_odd(p: ValidPrime, n: Self, k: Self) -> Self

    Compute odd binomial coefficients mod p, where p is odd. For p = 2 it is more efficient to +

    source

    fn binomial_odd(p: ValidPrime, n: Self, k: Self) -> Self

    Compute odd binomial coefficients mod p, where p is odd. For p = 2 it is more efficient to use binomial2

    -
    source

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    Checks whether n choose k is zero mod p. Since we don’t have to compute the value, this is +

    source

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    Checks whether n choose k is zero mod p. Since we don’t have to compute the value, this is faster than binomial_odd.

    -

    Provided Methods§

    source

    fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self

    Multinomial coefficient of the list l

    -
    source

    fn binomial(p: ValidPrime, n: Self, k: Self) -> Self

    Binomial coefficient n choose k.

    -

    Implementations on Foreign Types§

    source§

    impl Binomial for u16

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    source§

    impl Binomial for u32

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    source§

    impl Binomial for i32

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    source

    fn multinomial(p: ValidPrime, l: &mut [Self]) -> Self

    Multinomial coefficient of the list l

    +
    source

    fn binomial(p: ValidPrime, n: Self, k: Self) -> Self

    Binomial coefficient n choose k.

    +

    Implementations on Foreign Types§

    source§

    impl Binomial for u16

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    source§

    impl Binomial for u32

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    source§

    impl Binomial for i32

    source§

    fn multinomial2(l: &[Self]) -> Self

    source§

    fn binomial2(n: Self, k: Self) -> Self

    source§

    fn multinomial_odd(p_: ValidPrime, l: &mut [Self]) -> Self

    source§

    fn binomial_odd(p_: ValidPrime, n: Self, k: Self) -> Self

    source§

    fn binomial_odd_is_zero(p: ValidPrime, n: Self, k: Self) -> bool

    source§

    fn binomial4(n: Self, j: Self) -> Self

    source§

    fn binomial4_rec(n: Self, j: Self) -> Self

    Implementors§

    \ No newline at end of file diff --git a/docs/fp/simd/constant.LIMBS_PER_SIMD.html b/docs/fp/simd/constant.LIMBS_PER_SIMD.html index 7bf67ace3..d91374624 100644 --- a/docs/fp/simd/constant.LIMBS_PER_SIMD.html +++ b/docs/fp/simd/constant.LIMBS_PER_SIMD.html @@ -1,4 +1,4 @@ -LIMBS_PER_SIMD in fp::simd - Rust +LIMBS_PER_SIMD in fp::simd - Rust @@ -23,4 +23,4 @@ }); -

    Constant fp::simd::LIMBS_PER_SIMD

    source ·
    const LIMBS_PER_SIMD: usize = _; // 2usize
    \ No newline at end of file +

    Constant fp::simd::LIMBS_PER_SIMD

    source ·
    const LIMBS_PER_SIMD: usize = _; // 2usize
    \ No newline at end of file diff --git a/docs/fp/simd/fn.add_simd.html b/docs/fp/simd/fn.add_simd.html index 9fbc4bbfd..23b8f41db 100644 --- a/docs/fp/simd/fn.add_simd.html +++ b/docs/fp/simd/fn.add_simd.html @@ -1,4 +1,4 @@ -add_simd in fp::simd - Rust +add_simd in fp::simd - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::simd::add_simd

    source ·
    pub(crate) fn add_simd(target: &mut [u64], source: &[u64], min_limb: usize)
    \ No newline at end of file +

    Function fp::simd::add_simd

    source ·
    pub(crate) fn add_simd(target: &mut [u64], source: &[u64], min_limb: usize)
    \ No newline at end of file diff --git a/docs/fp/simd/index.html b/docs/fp/simd/index.html index 2a5835608..e479be430 100644 --- a/docs/fp/simd/index.html +++ b/docs/fp/simd/index.html @@ -1,4 +1,4 @@ -fp::simd - Rust +fp::simd - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/fp/simd/x86_64/fn.load.html b/docs/fp/simd/x86_64/fn.load.html index 5280cb169..59821e1ff 100644 --- a/docs/fp/simd/x86_64/fn.load.html +++ b/docs/fp/simd/x86_64/fn.load.html @@ -1,4 +1,4 @@ -load in fp::simd::x86_64 - Rust +load in fp::simd::x86_64 - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::simd::x86_64::load

    source ·
    pub(crate) unsafe fn load(limb: *const u64) -> __m128i
    \ No newline at end of file +

    Function fp::simd::x86_64::load

    source ·
    pub(crate) unsafe fn load(limb: *const u64) -> __m128i
    \ No newline at end of file diff --git a/docs/fp/simd/x86_64/fn.store.html b/docs/fp/simd/x86_64/fn.store.html index fe0555dad..cfc6c643c 100644 --- a/docs/fp/simd/x86_64/fn.store.html +++ b/docs/fp/simd/x86_64/fn.store.html @@ -1,4 +1,4 @@ -store in fp::simd::x86_64 - Rust +store in fp::simd::x86_64 - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::simd::x86_64::store

    source ·
    pub(crate) unsafe fn store(limb: *mut u64, val: __m128i)
    \ No newline at end of file +

    Function fp::simd::x86_64::store

    source ·
    pub(crate) unsafe fn store(limb: *mut u64, val: __m128i)
    \ No newline at end of file diff --git a/docs/fp/simd/x86_64/fn.xor.html b/docs/fp/simd/x86_64/fn.xor.html index 199af5a89..9a8dafc0c 100644 --- a/docs/fp/simd/x86_64/fn.xor.html +++ b/docs/fp/simd/x86_64/fn.xor.html @@ -1,4 +1,4 @@ -xor in fp::simd::x86_64 - Rust +xor in fp::simd::x86_64 - Rust @@ -23,4 +23,4 @@ }); -

    Function fp::simd::x86_64::xor

    source ·
    pub(crate) unsafe fn xor(left: __m128i, right: __m128i) -> __m128i
    \ No newline at end of file +

    Function fp::simd::x86_64::xor

    source ·
    pub(crate) unsafe fn xor(left: __m128i, right: __m128i) -> __m128i
    \ No newline at end of file diff --git a/docs/fp/simd/x86_64/index.html b/docs/fp/simd/x86_64/index.html index ba3a753c8..09e0fb799 100644 --- a/docs/fp/simd/x86_64/index.html +++ b/docs/fp/simd/x86_64/index.html @@ -1,4 +1,4 @@ -fp::simd::x86_64 - Rust +fp::simd::x86_64 - Rust @@ -23,4 +23,4 @@ }); -

    Module fp::simd::x86_64

    source ·

    Functions

    Type Definitions

    \ No newline at end of file +

    Module fp::simd::x86_64

    source ·

    Functions

    Type Aliases

    \ No newline at end of file diff --git a/docs/fp/simd/x86_64/type.SimdLimb.html b/docs/fp/simd/x86_64/type.SimdLimb.html index 56d630d76..52f554415 100644 --- a/docs/fp/simd/x86_64/type.SimdLimb.html +++ b/docs/fp/simd/x86_64/type.SimdLimb.html @@ -1,4 +1,4 @@ -SimdLimb in fp::simd::x86_64 - Rust +SimdLimb in fp::simd::x86_64 - Rust @@ -23,4 +23,4 @@ }); -

    Type Definition fp::simd::x86_64::SimdLimb

    source ·
    pub(crate) type SimdLimb = __m128i;
    \ No newline at end of file +

    Type Alias fp::simd::x86_64::SimdLimb

    source ·
    pub(crate) type SimdLimb = __m128i;

    Aliased Type§

    struct SimdLimb(i64, i64);

    Fields§

    §0: i64§1: i64
    \ No newline at end of file diff --git a/docs/fp/vector/impl_fpvectorp/index.html b/docs/fp/vector/impl_fpvectorp/index.html index 15eb913d0..0f28ccc6d 100644 --- a/docs/fp/vector/impl_fpvectorp/index.html +++ b/docs/fp/vector/impl_fpvectorp/index.html @@ -1,4 +1,4 @@ -fp::vector::impl_fpvectorp - Rust +fp::vector::impl_fpvectorp - Rust @@ -23,4 +23,4 @@ }); -

    Module fp::vector::impl_fpvectorp

    source ·
    \ No newline at end of file +

    Module fp::vector::impl_fpvectorp

    source ·
    \ No newline at end of file diff --git a/docs/fp/vector/impl_slicemutp/index.html b/docs/fp/vector/impl_slicemutp/index.html index d27d82d8b..16e43a72b 100644 --- a/docs/fp/vector/impl_slicemutp/index.html +++ b/docs/fp/vector/impl_slicemutp/index.html @@ -1,4 +1,4 @@ -fp::vector::impl_slicemutp - Rust +fp::vector::impl_slicemutp - Rust @@ -23,4 +23,4 @@ }); -

    Module fp::vector::impl_slicemutp

    source ·
    \ No newline at end of file +

    Module fp::vector::impl_slicemutp

    source ·
    \ No newline at end of file diff --git a/docs/fp/vector/impl_slicep/index.html b/docs/fp/vector/impl_slicep/index.html index 64eb9806e..4235c49c2 100644 --- a/docs/fp/vector/impl_slicep/index.html +++ b/docs/fp/vector/impl_slicep/index.html @@ -1,4 +1,4 @@ -fp::vector::impl_slicep - Rust +fp::vector::impl_slicep - Rust @@ -23,4 +23,4 @@ }); -

    Module fp::vector::impl_slicep

    source ·
    \ No newline at end of file +

    Module fp::vector::impl_slicep

    source ·
    \ No newline at end of file diff --git a/docs/fp/vector/index.html b/docs/fp/vector/index.html index 4f16fe30d..a92d145a4 100644 --- a/docs/fp/vector/index.html +++ b/docs/fp/vector/index.html @@ -1,4 +1,4 @@ -fp::vector - Rust +fp::vector - Rust @@ -23,6 +23,6 @@ }); -

    Module fp::vector

    source ·

    Re-exports

    Modules

    \ No newline at end of file diff --git a/docs/fp/vector/inner/struct.SliceMutP.html b/docs/fp/vector/inner/struct.SliceMutP.html index a9d99d6ea..c87838f92 100644 --- a/docs/fp/vector/inner/struct.SliceMutP.html +++ b/docs/fp/vector/inner/struct.SliceMutP.html @@ -1,4 +1,4 @@ -SliceMutP in fp::vector::inner - Rust +SliceMutP in fp::vector::inner - Rust @@ -23,35 +23,35 @@ }); -

    Struct fp::vector::inner::SliceMutP

    source ·
    pub struct SliceMutP<'a, const P: u32> {
    -    pub(super) limbs: &'a mut [u64],
    -    pub(super) start: usize,
    -    pub(super) end: usize,
    +

    Struct fp::vector::inner::SliceMutP

    source ·
    pub struct SliceMutP<'a, const P: u32> {
    +    pub(super) limbs: &'a mut [u64],
    +    pub(super) start: usize,
    +    pub(super) end: usize,
     }
    Expand description

    A SliceMutP is a mutable slice of an FpVectorP. This mutably borrows the vector. Since it is a mutable borrow, it cannot implement Copy. However, it has a SliceMutP::copy function that imitates the reborrowing, that mutably borrows SliceMutP and returns a SliceMutP with a shorter lifetime.

    -

    Fields§

    §limbs: &'a mut [u64]§start: usize§end: usize

    Implementations§

    source§

    impl<'a, const P: u32> SliceMutP<'a, P>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    fn reduce_limbs(&mut self)

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, other: SliceP<'_, P>, c: u32)

    source

    pub fn add_tensor( +

    Fields§

    §limbs: &'a mut [u64]§start: usize§end: usize

    Implementations§

    source§

    impl<'a, const P: u32> SliceMutP<'a, P>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    fn reduce_limbs(&mut self)

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, other: SliceP<'_, P>, c: u32)

    source

    pub fn add_tensor( &mut self, - offset: usize, - coeff: u32, + offset: usize, + coeff: u32, left: SliceP<'_, P>, right: SliceP<'_, P> )

    coeff need not be reduced mod p. Adds v otimes w to self.

    source

    pub fn assign(&mut self, other: SliceP<'_, P>)

    TODO: improve efficiency

    -
    source

    pub fn add_shift_none(&mut self, other: SliceP<'_, P>, c: u32)

    Adds c * other to self. other must have the same length, offset, and prime as self, and c must be between 0 and p - 1.

    -
    source

    fn add_shift_left(&mut self, other: SliceP<'_, P>, c: u32)

    source

    fn add_shift_right(&mut self, other: SliceP<'_, P>, c: u32)

    source

    pub fn add_masked(&mut self, other: SliceP<'_, P>, c: u32, mask: &[usize])

    Given a mask v, add the v[i]th entry of other to the ith entry of self.

    -
    source

    pub fn add_unmasked(&mut self, other: SliceP<'_, P>, c: u32, mask: &[usize])

    Given a mask v, add the ith entry of other to the v[i]th entry of self.

    -
    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMutP<'_, P>

    source

    pub fn as_slice(&self) -> SliceP<'_, P>

    source

    pub fn copy(&mut self) -> SliceMutP<'_, P>

    Generates a version of itself with a shorter lifetime

    -

    Trait Implementations§

    source§

    impl<'a, const P: u32> Debug for SliceMutP<'a, P>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, const P: u32> From<&'a mut FpVectorP<P>> for SliceMutP<'a, P>

    source§

    fn from(v: &'a mut FpVectorP<P>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Send for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Sync for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Unpin for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> !UnwindSafe for SliceMutP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub fn add_shift_none(&mut self, other: SliceP<'_, P>, c: u32)

    Adds c * other to self. other must have the same length, offset, and prime as self, and c must be between 0 and p - 1.

    +
    source

    fn add_shift_left(&mut self, other: SliceP<'_, P>, c: u32)

    source

    fn add_shift_right(&mut self, other: SliceP<'_, P>, c: u32)

    source

    pub fn add_masked(&mut self, other: SliceP<'_, P>, c: u32, mask: &[usize])

    Given a mask v, add the v[i]th entry of other to the ith entry of self.

    +
    source

    pub fn add_unmasked(&mut self, other: SliceP<'_, P>, c: u32, mask: &[usize])

    Given a mask v, add the ith entry of other to the v[i]th entry of self.

    +
    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMutP<'_, P>

    source

    pub fn as_slice(&self) -> SliceP<'_, P>

    source

    pub fn copy(&mut self) -> SliceMutP<'_, P>

    Generates a version of itself with a shorter lifetime

    +

    Trait Implementations§

    source§

    impl<'a, const P: u32> Debug for SliceMutP<'a, P>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, const P: u32> From<&'a mut FpVectorP<P>> for SliceMutP<'a, P>

    source§

    fn from(v: &'a mut FpVectorP<P>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Send for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Sync for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> Unpin for SliceMutP<'a, P>

    §

    impl<'a, const P: u32> !UnwindSafe for SliceMutP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/inner/struct.SliceP.html b/docs/fp/vector/inner/struct.SliceP.html index 8cae51e36..f7583a358 100644 --- a/docs/fp/vector/inner/struct.SliceP.html +++ b/docs/fp/vector/inner/struct.SliceP.html @@ -1,4 +1,4 @@ -SliceP in fp::vector::inner - Rust +SliceP in fp::vector::inner - Rust @@ -23,26 +23,26 @@ }); -

    Struct fp::vector::inner::SliceP

    source ·
    pub struct SliceP<'a, const P: u32> {
    -    pub(super) limbs: &'a [u64],
    -    pub(super) start: usize,
    -    pub(super) end: usize,
    +

    Struct fp::vector::inner::SliceP

    source ·
    pub struct SliceP<'a, const P: u32> {
    +    pub(super) limbs: &'a [u64],
    +    pub(super) start: usize,
    +    pub(super) end: usize,
     }
    Expand description

    A SliceP is a slice of an FpVectorP. This immutably borrows the vector and implements Copy

    -

    Fields§

    §limbs: &'a [u64]§start: usize§end: usize

    Implementations§

    source§

    impl<'a, const P: u32> SliceP<'a, P>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub const fn is_empty(&self) -> bool

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn iter(self) -> FpVectorIterator<'a>

    TODO: implement prime 2 version

    -
    source

    pub fn iter_nonzero(self) -> FpVectorNonZeroIteratorP<'a, P>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn slice(self, start: usize, end: usize) -> SliceP<'a, P>

    source

    pub fn to_owned(self) -> FpVectorP<P>

    Converts a slice to an owned FpVectorP. This is vastly more efficient if the start of the vector is aligned.

    -
    source§

    impl<'a, const P: u32> SliceP<'a, P>

    source

    pub(super) fn offset(&self) -> usize

    source

    pub(super) fn limb_range(&self) -> Range<usize>

    source

    pub(super) fn limb_range_inner(&self) -> Range<usize>

    This function underflows if self.end == 0, which happens if and only if we are taking a +

    Fields§

    §limbs: &'a [u64]§start: usize§end: usize

    Implementations§

    source§

    impl<'a, const P: u32> SliceP<'a, P>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub const fn is_empty(&self) -> bool

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn iter(self) -> FpVectorIterator<'a>

    TODO: implement prime 2 version

    +
    source

    pub fn iter_nonzero(self) -> FpVectorNonZeroIteratorP<'a, P>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn slice(self, start: usize, end: usize) -> SliceP<'a, P>

    source

    pub fn to_owned(self) -> FpVectorP<P>

    Converts a slice to an owned FpVectorP. This is vastly more efficient if the start of the vector is aligned.

    +
    source§

    impl<'a, const P: u32> SliceP<'a, P>

    source

    pub(super) fn offset(&self) -> usize

    source

    pub(super) fn limb_range(&self) -> Range<usize>

    source

    pub(super) fn limb_range_inner(&self) -> Range<usize>

    This function underflows if self.end == 0, which happens if and only if we are taking a slice of width 0 at the start of an FpVector. This should be a very rare edge case. Dealing with the underflow properly would probably require using saturating_sub or something of that nature, and that has a nontrivial (10%) performance hit.

    -
    source

    pub(super) fn min_limb_mask(&self) -> u64

    source

    pub(super) fn max_limb_mask(&self) -> u64

    source

    pub(super) fn limb_masks(&self) -> (u64, u64)

    Trait Implementations§

    source§

    impl<'a, const P: u32> Clone for SliceP<'a, P>

    source§

    fn clone(&self) -> SliceP<'a, P>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a, const P: u32> Debug for SliceP<'a, P>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, const P: u32> From<&'a FpVectorP<P>> for SliceP<'a, P>

    source§

    fn from(v: &'a FpVectorP<P>) -> Self

    Converts to this type from the input type.
    source§

    impl<'a, const P: u32> Copy for SliceP<'a, P>

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for SliceP<'a, P>

    §

    impl<'a, const P: u32> Send for SliceP<'a, P>

    §

    impl<'a, const P: u32> Sync for SliceP<'a, P>

    §

    impl<'a, const P: u32> Unpin for SliceP<'a, P>

    §

    impl<'a, const P: u32> UnwindSafe for SliceP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source

    pub(super) fn min_limb_mask(&self) -> u64

    source

    pub(super) fn max_limb_mask(&self) -> u64

    source

    pub(super) fn limb_masks(&self) -> (u64, u64)

    Trait Implementations§

    source§

    impl<'a, const P: u32> Clone for SliceP<'a, P>

    source§

    fn clone(&self) -> SliceP<'a, P>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a, const P: u32> Debug for SliceP<'a, P>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, const P: u32> From<&'a FpVectorP<P>> for SliceP<'a, P>

    source§

    fn from(v: &'a FpVectorP<P>) -> Self

    Converts to this type from the input type.
    source§

    impl<'a, const P: u32> Copy for SliceP<'a, P>

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for SliceP<'a, P>

    §

    impl<'a, const P: u32> Send for SliceP<'a, P>

    §

    impl<'a, const P: u32> Sync for SliceP<'a, P>

    §

    impl<'a, const P: u32> Unpin for SliceP<'a, P>

    §

    impl<'a, const P: u32> UnwindSafe for SliceP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/iter/index.html b/docs/fp/vector/iter/index.html index 9512177bd..211e6ea38 100644 --- a/docs/fp/vector/iter/index.html +++ b/docs/fp/vector/iter/index.html @@ -1,4 +1,4 @@ -fp::vector::iter - Rust +fp::vector::iter - Rust @@ -23,5 +23,5 @@ }); -

    Module fp::vector::iter

    source ·

    Structs

    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized + MultiUnzip<FromI>,
    Converts an iterator of tuples into a tuple of containers. Read more
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/iter/struct.FpVectorNonZeroIteratorP.html b/docs/fp/vector/iter/struct.FpVectorNonZeroIteratorP.html index f62c8b1b2..67df04903 100644 --- a/docs/fp/vector/iter/struct.FpVectorNonZeroIteratorP.html +++ b/docs/fp/vector/iter/struct.FpVectorNonZeroIteratorP.html @@ -1,4 +1,4 @@ -FpVectorNonZeroIteratorP in fp::vector::iter - Rust +FpVectorNonZeroIteratorP in fp::vector::iter - Rust @@ -23,526 +23,526 @@ }); -
    pub struct FpVectorNonZeroIteratorP<'a, const P: u32> {
    -    limbs: &'a [u64],
    -    limb_index: usize,
    -    cur_limb_entries_left: usize,
    -    cur_limb: u64,
    -    idx: usize,
    -    dim: usize,
    +
    pub struct FpVectorNonZeroIteratorP<'a, const P: u32> {
    +    limbs: &'a [u64],
    +    limb_index: usize,
    +    cur_limb_entries_left: usize,
    +    cur_limb: u64,
    +    idx: usize,
    +    dim: usize,
     }
    Expand description

    Iterator over non-zero entries of an FpVector. This is monomorphized over P for significant performance gains.

    -

    Fields§

    §limbs: &'a [u64]§limb_index: usize§cur_limb_entries_left: usize§cur_limb: u64§idx: usize§dim: usize

    Implementations§

    source§

    impl<'a, const P: u32> FpVectorNonZeroIteratorP<'a, P>

    source

    pub(super) fn new(vec: SliceP<'a, P>) -> Self

    Trait Implementations§

    source§

    impl<'a, const P: u32> Iterator for FpVectorNonZeroIteratorP<'a, P>

    §

    type Item = (usize, u32)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Fields§

    §limbs: &'a [u64]§limb_index: usize§cur_limb_entries_left: usize§cur_limb: u64§idx: usize§dim: usize

    Implementations§

    source§

    impl<'a, const P: u32> FpVectorNonZeroIteratorP<'a, P>

    source

    pub(super) fn new(vec: SliceP<'a, P>) -> Self

    Trait Implementations§

    source§

    impl<'a, const P: u32> Iterator for FpVectorNonZeroIteratorP<'a, P>

    §

    type Item = (usize, u32)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Send for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Sync for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Unpin for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> UnwindSafe for FpVectorNonZeroIteratorP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    §

    impl<'a, const P: u32> RefUnwindSafe for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Send for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Sync for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> Unpin for FpVectorNonZeroIteratorP<'a, P>

    §

    impl<'a, const P: u32> UnwindSafe for FpVectorNonZeroIteratorP<'a, P>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() -values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere - IT: Iterator<Item = (A, B)>, - FromA: Default + Extend<A>, - FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() +values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere + Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere + IT: Iterator<Item = (A, B)>, + FromA: Default + Extend<A>, + FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/enum.FpVector.html b/docs/fp/vector/vector_generic/enum.FpVector.html index cea27a6be..b9af24b6c 100644 --- a/docs/fp/vector/vector_generic/enum.FpVector.html +++ b/docs/fp/vector/vector_generic/enum.FpVector.html @@ -1,4 +1,4 @@ -FpVector in fp::vector::vector_generic - Rust +FpVector in fp::vector::vector_generic - Rust @@ -23,32 +23,32 @@ }); -
    pub enum FpVector {
    +
    pub enum FpVector {
         _2(FpVectorP<2>),
         _3(FpVectorP<3>),
         _5(FpVectorP<5>),
         _7(FpVectorP<7>),
    -}

    Variants§

    Implementations§

    source§

    impl FpVector

    source

    pub fn new(p: ValidPrime, len: usize) -> FpVector

    source

    pub fn new_with_capacity(p: ValidPrime, len: usize, capacity: usize) -> FpVector

    source

    pub fn from_slice(p: ValidPrime, slice: &[u32]) -> Self

    source

    pub fn num_limbs(p: ValidPrime, len: usize) -> usize

    source

    pub(crate) fn padded_len(p: ValidPrime, len: usize) -> usize

    source

    pub fn update_from_bytes(&mut self, data: &mut impl Read) -> Result<()>

    source

    pub fn from_bytes( +}

    Variants§

    Implementations§

    source§

    impl FpVector

    source

    pub fn new(p: ValidPrime, len: usize) -> FpVector

    source

    pub fn new_with_capacity(p: ValidPrime, len: usize, capacity: usize) -> FpVector

    source

    pub fn from_slice(p: ValidPrime, slice: &[u32]) -> Self

    source

    pub fn num_limbs(p: ValidPrime, len: usize) -> usize

    source

    pub(crate) fn padded_len(p: ValidPrime, len: usize) -> usize

    source

    pub fn update_from_bytes(&mut self, data: &mut impl Read) -> Result<()>

    source

    pub fn from_bytes( p: ValidPrime, - len: usize, - data: &mut impl Read -) -> Result<Self>

    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    pub fn assign(&mut self, other: &Self)

    source

    pub fn assign_partial(&mut self, other: &Self)

    source

    pub fn add(&mut self, other: &Self, c: u32)

    source

    pub fn add_nosimd(&mut self, other: &Self, c: u32)

    source

    pub fn add_offset(&mut self, other: &Self, c: u32, offset: usize)

    source

    pub fn add_offset_nosimd(&mut self, other: &Self, c: u32, offset: usize)

    source

    pub fn slice(&self, start: usize, end: usize) -> Slice<'_>

    source

    pub fn as_slice(&self) -> Slice<'_>

    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMut<'_>

    source

    pub fn as_slice_mut(&mut self) -> SliceMut<'_>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn iter(&self) -> FpVectorIterator<'_>

    source

    pub fn iter_nonzero(&self) -> FpVectorNonZeroIterator<'_>

    source

    pub fn extend_len(&mut self, dim: usize)

    source

    pub fn set_scratch_vector_size(&mut self, dim: usize)

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn copy_from_slice(&mut self, slice: &[u32])

    source

    pub(crate) fn trim_start(&mut self, n: usize)

    source

    pub fn add_truncate(&mut self, other: &Self, c: u32) -> Option<()>

    source

    pub fn sign_rule(&self, other: &Self) -> bool

    source

    pub fn add_carry(&mut self, other: &Self, c: u32, rest: &mut [FpVector]) -> bool

    source

    pub fn first_nonzero(&self) -> Option<(usize, u32)>

    source

    pub fn density(&self) -> f32

    source

    pub(crate) fn limbs(&self) -> &[u64]

    source

    pub(crate) fn limbs_mut(&mut self) -> &mut [u64]

    Trait Implementations§

    source§

    impl AddAssign<&FpVector> for FpVector

    source§

    fn add_assign(&mut self, other: &FpVector)

    Performs the += operation. Read more
    source§

    impl Clone for FpVector

    source§

    fn clone(&self) -> FpVector

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for FpVector

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for FpVector

    source§

    fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for FpVector

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a> From<&'a FpVector> for Slice<'a>

    source§

    fn from(v: &'a FpVector) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> From<&'a mut FpVector> for SliceMut<'a>

    source§

    fn from(v: &'a mut FpVector) -> SliceMut<'a>

    Converts to this type from the input type.
    source§

    impl From<&FpVector> for Vec<u32>

    source§

    fn from(v: &FpVector) -> Vec<u32>

    Converts to this type from the input type.
    source§

    impl Hash for FpVector

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<'a> IntoIterator for &'a FpVector

    §

    type IntoIter = FpVectorIterator<'a>

    Which kind of iterator are we turning this into?
    §

    type Item = u32

    The type of the elements being iterated over.
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<FpVector> for FpVector

    source§

    fn eq(&self, other: &FpVector) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for FpVector

    source§

    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where - S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<'a> TryInto<&'a mut FpVectorP<2>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<2>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<3>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<3>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<5>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<5>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<7>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<7>, ()>

    Performs the conversion.
    source§

    impl Eq for FpVector

    source§

    impl StructuralEq for FpVector

    source§

    impl StructuralPartialEq for FpVector

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + len: usize, + data: &mut impl Read +) -> Result<Self>
    source

    pub fn to_bytes(&self, buffer: &mut impl Write) -> Result<()>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    pub fn assign(&mut self, other: &Self)

    source

    pub fn assign_partial(&mut self, other: &Self)

    source

    pub fn add(&mut self, other: &Self, c: u32)

    source

    pub fn add_nosimd(&mut self, other: &Self, c: u32)

    source

    pub fn add_offset(&mut self, other: &Self, c: u32, offset: usize)

    source

    pub fn add_offset_nosimd(&mut self, other: &Self, c: u32, offset: usize)

    source

    pub fn slice(&self, start: usize, end: usize) -> Slice<'_>

    source

    pub fn as_slice(&self) -> Slice<'_>

    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMut<'_>

    source

    pub fn as_slice_mut(&mut self) -> SliceMut<'_>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn iter(&self) -> FpVectorIterator<'_>

    source

    pub fn iter_nonzero(&self) -> FpVectorNonZeroIterator<'_>

    source

    pub fn extend_len(&mut self, dim: usize)

    source

    pub fn set_scratch_vector_size(&mut self, dim: usize)

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn copy_from_slice(&mut self, slice: &[u32])

    source

    pub(crate) fn trim_start(&mut self, n: usize)

    source

    pub fn add_truncate(&mut self, other: &Self, c: u32) -> Option<()>

    source

    pub fn sign_rule(&self, other: &Self) -> bool

    source

    pub fn add_carry(&mut self, other: &Self, c: u32, rest: &mut [FpVector]) -> bool

    source

    pub fn first_nonzero(&self) -> Option<(usize, u32)>

    source

    pub fn density(&self) -> f32

    source

    pub(crate) fn limbs(&self) -> &[u64]

    source

    pub(crate) fn limbs_mut(&mut self) -> &mut [u64]

    Trait Implementations§

    source§

    impl AddAssign<&FpVector> for FpVector

    source§

    fn add_assign(&mut self, other: &FpVector)

    Performs the += operation. Read more
    source§

    impl Clone for FpVector

    source§

    fn clone(&self) -> FpVector

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for FpVector

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for FpVector

    source§

    fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for FpVector

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a> From<&'a FpVector> for Slice<'a>

    source§

    fn from(v: &'a FpVector) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> From<&'a mut FpVector> for SliceMut<'a>

    source§

    fn from(v: &'a mut FpVector) -> SliceMut<'a>

    Converts to this type from the input type.
    source§

    impl From<&FpVector> for Vec<u32>

    source§

    fn from(v: &FpVector) -> Vec<u32>

    Converts to this type from the input type.
    source§

    impl Hash for FpVector

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<'a> IntoIterator for &'a FpVector

    §

    type IntoIter = FpVectorIterator<'a>

    Which kind of iterator are we turning this into?
    §

    type Item = u32

    The type of the elements being iterated over.
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<FpVector> for FpVector

    source§

    fn eq(&self, other: &FpVector) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for FpVector

    source§

    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where + S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<'a> TryInto<&'a mut FpVectorP<2>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<2>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<3>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<3>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<5>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<5>, ()>

    Performs the conversion.
    source§

    impl<'a> TryInto<&'a mut FpVectorP<7>> for &'a mut FpVector

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<&'a mut FpVectorP<7>, ()>

    Performs the conversion.
    source§

    impl Eq for FpVector

    source§

    impl StructuralEq for FpVector

    source§

    impl StructuralPartialEq for FpVector

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/enum.FpVectorNonZeroIterator.html b/docs/fp/vector/vector_generic/enum.FpVectorNonZeroIterator.html index af9ffd449..10b9c2190 100644 --- a/docs/fp/vector/vector_generic/enum.FpVectorNonZeroIterator.html +++ b/docs/fp/vector/vector_generic/enum.FpVectorNonZeroIterator.html @@ -1,4 +1,4 @@ -FpVectorNonZeroIterator in fp::vector::vector_generic - Rust +FpVectorNonZeroIterator in fp::vector::vector_generic - Rust @@ -23,522 +23,522 @@ }); -
    pub enum FpVectorNonZeroIterator<'a> {
    +
    pub enum FpVectorNonZeroIterator<'a> {
         _2(FpVectorNonZeroIteratorP<'a, 2>),
         _3(FpVectorNonZeroIteratorP<'a, 3>),
         _5(FpVectorNonZeroIteratorP<'a, 5>),
         _7(FpVectorNonZeroIteratorP<'a, 7>),
    -}

    Variants§

    Implementations§

    source§

    impl<'a> FpVectorNonZeroIterator<'a>

    source

    fn next(&mut self) -> Option<(usize, u32)>

    Trait Implementations§

    source§

    impl<'a> Iterator for FpVectorNonZeroIterator<'a>

    §

    type Item = (usize, u32)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +}

    Variants§

    Implementations§

    source§

    impl<'a> FpVectorNonZeroIterator<'a>

    source

    fn next(&mut self) -> Option<(usize, u32)>

    Trait Implementations§

    source§

    impl<'a> Iterator for FpVectorNonZeroIterator<'a>

    §

    type Item = (usize, u32)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self -) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere - Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where - Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where - Self: Sized,

    Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where - Self: Sized, - U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where - Self: Sized, - G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each -element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where - Self: Sized, - F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element -should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where - Self: Sized,

    Creates an iterator which gives the current iteration count as well as -the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where - Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where + Self: Sized,
    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere + Self: Sized,

    Consumes the iterator, counting the number of iterations and returning it. Read more
    1.0.0 · source§

    fn last(self) -> Option<Self::Item>where + Self: Sized,

    Consumes the iterator, returning the last element. Read more
    source§

    fn advance_by(&mut self, n: usize) -> Result<(), NonZeroUsize>

    🔬This is a nightly-only experimental API. (iter_advance_by)
    Advances the iterator by n elements. Read more
    1.0.0 · source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    1.28.0 · source§

    fn step_by(self, step: usize) -> StepBy<Self>where + Self: Sized,

    Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
    1.0.0 · source§

    fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both in sequence. Read more
    1.0.0 · source§

    fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where + Self: Sized, + U: IntoIterator,

    ‘Zips up’ two iterators into a single iterator of pairs. Read more
    source§

    fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>where + Self: Sized, + G: FnMut() -> Self::Item,

    🔬This is a nightly-only experimental API. (iter_intersperse)
    Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
    1.0.0 · source§

    fn map<B, F>(self, f: F) -> Map<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> B,

    Takes a closure and creates an iterator which calls that closure on each +element. Read more
    1.21.0 · source§

    fn for_each<F>(self, f: F)where + Self: Sized, + F: FnMut(Self::Item),

    Calls a closure on each element of an iterator. Read more
    1.0.0 · source§

    fn filter<P>(self, predicate: P) -> Filter<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
    1.0.0 · source§

    fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both filters and maps. Read more
    1.0.0 · source§

    fn enumerate(self) -> Enumerate<Self>where + Self: Sized,

    Creates an iterator which gives the current iteration count as well as +the next value. Read more
    1.0.0 · source§

    fn peekable(self) -> Peekable<Self>where + Self: Sized,

    Creates an iterator which can use the peek and peek_mut methods to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more
    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where - Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where - Self: Sized,

    Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where - Self: Sized, - F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but -unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where - Self: Sized, - U: IntoIterator, - F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where - Self: Sized, - F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over -self and returns an iterator over the outputs of f. Like slice::windows(), -the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where - Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where - Self: Sized, - F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere - Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere - B: FromIterator<Self::Item>, - Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere - E: Extend<Self::Item>, - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where - Self: Sized, - B: Default + Extend<Self::Item>, - F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere - Self: Sized, - P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere - Self: Sized, - F: FnMut(B, Self::Item) -> R, - R: Try<Output = B>,

    An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere - Self: Sized, - F: FnMut(Self::Item) -> R, - R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere - Self: Sized, - F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, -returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more
    source§

    fn try_reduce<F, R>( +their documentation for more information. Read more

    1.0.0 · source§

    fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that skips elements based on a predicate. Read more
    1.0.0 · source§

    fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Creates an iterator that yields elements based on a predicate. Read more
    1.57.0 · source§

    fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

    Creates an iterator that both yields elements based on a predicate and maps. Read more
    1.0.0 · source§

    fn skip(self, n: usize) -> Skip<Self>where + Self: Sized,

    Creates an iterator that skips the first n elements. Read more
    1.0.0 · source§

    fn take(self, n: usize) -> Take<Self>where + Self: Sized,

    Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
    1.0.0 · source§

    fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

    An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
    1.0.0 · source§

    fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

    Creates an iterator that works like map, but flattens nested structure. Read more
    source§

    fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

    🔬This is a nightly-only experimental API. (iter_map_windows)
    Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
    1.0.0 · source§

    fn fuse(self) -> Fuse<Self>where + Self: Sized,

    Creates an iterator which ends after the first None. Read more
    1.0.0 · source§

    fn inspect<F>(self, f: F) -> Inspect<Self, F>where + Self: Sized, + F: FnMut(&Self::Item),

    Does something with each element of an iterator, passing the value on. Read more
    1.0.0 · source§

    fn by_ref(&mut self) -> &mut Selfwhere + Self: Sized,

    Borrows an iterator, rather than consuming it. Read more
    1.0.0 · source§

    fn collect<B>(self) -> Bwhere + B: FromIterator<Self::Item>, + Self: Sized,

    Transforms an iterator into a collection. Read more
    source§

    fn collect_into<E>(self, collection: &mut E) -> &mut Ewhere + E: Extend<Self::Item>, + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_collect_into)
    Collects all the items from an iterator into a collection. Read more
    1.0.0 · source§

    fn partition<B, F>(self, f: F) -> (B, B)where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

    Consumes an iterator, creating two collections from it. Read more
    source§

    fn is_partitioned<P>(self, predicate: P) -> boolwhere + Self: Sized, + P: FnMut(Self::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_is_partitioned)
    Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
    1.27.0 · source§

    fn try_fold<B, F, R>(&mut self, init: B, f: F) -> Rwhere + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

    An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
    1.27.0 · source§

    fn try_for_each<F, R>(&mut self, f: F) -> Rwhere + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

    An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
    1.0.0 · source§

    fn fold<B, F>(self, init: B, f: F) -> Bwhere + Self: Sized, + F: FnMut(B, Self::Item) -> B,

    Folds every element into an accumulator by applying an operation, +returning the final result. Read more
    1.51.0 · source§

    fn reduce<F>(self, f: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

    Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
    source§

    fn try_reduce<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> R, - R: Try<Output = Self::Item>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the -closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where - Self: Sized, - F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns -the first non-none result. Read more
    source§

    fn try_find<F, R>( +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryTypewhere + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> R, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (iterator_try_reduce)
    Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
    1.0.0 · source§

    fn all<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if every element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn any<F>(&mut self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> bool,

    Tests if any element of the iterator matches a predicate. Read more
    1.0.0 · source§

    fn find<P>(&mut self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Searches for an element of an iterator that satisfies a predicate. Read more
    1.30.0 · source§

    fn find_map<B, F>(&mut self, f: F) -> Option<B>where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

    Applies function to the elements of iterator and returns +the first non-none result. Read more
    source§

    fn try_find<F, R>( &mut self, f: F -) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere - Self: Sized, - F: FnMut(&Self::Item) -> R, - R: Try<Output = bool>, - <R as Try>::Residual: Residual<Option<Self::Item>>,

    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns -the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the -specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the -specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where - B: Ord, - Self: Sized, - F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the -specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the -specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where - FromA: Default + Extend<A>, - FromB: Default + Extend<B>, - Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where - T: 'a + Copy, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where - T: 'a + Clone, - Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where - Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere - Self: Sized, - S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere - Self: Sized, - P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Lexicographically compares the PartialOrd elements of -this Iterator with those of another. The comparison works like short-circuit +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryTypewhere + Self: Sized, + F: FnMut(&Self::Item) -> R, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,
    🔬This is a nightly-only experimental API. (try_find)
    Applies function to the elements of iterator and returns +the first true result or the first error. Read more
    1.0.0 · source§

    fn position<P>(&mut self, predicate: P) -> Option<usize>where + Self: Sized, + P: FnMut(Self::Item) -> bool,

    Searches for an element in an iterator, returning its index. Read more
    1.6.0 · source§

    fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the maximum value from the +specified function. Read more
    1.15.0 · source§

    fn max_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
    1.6.0 · source§

    fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

    Returns the element that gives the minimum value from the +specified function. Read more
    1.15.0 · source§

    fn min_by<F>(self, compare: F) -> Option<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
    1.0.0 · source§

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

    Converts an iterator of pairs into a pair of containers. Read more
    1.36.0 · source§

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. Read more
    1.0.0 · source§

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. Read more
    source§

    fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where + Self: Sized,

    🔬This is a nightly-only experimental API. (iter_array_chunks)
    Returns an iterator over N elements of the iterator at a time. Read more
    1.11.0 · source§

    fn sum<S>(self) -> Swhere + Self: Sized, + S: Sum<Self::Item>,

    Sums the elements of an iterator. Read more
    1.11.0 · source§

    fn product<P>(self) -> Pwhere + Self: Sized, + P: Product<Self::Item>,

    Iterates over the entire iterator, multiplying all the elements Read more
    source§

    fn cmp_by<I, F>(self, other: I, cmp: F) -> Orderingwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit evaluation, returning a result without comparing the remaining elements. -As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are equal to those of -another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere - Self: Sized, - I: IntoIterator, - F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialEq<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are not equal to those of -another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere - I: IntoIterator, - Self::Item: PartialOrd<<I as IntoIterator>::Item>, - Self: Sized,

    Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere - Self: Sized, - F: FnMut(Self::Item) -> K, - K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
    source§

    fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
    1.5.0 · source§

    fn eq<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are equal to those of +another. Read more
    source§

    fn eq_by<I, F>(self, other: I, eq: F) -> boolwhere + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

    🔬This is a nightly-only experimental API. (iter_order_by)
    Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
    1.5.0 · source§

    fn ne<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are not equal to those of +another. Read more
    1.5.0 · source§

    fn lt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
    1.5.0 · source§

    fn le<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
    1.5.0 · source§

    fn gt<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
    1.5.0 · source§

    fn ge<I>(self, other: I) -> boolwhere + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

    Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
    source§

    fn is_sorted_by<F>(self, compare: F) -> boolwhere + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given comparator function. Read more
    source§

    fn is_sorted_by_key<F, K>(self, f: F) -> boolwhere + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd<K>,

    🔬This is a nightly-only experimental API. (is_sorted)
    Checks if the elements of this iterator are sorted using the given key extraction +function. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<I> IntoIterator for Iwhere - I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere - T: Iterator + ?Sized,

    source§

    fn interleave<J>( +From<T> for U chooses to do.

    +

    source§

    impl<I> IntoIterator for Iwhere + I: Iterator,

    §

    type Item = <I as Iterator>::Item

    The type of the elements being iterated over.
    §

    type IntoIter = I

    Which kind of iterator are we turning this into?
    const: unstable · source§

    fn into_iter(self) -> I

    Creates an iterator from a value. Read more
    source§

    impl<T> Itertools for Twhere + T: Iterator + ?Sized,

    source§

    fn interleave<J>( self, other: J -) -> Interleave<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( +) -> Interleave<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,

    Alternate elements from two iterators until both have run out. Read more
    source§

    fn interleave_shortest<J>( self, other: J -) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator<Item = Self::Item>, - Self: Sized,

    Alternate elements from two iterators until at least one of them has run +) -> InterleaveShortest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator<Item = Self::Item>, + Self: Sized,
    Alternate elements from two iterators until at least one of them has run out. Read more
    source§

    fn intersperse( self, - element: Self::Item -) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where - Self: Sized, - Self::Item: Clone,

    An iterator adaptor to insert a particular value + element: Self::Item +) -> IntersperseWith<Self, IntersperseElementSimple<Self::Item>>where + Self: Sized, + Self::Item: Clone,
    An iterator adaptor to insert a particular value between each element of the adapted iterator. Read more
    source§

    fn intersperse_with<F>(self, element: F) -> IntersperseWith<Self, F>where - Self: Sized, - F: FnMut() -> Self::Item,

    An iterator adaptor to insert a particular value created by a function + Self: Sized, + F: FnMut() -> Self::Item,
    An iterator adaptor to insert a particular value created by a function between each element of the adapted iterator. Read more
    source§

    fn zip_longest<J>( self, other: J -) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where - J: IntoIterator, - Self: Sized,

    Create an iterator which iterates over both this and the specified +) -> ZipLongest<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,
    Create an iterator which iterates over both this and the specified +iterator simultaneously, yielding pairs of two optional elements. Read more
    source§

    fn zip_eq<J>(self, other: J) -> ZipEq<Self, <J as IntoIterator>::IntoIter>where + J: IntoIterator, + Self: Sized,

    Create an iterator which iterates over both this and the specified iterator simultaneously, yielding pairs of elements. Read more
    source§

    fn batching<B, F>(self, f: F) -> Batching<Self, F>where - F: FnMut(&mut Self) -> Option<B>, - Self: Sized,

    A “meta iterator adaptor”. Its closure receives a reference to the + F: FnMut(&mut Self) -> Option<B>, + Self: Sized,
    A “meta iterator adaptor”. Its closure receives a reference to the iterator and may pick off as many elements as it likes, to produce the next iterator element. Read more
    source§

    fn group_by<K, F>(self, key: F) -> GroupBy<K, Self, F>where - Self: Sized, - F: FnMut(&Self::Item) -> K, - K: PartialEq<K>,

    Return an iterable that can group iterator elements. + Self: Sized, + F: FnMut(&Self::Item) -> K, + K: PartialEq<K>,
    Return an iterable that can group iterator elements. Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more
    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where - Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +to the same group. Read more

    source§

    fn chunks(self, size: usize) -> IntoChunks<Self>where + Self: Sized,

    Return an iterable that can chunk the iterator. Read more
    source§

    fn tuple_windows<T>(self) -> TupleWindows<Self, T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all contiguous windows producing tuples of + <T as TupleCollect>::Item: Clone,
    Return an iterator over all contiguous windows producing tuples of a specific size (up to 12). Read more
    source§

    fn circular_tuple_windows<T>(self) -> CircularTupleWindows<Self, T>where - Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, - T: TupleCollect + Clone, - <T as TupleCollect>::Item: Clone,

    Return an iterator over all windows, wrapping back to the first + Self: Sized + Clone + Iterator<Item = <T as TupleCollect>::Item> + ExactSizeIterator, + T: TupleCollect + Clone, + <T as TupleCollect>::Item: Clone,
    Return an iterator over all windows, wrapping back to the first elements when the window would otherwise exceed the length of the iterator, producing tuples of a specific size (up to 12). Read more
    source§

    fn tuples<T>(self) -> Tuples<Self, T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Return an iterator that groups the items in tuples of a specific size (up to 12). Read more
    source§

    fn tee(self) -> (Tee<Self>, Tee<Self>)where - Self: Sized, - Self::Item: Clone,

    Split into an iterator pair that both yield all elements from -the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where - Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator + Self: Sized, + Self::Item: Clone,
    Split into an iterator pair that both yield all elements from +the original iterator. Read more
    source§

    fn step(self, n: usize) -> Step<Self>where + Self: Sized,

    👎Deprecated since 0.8.0: Use std .step_by() instead
    Return an iterator adaptor that steps n elements in the base iterator for each iteration. Read more
    source§

    fn map_into<R>(self) -> MapSpecialCase<Self, MapSpecialCaseFnInto<R>>where - Self: Sized, - Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( + Self: Sized, + Self::Item: Into<R>,

    Convert each item of the iterator using the Into trait. Read more
    source§

    fn map_results<F, T, U, E>( self, f: F ) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,
    👎Deprecated since 0.10.0: Use .map_ok() instead
    source§

    fn map_ok<F, T, U, E>(self, f: F) -> MapSpecialCase<Self, MapSpecialCaseFnOk<F>>where + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> U,

    Return an iterator adaptor that applies the provided closure to every Result::Ok value. Result::Err values are unchanged. Read more
    source§

    fn filter_ok<F, T, E>(self, f: F) -> FilterOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(&T) -> bool,

    Return an iterator adaptor that filters every Result::Ok + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(&T) -> bool,
    Return an iterator adaptor that filters every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn filter_map_ok<F, T, U, E>(self, f: F) -> FilterMapOk<Self, F>where - Self: Iterator<Item = Result<T, E>> + Sized, - F: FnMut(T) -> Option<U>,

    Return an iterator adaptor that filters and transforms every + Self: Iterator<Item = Result<T, E>> + Sized, + F: FnMut(T) -> Option<U>,
    Return an iterator adaptor that filters and transforms every Result::Ok value with the provided closure. Result::Err values are unchanged. Read more
    source§

    fn flatten_ok<T, E>(self) -> FlattenOk<Self, T, E>where - Self: Iterator<Item = Result<T, E>> + Sized, - T: IntoIterator,

    Return an iterator adaptor that flattens every Result::Ok value into + Self: Iterator<Item = Result<T, E>> + Sized, + T: IntoIterator,
    Return an iterator adaptor that flattens every Result::Ok value into a series of Result::Ok values. Result::Err values are unchanged. Read more
    source§

    fn merge<J>( self, other: J -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>, - J: IntoIterator<Item = Self::Item>,

    Return an iterator adaptor that merges the two base iterators in +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, MergeLte>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>, + J: IntoIterator<Item = Self::Item>,
    Return an iterator adaptor that merges the two base iterators in ascending order. If both base iterators are sorted (ascending), the result is sorted. Read more
    source§

    fn merge_by<J, F>( self, other: J, is_first: F -) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where - Self: Sized, - J: IntoIterator<Item = Self::Item>, - F: FnMut(&Self::Item, &Self::Item) -> bool,

    Return an iterator adaptor that merges the two base iterators in order. +) -> MergeBy<Self, <J as IntoIterator>::IntoIter, F>where + Self: Sized, + J: IntoIterator<Item = Self::Item>, + F: FnMut(&Self::Item, &Self::Item) -> bool,
    Return an iterator adaptor that merges the two base iterators in order. This is much like .merge() but allows for a custom ordering. Read more
    source§

    fn merge_join_by<J, F>( self, other: J, cmp_fn: F -) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where - J: IntoIterator, - F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, - Self: Sized,

    Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> MergeJoinBy<Self, <J as IntoIterator>::IntoIter, F>where + J: IntoIterator, + F: FnMut(&Self::Item, &<J as IntoIterator>::Item) -> Ordering, + Self: Sized,
    Create an iterator that merges items from both this and the specified +iterator in ascending order. Read more
    source§

    fn kmerge(self) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, KMergeByLt>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: PartialOrd<<Self::Item as IntoIterator>::Item>,

    Return an iterator adaptor that flattens an iterator of iterators by merging them in ascending order. Read more
    source§

    fn kmerge_by<F>( self, first: F -) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where - Self: Sized, - Self::Item: IntoIterator, - F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,

    Return an iterator adaptor that flattens an iterator of iterators by +) -> KMergeBy<<Self::Item as IntoIterator>::IntoIter, F>where + Self: Sized, + Self::Item: IntoIterator, + F: FnMut(&<Self::Item as IntoIterator>::Item, &<Self::Item as IntoIterator>::Item) -> bool,
    Return an iterator adaptor that flattens an iterator of iterators by merging them according to the given closure. Read more
    source§

    fn cartesian_product<J>( self, other: J -) -> Product<Self, <J as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: Clone, - J: IntoIterator, - <J as IntoIterator>::IntoIter: Clone,

    Return an iterator adaptor that iterates over the cartesian product of +) -> Product<Self, <J as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: Clone, + J: IntoIterator, + <J as IntoIterator>::IntoIter: Clone,
    Return an iterator adaptor that iterates over the cartesian product of the element sets of two iterators self and J. Read more
    source§

    fn multi_cartesian_product( self -) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where - Self: Sized, - Self::Item: IntoIterator, - <Self::Item as IntoIterator>::IntoIter: Clone, - <Self::Item as IntoIterator>::Item: Clone,

    Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where - Self: Sized, - F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. +) -> MultiProduct<<Self::Item as IntoIterator>::IntoIter>where + Self: Sized, + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::IntoIter: Clone, + <Self::Item as IntoIterator>::Item: Clone,
    Return an iterator adaptor that iterates over the cartesian product of +all subiterators returned by meta-iterator self. Read more
    source§

    fn coalesce<F>(self, f: F) -> CoalesceBy<Self, F, Self::Item>where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Result<Self::Item, (Self::Item, Self::Item)>,

    Return an iterator adaptor that uses the passed-in closure to +optionally merge together consecutive elements. Read more
    source§

    fn dedup(self) -> CoalesceBy<Self, DedupPred2CoalescePred<DedupEq>, Self::Item>where + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Remove duplicates from sections of consecutive identical elements. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, +) -> CoalesceBy<Self, DedupPred2CoalescePred<Cmp>, Self::Item>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, determining equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_with_count( self -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where - Self: Sized,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<DedupEq>, (usize, Self::Item)>where + Self: Sized,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn dedup_by_with_count<Cmp>( self, cmp: Cmp -) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where - Self: Sized, - Cmp: FnMut(&Self::Item, &Self::Item) -> bool,

    Remove duplicates from sections of consecutive identical elements, while keeping a count of +) -> CoalesceBy<Self, DedupPredWithCount2CoalescePred<Cmp>, (usize, Self::Item)>where + Self: Sized, + Cmp: FnMut(&Self::Item, &Self::Item) -> bool,
    Remove duplicates from sections of consecutive identical elements, while keeping a count of how many repeated elements were present. This will determine equality using a comparison function. If the iterator is sorted, all elements will be unique. Read more
    source§

    fn peeking_take_while<F>(&mut self, accept: F) -> PeekingTakeWhile<'_, Self, F>where - Self: Sized + PeekingNext, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from this iterator and + Self: Sized + PeekingNext, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from this iterator and takes items while the closure accept returns true. Read more
    source§

    fn take_while_ref<F>(&mut self, accept: F) -> TakeWhileRef<'_, Self, F>where - Self: Clone, - F: FnMut(&Self::Item) -> bool,

    Return an iterator adaptor that borrows from a Clone-able iterator + Self: Clone, + F: FnMut(&Self::Item) -> bool,
    Return an iterator adaptor that borrows from a Clone-able iterator to only pick off elements while the predicate accept returns true. Read more
    source§

    fn while_some<A>(self) -> WhileSome<Self>where - Self: Sized + Iterator<Item = Option<A>>,

    Return an iterator adaptor that filters Option<A> iterator elements + Self: Sized + Iterator<Item = Option<A>>,
    Return an iterator adaptor that filters Option<A> iterator elements and produces A. Stops on the first None encountered. Read more
    source§

    fn tuple_combinations<T>(self) -> TupleCombinations<Self, T>where - Self: Sized + Clone, - Self::Item: Clone, + Self: Sized + Clone, + Self::Item: Clone, T: HasCombination<Self>,

    Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of +elements from an iterator. Read more
    source§

    fn combinations(self, k: usize) -> Combinations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over the k-length combinations of the elements from an iterator. Read more
    source§

    fn combinations_with_replacement( self, - k: usize + k: usize ) -> CombinationsWithReplacement<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates over the k-length combinations of +the elements from an iterator, with replacement. Read more
    source§

    fn permutations(self, k: usize) -> Permutations<Self>where + Self: Sized, + Self::Item: Clone,

    Return an iterator adaptor that iterates over all k-permutations of the elements from an iterator. Read more
    source§

    fn powerset(self) -> Powerset<Self>where - Self: Sized, - Self::Item: Clone,

    Return an iterator that iterates through the powerset of the elements from an -iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where - Self: Sized, - F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of + Self: Sized, + Self::Item: Clone,
    Return an iterator that iterates through the powerset of the elements from an +iterator. Read more
    source§

    fn pad_using<F>(self, min: usize, f: F) -> PadUsing<Self, F>where + Self: Sized, + F: FnMut(usize) -> Self::Item,

    Return an iterator adaptor that pads the sequence to a minimum length of min by filling missing elements using a closure f. Read more
    source§

    fn with_position(self) -> WithPosition<Self>where - Self: Sized,

    Return an iterator adaptor that wraps each element in a Position to + Self: Sized,
    Return an iterator adaptor that wraps each element in a Position to ease special-case handling of the first or last elements. Read more
    source§

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where - Self: Sized, - P: FnMut(Self::Item) -> bool,

    Return an iterator adaptor that yields the indices of all elements + Self: Sized, + P: FnMut(Self::Item) -> bool,
    Return an iterator adaptor that yields the indices of all elements satisfying a predicate, counted from the start of the iterator. Read more
    source§

    fn update<F>(self, updater: F) -> Update<Self, F>where - Self: Sized, - F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, + Self: Sized, + F: FnMut(&mut Self::Item),

    Return an iterator adaptor that applies a mutating function +to each element before yielding it. Read more
    source§

    fn next_tuple<T>(&mut self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 12). Read more
    source§

    fn collect_tuple<T>(self) -> Option<T>where - Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, +a specific size (up to 12). Read more

    source§

    fn collect_tuple<T>(self) -> Option<T>where + Self: Sized + Iterator<Item = <T as TupleCollect>::Item>, T: HomogeneousTuple,

    Collects all items from the iterator into a tuple of a specific size -(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where - P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where - Self: Sized, - P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere - Self: Sized, - Self::Item: Borrow<Q>, - Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere - Self: Sized, - Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere - Self: Sized,

    Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere - Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, +(up to 12). Read more
    source§

    fn find_position<P>(&mut self, pred: P) -> Option<(usize, Self::Item)>where + P: FnMut(&Self::Item) -> bool,

    Find the position and value of the first element satisfying a predicate. Read more
    source§

    fn find_or_last<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the last element, if any. Read more
    source§

    fn find_or_first<P>(self, predicate: P) -> Option<Self::Item>where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

    Find the value of the first element satisfying a predicate or return the first element, if any. Read more
    source§

    fn contains<Q>(&mut self, query: &Q) -> boolwhere + Self: Sized, + Self::Item: Borrow<Q>, + Q: PartialEq<Q>,

    Returns true if the given item is present in this iterator. Read more
    source§

    fn all_equal(&mut self) -> boolwhere + Self: Sized, + Self::Item: PartialEq<Self::Item>,

    Check whether all elements compare equal. Read more
    source§

    fn dropping(self, n: usize) -> Selfwhere + Self: Sized,

    Consume the first n elements from the iterator eagerly, +and return the same iterator again. Read more
    source§

    fn dropping_back(self, n: usize) -> Selfwhere + Self: Sized + DoubleEndedIterator,

    Consume the last n elements from the iterator eagerly, and return the same iterator again. Read more
    source§

    fn foreach<F>(self, f: F)where - F: FnMut(Self::Item), - Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere - Self: Sized, - Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where - Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, -for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where - Self: Sized + Iterator<Item = Result<T, E>>, - Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing -.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere + F: FnMut(Self::Item), + Self: Sized,

    👎Deprecated since 0.8.0: Use .for_each() instead
    Run the closure f eagerly on each element of the iterator. Read more
    source§

    fn concat(self) -> Self::Itemwhere + Self: Sized, + Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

    Combine all an iterator’s elements into one element by using Extend. Read more
    source§

    fn collect_vec(self) -> Vec<Self::Item, Global>where + Self: Sized,

    .collect_vec() is simply a type specialization of Iterator::collect, +for convenience.
    source§

    fn try_collect<T, U, E>(self) -> Result<U, E>where + Self: Sized + Iterator<Item = Result<T, E>>, + Result<U, E>: FromIterator<Result<T, E>>,

    .try_collect() is more convenient way of writing +.collect::<Result<_, _>>() Read more
    source§

    fn set_from<'a, A, J>(&mut self, from: J) -> usizewhere A: 'a, - Self: Iterator<Item = &'a mut A>, - J: IntoIterator<Item = A>,

    Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere - Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where - Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where - Self: Sized, - F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where - Self: Iterator<Item = Result<A, E>>, - F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where - Self: Iterator<Item = Option<A>>, - F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where - F: FnMut(Self::Item, Self::Item) -> Self::Item, - Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where - Self: Sized, - F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where - Self: Sized, - S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where - Self: Sized, - P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is -called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where - Self: Sized, - Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where - Self: Sized, - F: FnMut(Self::Item) -> Either<L, R>, - A: Default + Extend<L>, - B: Default + Extend<R>,

    Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where - Self: Iterator<Item = Result<T, E>> + Sized, - A: Default + Extend<T>, - B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements -and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where - Self: Sized, - Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where - Self: Sized, - K: Ord, - F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as -determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as -determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where - Self: Sized, - Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in -the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where - Self: Sized, - K: PartialOrd<K>, - F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where - Self: Sized, - F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an -iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise + Self: Iterator<Item = &'a mut A>, + J: IntoIterator<Item = A>,
    Assign to each reference in self from the from iterator, +stopping at the shortest of the two iterators. Read more
    source§

    fn join(&mut self, sep: &str) -> Stringwhere + Self::Item: Display,

    Combine all iterator elements into one String, separated by sep. Read more
    source§

    fn format(self, sep: &str) -> Format<'_, Self>where + Self: Sized,

    Format all iterator elements, separated by sep. Read more
    source§

    fn format_with<F>(self, sep: &str, format: F) -> FormatWith<'_, Self, F>where + Self: Sized, + F: FnMut(Self::Item, &mut dyn FnMut(&dyn Display) -> Result<(), Error>) -> Result<(), Error>,

    Format all iterator elements, separated by sep. Read more
    source§

    fn fold_results<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    👎Deprecated since 0.10.0: Use .fold_ok() instead
    source§

    fn fold_ok<A, E, B, F>(&mut self, start: B, f: F) -> Result<B, E>where + Self: Iterator<Item = Result<A, E>>, + F: FnMut(B, A) -> B,

    Fold Result values from an iterator. Read more
    source§

    fn fold_options<A, B, F>(&mut self, start: B, f: F) -> Option<B>where + Self: Iterator<Item = Option<A>>, + F: FnMut(B, A) -> B,

    Fold Option values from an iterator. Read more
    source§

    fn fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    👎Deprecated since 0.10.2: Use Iterator::reduce instead
    Accumulator of the elements in the iterator. Read more
    source§

    fn tree_fold1<F>(self, f: F) -> Option<Self::Item>where + F: FnMut(Self::Item, Self::Item) -> Self::Item, + Self: Sized,

    Accumulate the elements in the iterator in a tree-like manner. Read more
    source§

    fn fold_while<B, F>(&mut self, init: B, f: F) -> FoldWhile<B>where + Self: Sized, + F: FnMut(B, Self::Item) -> FoldWhile<B>,

    An iterator method that applies a function, producing a single, final value. Read more
    source§

    fn sum1<S>(self) -> Option<S>where + Self: Sized, + S: Sum<Self::Item>,

    Iterate over the entire iterator and add all the elements. Read more
    source§

    fn product1<P>(self) -> Option<P>where + Self: Sized, + P: Product<Self::Item>,

    Iterate over the entire iterator and multiply all the elements. Read more
    source§

    fn sorted_unstable(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_unstable_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted(self) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by<F>(self, cmp: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. Read more
    source§

    fn sorted_by_cached_key<K, F>(self, f: F) -> IntoIter<Self::Item, Global>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Sort all iterator elements into a new iterator in ascending order. The key function is +called exactly once per key. Read more
    source§

    fn k_smallest(self, k: usize) -> IntoIter<Self::Item, Global>where + Self: Sized, + Self::Item: Ord,

    Sort the k smallest elements into a new iterator, in ascending order. Read more
    source§

    fn partition_map<A, B, F, L, R>(self, predicate: F) -> (A, B)where + Self: Sized, + F: FnMut(Self::Item) -> Either<L, R>, + A: Default + Extend<L>, + B: Default + Extend<R>,

    Collect all iterator elements into one of two +partitions. Unlike Iterator::partition, each partition may +have a distinct type. Read more
    source§

    fn partition_result<A, B, T, E>(self) -> (A, B)where + Self: Iterator<Item = Result<T, E>> + Sized, + A: Default + Extend<T>, + B: Default + Extend<E>,

    Partition a sequence of Results into one list of all the Ok elements +and another list of all the Err elements. Read more
    source§

    fn minmax(self) -> MinMaxResult<Self::Item>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the minimum and maximum elements in the iterator. Read more
    source§

    fn minmax_by_key<K, F>(self, key: F) -> MinMaxResult<Self::Item>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the minimum and maximum element of an iterator, as determined by +the specified function. Read more
    source§

    fn minmax_by<F>(self, compare: F) -> MinMaxResult<Self::Item>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the minimum and maximum element of an iterator, as determined by +the specified comparison function. Read more
    source§

    fn position_max(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the maximum element in the iterator. Read more
    source§

    fn position_max_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the maximum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_max_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the maximum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_min(self) -> Option<usize>where + Self: Sized, + Self::Item: Ord,

    Return the position of the minimum element in the iterator. Read more
    source§

    fn position_min_by_key<K, F>(self, key: F) -> Option<usize>where + Self: Sized, + K: Ord, + F: FnMut(&Self::Item) -> K,

    Return the position of the minimum element in the iterator, as +determined by the specified function. Read more
    source§

    fn position_min_by<F>(self, compare: F) -> Option<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the position of the minimum element in the iterator, as +determined by the specified comparison function. Read more
    source§

    fn position_minmax(self) -> MinMaxResult<usize>where + Self: Sized, + Self::Item: PartialOrd<Self::Item>,

    Return the positions of the minimum and maximum elements in +the iterator. Read more
    source§

    fn position_minmax_by_key<K, F>(self, key: F) -> MinMaxResult<usize>where + Self: Sized, + K: PartialOrd<K>, + F: FnMut(&Self::Item) -> K,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified function. Read more
    source§

    fn position_minmax_by<F>(self, compare: F) -> MinMaxResult<usize>where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

    Return the postions of the minimum and maximum elements of an +iterator, as determined by the specified comparison function. Read more
    source§

    fn exactly_one(self) -> Result<Self::Item, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input -iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where - Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields +iterator. Read more
    source§

    fn at_most_one(self) -> Result<Option<Self::Item>, ExactlyOneError<Self>>where + Self: Sized,

    If the iterator yields no elements, Ok(None) will be returned. If the iterator yields exactly one element, that element will be returned, otherwise an error will be returned containing an iterator that has the same output as the input iterator. Read more
    source§

    fn multipeek(self) -> MultiPeek<Self>where - Self: Sized,

    An iterator adaptor that allows the user to peek at multiple .next() -values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere - Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere - IT: Iterator<Item = (A, B)>, - FromA: Default + Extend<A>, - FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file + Self: Sized,
    An iterator adaptor that allows the user to peek at multiple .next() +values without advancing the base iterator. Read more
    source§

    fn multiunzip<FromI>(self) -> FromIwhere + Self: Sized + MultiUnzip<FromI>,

    Converts an iterator of tuples into a tuple of containers. Read more
    source§

    impl<IT, A, FromA, B, FromB> MultiUnzip<(FromA, FromB)> for ITwhere + IT: Iterator<Item = (A, B)>, + FromA: Default + Extend<A>, + FromB: Default + Extend<B>,

    source§

    fn multiunzip(self) -> (FromA, FromB)

    Unzip this iterator into multiple collections.
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/enum.Slice.html b/docs/fp/vector/vector_generic/enum.Slice.html index 5a35c2efb..2d4eac0a3 100644 --- a/docs/fp/vector/vector_generic/enum.Slice.html +++ b/docs/fp/vector/vector_generic/enum.Slice.html @@ -1,4 +1,4 @@ -Slice in fp::vector::vector_generic - Rust +Slice in fp::vector::vector_generic - Rust @@ -23,25 +23,25 @@ }); -
    pub enum Slice<'a> {
    +
    pub enum Slice<'a> {
         _2(SliceP<'a, 2>),
         _3(SliceP<'a, 3>),
         _5(SliceP<'a, 5>),
         _7(SliceP<'a, 7>),
    -}

    Variants§

    §

    _2(SliceP<'a, 2>)

    §

    _3(SliceP<'a, 3>)

    §

    _5(SliceP<'a, 5>)

    §

    _7(SliceP<'a, 7>)

    Implementations§

    source§

    impl<'a> Slice<'a>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn iter(self) -> FpVectorIterator<'a>

    source

    pub fn iter_nonzero(self) -> FpVectorNonZeroIterator<'a>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn slice(self, start: usize, end: usize) -> Slice<'a>

    source

    pub fn to_owned(self) -> FpVector

    Trait Implementations§

    source§

    impl<'a> Clone for Slice<'a>

    source§

    fn clone(&self) -> Slice<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Debug for Slice<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a> Display for Slice<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Variants§

    §

    _2(SliceP<'a, 2>)

    §

    _3(SliceP<'a, 3>)

    §

    _5(SliceP<'a, 5>)

    §

    _7(SliceP<'a, 7>)

    Implementations§

    source§

    impl<'a> Slice<'a>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn len(&self) -> usize

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn entry(&self, index: usize) -> u32

    source

    pub fn iter(self) -> FpVectorIterator<'a>

    source

    pub fn iter_nonzero(self) -> FpVectorNonZeroIterator<'a>

    source

    pub fn is_zero(&self) -> bool

    source

    pub fn slice(self, start: usize, end: usize) -> Slice<'a>

    source

    pub fn to_owned(self) -> FpVector

    Trait Implementations§

    source§

    impl<'a> Clone for Slice<'a>

    source§

    fn clone(&self) -> Slice<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Debug for Slice<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a> Display for Slice<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Example
    let v = FpVector::from_slice(ValidPrime::new(2), &[0, 1, 0]);
     assert_eq!(&format!("{v}"), "[0, 1, 0]");
     assert_eq!(&format!("{v:#}"), "010");
    -
    source§

    impl<'a> From<&'a FpVector> for Slice<'a>

    source§

    fn from(v: &'a FpVector) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a Slice<'b>> for Slice<'a>

    source§

    fn from(slice: &'a Slice<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>

    source§

    fn from(slice: &'a SliceMut<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> Copy for Slice<'a>

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for Slice<'a>

    §

    impl<'a> Send for Slice<'a>

    §

    impl<'a> Sync for Slice<'a>

    §

    impl<'a> Unpin for Slice<'a>

    §

    impl<'a> UnwindSafe for Slice<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    source§

    impl<'a> From<&'a FpVector> for Slice<'a>

    source§

    fn from(v: &'a FpVector) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a Slice<'b>> for Slice<'a>

    source§

    fn from(slice: &'a Slice<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>

    source§

    fn from(slice: &'a SliceMut<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> Copy for Slice<'a>

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for Slice<'a>

    §

    impl<'a> Send for Slice<'a>

    §

    impl<'a> Sync for Slice<'a>

    §

    impl<'a> Unpin for Slice<'a>

    §

    impl<'a> UnwindSafe for Slice<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/enum.SliceMut.html b/docs/fp/vector/vector_generic/enum.SliceMut.html index 714ab58b9..8e6c0518c 100644 --- a/docs/fp/vector/vector_generic/enum.SliceMut.html +++ b/docs/fp/vector/vector_generic/enum.SliceMut.html @@ -1,4 +1,4 @@ -SliceMut in fp::vector::vector_generic - Rust +SliceMut in fp::vector::vector_generic - Rust @@ -23,25 +23,25 @@ }); -
    pub enum SliceMut<'a> {
    +
    pub enum SliceMut<'a> {
         _2(SliceMutP<'a, 2>),
         _3(SliceMutP<'a, 3>),
         _5(SliceMutP<'a, 5>),
         _7(SliceMutP<'a, 7>),
    -}

    Variants§

    §

    _2(SliceMutP<'a, 2>)

    §

    _3(SliceMutP<'a, 3>)

    §

    _5(SliceMutP<'a, 5>)

    §

    _7(SliceMutP<'a, 7>)

    Implementations§

    source§

    impl<'a> SliceMut<'a>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, other: Slice<'_>, c: u32)

    source

    pub fn assign(&mut self, other: Slice<'_>)

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    pub fn as_slice(&self) -> Slice<'_>

    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMut<'_>

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn copy(&mut self) -> SliceMut<'_>

    source

    pub fn add_masked(&mut self, other: Slice<'_>, c: u32, mask: &[usize])

    source

    pub fn add_unmasked(&mut self, other: Slice<'_>, c: u32, mask: &[usize])

    source

    pub fn add_tensor( +}

    Variants§

    §

    _2(SliceMutP<'a, 2>)

    §

    _3(SliceMutP<'a, 3>)

    §

    _5(SliceMutP<'a, 5>)

    §

    _7(SliceMutP<'a, 7>)

    Implementations§

    source§

    impl<'a> SliceMut<'a>

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn scale(&mut self, c: u32)

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, other: Slice<'_>, c: u32)

    source

    pub fn assign(&mut self, other: Slice<'_>)

    source

    pub fn set_entry(&mut self, index: usize, value: u32)

    source

    pub fn as_slice(&self) -> Slice<'_>

    source

    pub fn slice_mut(&mut self, start: usize, end: usize) -> SliceMut<'_>

    source

    pub fn add_basis_element(&mut self, index: usize, value: u32)

    source

    pub fn copy(&mut self) -> SliceMut<'_>

    source

    pub fn add_masked(&mut self, other: Slice<'_>, c: u32, mask: &[usize])

    source

    pub fn add_unmasked(&mut self, other: Slice<'_>, c: u32, mask: &[usize])

    source

    pub fn add_tensor( &mut self, - offset: usize, - coeff: u32, + offset: usize, + coeff: u32, left: Slice<'_>, right: Slice<'_> -)

    Trait Implementations§

    source§

    impl<'a> Debug for SliceMut<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>

    source§

    fn from(slice: &'a SliceMut<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> From<&'a mut FpVector> for SliceMut<'a>

    source§

    fn from(v: &'a mut FpVector) -> SliceMut<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a mut SliceMut<'b>> for SliceMut<'a>

    source§

    fn from(slice: &'a mut SliceMut<'b>) -> SliceMut<'a>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for SliceMut<'a>

    §

    impl<'a> Send for SliceMut<'a>

    §

    impl<'a> Sync for SliceMut<'a>

    §

    impl<'a> Unpin for SliceMut<'a>

    §

    impl<'a> !UnwindSafe for SliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +)

    Trait Implementations§

    source§

    impl<'a> Debug for SliceMut<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>

    source§

    fn from(slice: &'a SliceMut<'b>) -> Slice<'a>

    Converts to this type from the input type.
    source§

    impl<'a> From<&'a mut FpVector> for SliceMut<'a>

    source§

    fn from(v: &'a mut FpVector) -> SliceMut<'a>

    Converts to this type from the input type.
    source§

    impl<'a, 'b> From<&'a mut SliceMut<'b>> for SliceMut<'a>

    source§

    fn from(slice: &'a mut SliceMut<'b>) -> SliceMut<'a>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for SliceMut<'a>

    §

    impl<'a> Send for SliceMut<'a>

    §

    impl<'a> Sync for SliceMut<'a>

    §

    impl<'a> Unpin for SliceMut<'a>

    §

    impl<'a> !UnwindSafe for SliceMut<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/index.html b/docs/fp/vector/vector_generic/index.html index ac4c0b975..053645f47 100644 --- a/docs/fp/vector/vector_generic/index.html +++ b/docs/fp/vector/vector_generic/index.html @@ -1,4 +1,4 @@ -fp::vector::vector_generic - Rust +fp::vector::vector_generic - Rust @@ -23,7 +23,7 @@ }); -

    Module fp::vector::vector_generic

    source ·
    Expand description

    This module is provides wrappers around the contents of crate::vector::inner. The main +

    Module fp::vector::vector_generic

    source ·
    Expand description

    This module is provides wrappers around the contents of crate::vector::inner. The main purpose is to put FpVectorP for different p into a single enum. It does the same for the various slice structs.

    The main magic occurs in the macro dispatch_vector_inner, which we use to provide wrapper diff --git a/docs/fp/vector/vector_generic/macro.dispatch_vector.html b/docs/fp/vector/vector_generic/macro.dispatch_vector.html index acf7a01f1..af383750d 100644 --- a/docs/fp/vector/vector_generic/macro.dispatch_vector.html +++ b/docs/fp/vector/vector_generic/macro.dispatch_vector.html @@ -1,4 +1,4 @@ -dispatch_vector in fp::vector::vector_generic - Rust +dispatch_vector in fp::vector::vector_generic - Rust @@ -23,7 +23,7 @@ }); -

    macro_rules! dispatch_vector {
    +
    macro_rules! dispatch_vector {
         () => { ... };
         ($vis:vis fn $method:ident $tt:tt $(-> $ret:tt)?; $($tail:tt)*) => { ... };
     }
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/macro.dispatch_vector_inner.html b/docs/fp/vector/vector_generic/macro.dispatch_vector_inner.html index 72f060c4a..1244ab651 100644 --- a/docs/fp/vector/vector_generic/macro.dispatch_vector_inner.html +++ b/docs/fp/vector/vector_generic/macro.dispatch_vector_inner.html @@ -1,4 +1,4 @@ -dispatch_vector_inner in fp::vector::vector_generic - Rust +dispatch_vector_inner in fp::vector::vector_generic - Rust @@ -23,7 +23,7 @@ }); -
    macro_rules! dispatch_vector_inner {
    +
    macro_rules! dispatch_vector_inner {
         ($vis:vis fn $method:ident(&self, other: &$other:tt $(, $arg:ident: $ty:ty )* ) $(-> $ret:ty)?) => { ... };
         ($vis:vis fn $method:ident(&mut self, other: &$other:tt $(, $arg:ident: $ty:ty )* ) $(-> $ret:ty)?) => { ... };
         ($vis:vis fn $method:ident(&mut self, other: $other:tt $(, $arg:ident: $ty:ty )* ) $(-> $ret:ty)?) => { ... };
    diff --git a/docs/fp/vector/vector_generic/macro.impl_try_into.html b/docs/fp/vector/vector_generic/macro.impl_try_into.html
    index 328ee2e59..b4e0a38ef 100644
    --- a/docs/fp/vector/vector_generic/macro.impl_try_into.html
    +++ b/docs/fp/vector/vector_generic/macro.impl_try_into.html
    @@ -1,4 +1,4 @@
    -impl_try_into in fp::vector::vector_generic - Rust
    +impl_try_into in fp::vector::vector_generic - Rust
     
     
     
    @@ -23,6 +23,6 @@
         });
     
     
    -
    macro_rules! impl_try_into {
    +
    macro_rules! impl_try_into {
         ($var:tt, $p:literal) => { ... };
     }
    \ No newline at end of file diff --git a/docs/fp/vector/vector_generic/macro.match_p.html b/docs/fp/vector/vector_generic/macro.match_p.html index 322f8372c..41ce39180 100644 --- a/docs/fp/vector/vector_generic/macro.match_p.html +++ b/docs/fp/vector/vector_generic/macro.match_p.html @@ -1,4 +1,4 @@ -match_p in fp::vector::vector_generic - Rust +match_p in fp::vector::vector_generic - Rust @@ -23,6 +23,6 @@ }); -
    macro_rules! match_p {
    +
    macro_rules! match_p {
         ($p:ident, $($val:tt)*) => { ... };
     }
    \ No newline at end of file diff --git a/docs/help.html b/docs/help.html index dd5f90b8b..fb3244c42 100644 --- a/docs/help.html +++ b/docs/help.html @@ -1,4 +1,4 @@ -Rustdoc help +Rustdoc help @@ -23,4 +23,4 @@ }); -

    Rustdoc help

    Back
    \ No newline at end of file +

    Rustdoc help

    Back
    \ No newline at end of file diff --git a/docs/implementors/core/clone/trait.Clone.js b/docs/implementors/core/clone/trait.Clone.js index 9bf17c369..98f22a8ab 100644 --- a/docs/implementors/core/clone/trait.Clone.js +++ b/docs/implementors/core/clone/trait.Clone.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl Clone for OperationGeneratorPair"],["impl Clone for BocksteinOrSq"],["impl Clone for MilnorBasisElement"],["impl Clone for AdemBasisElement"],["impl Clone for AlgebraType"],["impl<S: Module, T: Module<Algebra = S::Algebra>> Clone for FullModuleHomomorphism<S, T>"],["impl Clone for PolynomialAlgebraMonomial"],["impl Clone for AlgebraNode"],["impl<A: Algebra> Clone for FiniteDimensionalModule<A>"],["impl Clone for AlgebraBasisElt"]], -"bivec":[["impl<T: Clone> Clone for BiVec<T>"]], -"ext":[["impl Clone for SaveKind"],["impl Clone for MilnorSubalgebra"],["impl Clone for Config"]], -"fp":[["impl Clone for LimbBitIndexPair"],["impl Clone for Matrix"],["impl Clone for FpVector"],["impl Clone for Subquotient"],["impl<const P: u32> Clone for FpVectorP<P>"],["impl Clone for QuasiInverse"],["impl Clone for Subspace"],["impl<const N: usize> Clone for AugmentedMatrix<N>"],["impl<'a, const P: u32> Clone for SliceP<'a, P>"],["impl Clone for ValidPrime"],["impl<'a> Clone for Slice<'a>"]], -"once":[["impl Clone for OooTracker"],["impl<T: Clone> Clone for OnceVec<T>"],["impl<T: Clone> Clone for OnceBiVec<T>"]], -"sseq":[["impl<'a> Clone for BidegreeElement<'a>"],["impl Clone for Bidegree"],["impl Clone for BidegreeGenerator"],["impl<T> Clone for BidegreeRange<'_, T>"]] +"algebra":[["impl Clone for PolynomialAlgebraMonomial"],["impl Clone for MilnorBasisElement"],["impl<A: Algebra> Clone for FiniteDimensionalModule<A>"],["impl Clone for AlgebraNode"],["impl Clone for AlgebraType"],["impl Clone for BocksteinOrSq"],["impl Clone for AdemBasisElement"],["impl Clone for OperationGeneratorPair"],["impl Clone for AlgebraBasisElt"],["impl<S: Module, T: Module<Algebra = S::Algebra>> Clone for FullModuleHomomorphism<S, T>"]], +"bivec":[["impl<T: Clone> Clone for BiVec<T>"]], +"ext":[["impl Clone for SaveKind"],["impl Clone for MilnorSubalgebra"],["impl Clone for Config"]], +"fp":[["impl Clone for Subspace"],["impl<const P: u32> Clone for FpVectorP<P>"],["impl Clone for LimbBitIndexPair"],["impl<'a> Clone for Slice<'a>"],["impl<const N: usize> Clone for AugmentedMatrix<N>"],["impl Clone for Subquotient"],["impl Clone for ValidPrime"],["impl<'a, const P: u32> Clone for SliceP<'a, P>"],["impl Clone for Matrix"],["impl Clone for FpVector"],["impl Clone for QuasiInverse"]], +"once":[["impl<T: Clone> Clone for OnceVec<T>"],["impl Clone for OooTracker"],["impl<T: Clone> Clone for OnceBiVec<T>"]], +"sseq":[["impl<T> Clone for BidegreeRange<'_, T>"],["impl Clone for Bidegree"],["impl<'a> Clone for BidegreeElement<'a>"],["impl Clone for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.Eq.js b/docs/implementors/core/cmp/trait.Eq.js index 512aa1934..966fa7886 100644 --- a/docs/implementors/core/cmp/trait.Eq.js +++ b/docs/implementors/core/cmp/trait.Eq.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl Eq for MilnorBasisElement"],["impl Eq for MilnorProfile"],["impl<A: Algebra> Eq for FiniteDimensionalModule<A>"],["impl Eq for AlgebraType"],["impl Eq for PolynomialAlgebraMonomial"],["impl<A: Algebra> Eq for FinitelyPresentedModule<A>"],["impl Eq for AdemBasisElement"],["impl<A: Algebra> Eq for RealProjectiveSpace<A>"]], -"bivec":[["impl<T: Eq> Eq for BiVec<T>"]], -"ext":[["impl Eq for Config"],["impl Eq for SaveKind"]], -"fp":[["impl Eq for Subspace"],["impl Eq for ValidPrime"],["impl Eq for Matrix"],["impl<const P: u32> Eq for FpVectorP<P>"],["impl Eq for QuasiInverse"],["impl Eq for FpVector"]], -"once":[["impl<T: Eq> Eq for OnceBiVec<T>"],["impl<T> Eq for OnceVec<T>where\n T: Eq,"]], -"sseq":[["impl Eq for Bidegree"],["impl Eq for BidegreeGenerator"]] +"algebra":[["impl<A: Algebra> Eq for FiniteDimensionalModule<A>"],["impl Eq for PolynomialAlgebraMonomial"],["impl Eq for MilnorBasisElement"],["impl Eq for AdemBasisElement"],["impl Eq for AlgebraType"],["impl<A: Algebra> Eq for FinitelyPresentedModule<A>"],["impl Eq for MilnorProfile"],["impl<A: Algebra> Eq for RealProjectiveSpace<A>"]], +"bivec":[["impl<T: Eq> Eq for BiVec<T>"]], +"ext":[["impl Eq for SaveKind"],["impl Eq for Config"]], +"fp":[["impl<const P: u32> Eq for FpVectorP<P>"],["impl Eq for Matrix"],["impl Eq for QuasiInverse"],["impl Eq for ValidPrime"],["impl Eq for FpVector"],["impl Eq for Subspace"]], +"once":[["impl<T: Eq> Eq for OnceBiVec<T>"],["impl<T> Eq for OnceVec<T>where\n T: Eq,"]], +"sseq":[["impl Eq for Bidegree"],["impl Eq for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/cmp/trait.PartialEq.js b/docs/implementors/core/cmp/trait.PartialEq.js index 58610f0ee..85051a398 100644 --- a/docs/implementors/core/cmp/trait.PartialEq.js +++ b/docs/implementors/core/cmp/trait.PartialEq.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl PartialEq<AdemBasisElement> for AdemBasisElement"],["impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial"],["impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>"],["impl<A: Algebra> PartialEq<RealProjectiveSpace<A>> for RealProjectiveSpace<A>"],["impl PartialEq<MilnorBasisElement> for MilnorBasisElement"],["impl PartialEq<AlgebraType> for AlgebraType"],["impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>"],["impl PartialEq<MilnorProfile> for MilnorProfile"]], -"bivec":[["impl<T: PartialEq> PartialEq<BiVec<T>> for BiVec<T>"]], -"ext":[["impl PartialEq<Config> for Config"],["impl PartialEq<SaveKind> for SaveKind"]], -"fp":[["impl PartialEq<Matrix> for Matrix"],["impl<const P: u32> PartialEq<FpVectorP<P>> for FpVectorP<P>"],["impl PartialEq<QuasiInverse> for QuasiInverse"],["impl PartialEq<Subspace> for Subspace"],["impl PartialEq<FpVector> for FpVector"],["impl PartialEq<ValidPrime> for ValidPrime"]], -"once":[["impl<T> PartialEq<OnceVec<T>> for OnceVec<T>where\n T: PartialEq,"],["impl<T: PartialEq> PartialEq<OnceBiVec<T>> for OnceBiVec<T>"]], -"sseq":[["impl PartialEq<Bidegree> for Bidegree"],["impl PartialEq<BidegreeGenerator> for BidegreeGenerator"]] +"algebra":[["impl<A: Algebra> PartialEq<FiniteDimensionalModule<A>> for FiniteDimensionalModule<A>"],["impl PartialEq<MilnorBasisElement> for MilnorBasisElement"],["impl PartialEq<AlgebraType> for AlgebraType"],["impl PartialEq<PolynomialAlgebraMonomial> for PolynomialAlgebraMonomial"],["impl<A: Algebra> PartialEq<FinitelyPresentedModule<A>> for FinitelyPresentedModule<A>"],["impl PartialEq<MilnorProfile> for MilnorProfile"],["impl PartialEq<AdemBasisElement> for AdemBasisElement"],["impl<A: Algebra> PartialEq<RealProjectiveSpace<A>> for RealProjectiveSpace<A>"]], +"bivec":[["impl<T: PartialEq> PartialEq<BiVec<T>> for BiVec<T>"]], +"ext":[["impl PartialEq<Config> for Config"],["impl PartialEq<SaveKind> for SaveKind"]], +"fp":[["impl PartialEq<Matrix> for Matrix"],["impl PartialEq<ValidPrime> for ValidPrime"],["impl PartialEq<QuasiInverse> for QuasiInverse"],["impl PartialEq<Subspace> for Subspace"],["impl PartialEq<FpVector> for FpVector"],["impl<const P: u32> PartialEq<FpVectorP<P>> for FpVectorP<P>"]], +"once":[["impl<T: PartialEq> PartialEq<OnceBiVec<T>> for OnceBiVec<T>"],["impl<T> PartialEq<OnceVec<T>> for OnceVec<T>where\n T: PartialEq,"]], +"sseq":[["impl PartialEq<BidegreeGenerator> for BidegreeGenerator"],["impl PartialEq<Bidegree> for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/convert/trait.From.js b/docs/implementors/core/convert/trait.From.js index 278aa088b..7eb37c94b 100644 --- a/docs/implementors/core/convert/trait.From.js +++ b/docs/implementors/core/convert/trait.From.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>"]], -"ext":[["impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where\n M: Module,\n CC: ChainComplex<Algebra = M::Algebra>,\n F1: ModuleHomomorphism<Source = M, Target = M>,\n F2: ModuleHomomorphism<Source = M, Target = CC::Module>,"]], -"fp":[["impl<T: AsRef<[u32]>, const P: u32> From<&T> for FpVectorP<P>"],["impl<'a, 'b> From<&'a mut SliceMut<'b>> for SliceMut<'a>"],["impl<'a> From<&'a mut FpVector> for SliceMut<'a>"],["impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>"],["impl From<ValidPrime> for u32"],["impl<'a, const P: u32> From<&'a mut FpVectorP<P>> for SliceMutP<'a, P>"],["impl<const P: u32> From<&FpVectorP<P>> for Vec<u32>"],["impl<'a, 'b> From<&'a Slice<'b>> for Slice<'a>"],["impl<'a> From<&'a FpVector> for Slice<'a>"],["impl<'a, const P: u32> From<&'a FpVectorP<P>> for SliceP<'a, P>"],["impl From<&FpVector> for Vec<u32>"]], -"sseq":[["impl From<(Bidegree, usize)> for BidegreeGenerator"]] +"algebra":[["impl<M: Module> From<&M> for FiniteDimensionalModule<M::Algebra>"]], +"ext":[["impl<M, F1, F2, CC> From<FiniteAugmentedChainComplex<M, F1, F2, CC>> for FiniteChainComplex<M, F1>where\n M: Module,\n CC: ChainComplex<Algebra = M::Algebra>,\n F1: ModuleHomomorphism<Source = M, Target = M>,\n F2: ModuleHomomorphism<Source = M, Target = CC::Module>,"]], +"fp":[["impl<'a, 'b> From<&'a mut SliceMut<'b>> for SliceMut<'a>"],["impl From<ValidPrime> for u32"],["impl<'a, const P: u32> From<&'a mut FpVectorP<P>> for SliceMutP<'a, P>"],["impl<'a> From<&'a mut FpVector> for SliceMut<'a>"],["impl<'a, 'b> From<&'a SliceMut<'b>> for Slice<'a>"],["impl<const P: u32> From<&FpVectorP<P>> for Vec<u32>"],["impl From<&FpVector> for Vec<u32>"],["impl<'a, 'b> From<&'a Slice<'b>> for Slice<'a>"],["impl<'a> From<&'a FpVector> for Slice<'a>"],["impl<T: AsRef<[u32]>, const P: u32> From<&T> for FpVectorP<P>"],["impl<'a, const P: u32> From<&'a FpVectorP<P>> for SliceP<'a, P>"]], +"sseq":[["impl From<(Bidegree, usize)> for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/convert/trait.TryFrom.js b/docs/implementors/core/convert/trait.TryFrom.js index 9e3570a29..d5f51cfe6 100644 --- a/docs/implementors/core/convert/trait.TryFrom.js +++ b/docs/implementors/core/convert/trait.TryFrom.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl TryFrom<&str> for AlgebraType"]], -"ext":[["impl TryFrom<&str> for Config"],["impl<T, E> TryFrom<(&str, T)> for Configwhere\n Error: From<E>,\n T: TryInto<AlgebraType, Error = E>,"],["impl<T: TryInto<AlgebraType>> TryFrom<(Value, T)> for Config"]], -"fp":[["impl TryFrom<u32> for ValidPrime"]], -"sseq":[["impl TryFrom<BidegreeElement<'_>> for BidegreeGenerator"]] +"algebra":[["impl TryFrom<&str> for AlgebraType"]], +"ext":[["impl TryFrom<&str> for Config"],["impl<T, E> TryFrom<(&str, T)> for Configwhere\n Error: From<E>,\n T: TryInto<AlgebraType, Error = E>,"],["impl<T: TryInto<AlgebraType>> TryFrom<(Value, T)> for Config"]], +"fp":[["impl TryFrom<u32> for ValidPrime"]], +"sseq":[["impl TryFrom<BidegreeElement<'_>> for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/convert/trait.TryInto.js b/docs/implementors/core/convert/trait.TryInto.js index ee0e378ac..0c208410b 100644 --- a/docs/implementors/core/convert/trait.TryInto.js +++ b/docs/implementors/core/convert/trait.TryInto.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"algebra":[["impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra"],["impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra"]], -"fp":[["impl<'a> TryInto<&'a mut FpVectorP<5>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<2>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<3>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<7>> for &'a mut FpVector"]] +"algebra":[["impl<'a> TryInto<&'a AdemAlgebra> for &'a SteenrodAlgebra"],["impl<'a> TryInto<&'a MilnorAlgebra> for &'a SteenrodAlgebra"]], +"fp":[["impl<'a> TryInto<&'a mut FpVectorP<7>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<5>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<3>> for &'a mut FpVector"],["impl<'a> TryInto<&'a mut FpVectorP<2>> for &'a mut FpVector"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/default/trait.Default.js b/docs/implementors/core/default/trait.Default.js index e8101871a..da8933148 100644 --- a/docs/implementors/core/default/trait.Default.js +++ b/docs/implementors/core/default/trait.Default.js @@ -1,7 +1,7 @@ (function() {var implementors = { -"algebra":[["impl Default for MilnorProfile"],["impl Default for PPartAllocation"],["impl Default for MilnorBasisElement"],["impl Default for PolynomialAlgebraTableEntry"],["impl Default for Matrix2D"]], -"bivec":[["impl<T> Default for BiVec<T>"]], -"fp":[["impl Default for M4riTable"]], -"once":[["impl<T> Default for Page<T>"],["impl<T> Default for OnceVec<T>"],["impl Default for OooTracker"]], -"sseq":[["impl Default for BidegreeGenerator"],["impl Default for Bidegree"]] +"algebra":[["impl Default for MilnorBasisElement"],["impl Default for PolynomialAlgebraTableEntry"],["impl Default for Matrix2D"],["impl Default for PPartAllocation"],["impl Default for MilnorProfile"]], +"bivec":[["impl<T> Default for BiVec<T>"]], +"fp":[["impl Default for M4riTable"]], +"once":[["impl<T> Default for Page<T>"],["impl Default for OooTracker"],["impl<T> Default for OnceVec<T>"]], +"sseq":[["impl Default for BidegreeGenerator"],["impl Default for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/error/trait.Error.js b/docs/implementors/core/error/trait.Error.js index 511847c81..856760de6 100644 --- a/docs/implementors/core/error/trait.Error.js +++ b/docs/implementors/core/error/trait.Error.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"algebra":[["impl Error for ModuleFailedRelationError"]], -"fp":[["impl Error for InvalidPrimeError"]] +"algebra":[["impl Error for ModuleFailedRelationError"]], +"fp":[["impl Error for InvalidPrimeError"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/fmt/trait.Debug.js b/docs/implementors/core/fmt/trait.Debug.js index ca84af945..0797ce744 100644 --- a/docs/implementors/core/fmt/trait.Debug.js +++ b/docs/implementors/core/fmt/trait.Debug.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl Debug for GeneratorBasisEltPair"],["impl Debug for OperationGeneratorPair"],["impl Debug for BlockStructure"],["impl Debug for AlgebraNode"],["impl Debug for AlgebraSpec"],["impl Debug for AdemBasisElement"],["impl Debug for RPSpec"],["impl Debug for MilnorProfile"],["impl Debug for ModuleFailedRelationError"],["impl Debug for PolynomialAlgebraMonomial"],["impl Debug for PorBockstein"],["impl Debug for AlgebraType"],["impl Debug for BocksteinOrSq"],["impl Debug for AlgebraBasisElt"],["impl Debug for Matrix2D"],["impl Debug for MilnorBasisElement"]], -"bivec":[["impl<T: Debug> Debug for BiVec<T>"]], -"ext":[["impl Debug for SaveKind"],["impl Debug for Config"]], -"fp":[["impl<'a> Debug for Slice<'a>"],["impl Debug for FpVector"],["impl Debug for Subspace"],["impl<'a> Debug for SliceMut<'a>"],["impl Debug for M4riTable"],["impl Debug for InvalidPrimeError"],["impl Debug for QuasiInverse"],["impl Debug for ValidPrime"],["impl<const P: u32> Debug for FpVectorP<P>"],["impl<'a, const P: u32> Debug for SliceP<'a, P>"],["impl<'a, const P: u32> Debug for SliceMutP<'a, P>"],["impl Debug for Matrix"]], -"once":[["impl<T: Debug> Debug for OnceVec<T>"],["impl<T: Debug> Debug for OnceBiVec<T>"]], -"sseq":[["impl Debug for BidegreeGenerator"],["impl<'a> Debug for BidegreeElement<'a>"],["impl Debug for Bidegree"]] +"algebra":[["impl Debug for BlockStructure"],["impl Debug for ModuleFailedRelationError"],["impl Debug for AlgebraBasisElt"],["impl Debug for BocksteinOrSq"],["impl Debug for AlgebraType"],["impl Debug for RPSpec"],["impl Debug for AlgebraNode"],["impl Debug for PolynomialAlgebraMonomial"],["impl Debug for GeneratorBasisEltPair"],["impl Debug for Matrix2D"],["impl Debug for OperationGeneratorPair"],["impl Debug for AdemBasisElement"],["impl Debug for PorBockstein"],["impl Debug for AlgebraSpec"],["impl Debug for MilnorProfile"],["impl Debug for MilnorBasisElement"]], +"bivec":[["impl<T: Debug> Debug for BiVec<T>"]], +"ext":[["impl Debug for Config"],["impl Debug for SaveKind"]], +"fp":[["impl Debug for Matrix"],["impl Debug for QuasiInverse"],["impl<'a> Debug for Slice<'a>"],["impl<'a> Debug for SliceMut<'a>"],["impl Debug for InvalidPrimeError"],["impl Debug for M4riTable"],["impl<const P: u32> Debug for FpVectorP<P>"],["impl Debug for Subspace"],["impl Debug for FpVector"],["impl<'a, const P: u32> Debug for SliceMutP<'a, P>"],["impl<'a, const P: u32> Debug for SliceP<'a, P>"],["impl Debug for ValidPrime"]], +"once":[["impl<T: Debug> Debug for OnceVec<T>"],["impl<T: Debug> Debug for OnceBiVec<T>"]], +"sseq":[["impl Debug for Bidegree"],["impl<'a> Debug for BidegreeElement<'a>"],["impl Debug for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/fmt/trait.Display.js b/docs/implementors/core/fmt/trait.Display.js index 9a4a5732a..46f14406e 100644 --- a/docs/implementors/core/fmt/trait.Display.js +++ b/docs/implementors/core/fmt/trait.Display.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>"],["impl Display for AlgebraType"],["impl<A: Algebra> Display for FiniteDimensionalModule<A>"],["impl<A: Algebra> Display for FinitelyPresentedModule<A>"],["impl Display for MilnorAlgebra"],["impl<M: Module> Display for SuspensionModule<M>"],["impl Display for ModuleFailedRelationError"],["impl Display for Field"],["impl<A: Algebra> Display for RealProjectiveSpace<A>"],["impl Display for AdemBasisElement"],["impl<M: Module> Display for HomModule<M>"],["impl<M: Module> Display for QuotientModule<M>"],["impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>"],["impl Display for SteenrodAlgebra"],["impl Display for Matrix2D"],["impl Display for PolynomialAlgebraMonomial"],["impl Display for MilnorBasisElement"],["impl Display for AdemAlgebra"]], -"ext":[["impl Display for MilnorSubalgebra"]], -"fp":[["impl Display for Subquotient"],["impl Display for ValidPrime"],["impl<'a> Display for Slice<'a>"],["impl Display for FpVector"],["impl Display for Subspace"],["impl Display for InvalidPrimeError"],["impl Display for Matrix"]], -"sseq":[["impl Display for Bidegree"],["impl Display for BidegreeElement<'_>"],["impl Display for BidegreeGenerator"]] +"algebra":[["impl<A: Algebra> Display for RealProjectiveSpace<A>"],["impl<M: Module> Display for QuotientModule<M>"],["impl<A: Algebra> Display for FiniteDimensionalModule<A>"],["impl<M: Module, N: Module<Algebra = M::Algebra>> Display for TensorModule<M, N>"],["impl Display for AlgebraType"],["impl Display for Matrix2D"],["impl<M: Module> Display for SuspensionModule<M>"],["impl Display for MilnorBasisElement"],["impl Display for ModuleFailedRelationError"],["impl Display for MilnorAlgebra"],["impl Display for SteenrodAlgebra"],["impl<M: Module> Display for HomModule<M>"],["impl<const U: bool, A: MuAlgebra<U>> Display for MuFreeModule<U, A>"],["impl Display for Field"],["impl Display for PolynomialAlgebraMonomial"],["impl Display for AdemBasisElement"],["impl Display for AdemAlgebra"],["impl<A: Algebra> Display for FinitelyPresentedModule<A>"]], +"ext":[["impl Display for MilnorSubalgebra"]], +"fp":[["impl Display for FpVector"],["impl Display for ValidPrime"],["impl Display for Subspace"],["impl Display for Matrix"],["impl<'a> Display for Slice<'a>"],["impl Display for InvalidPrimeError"],["impl Display for Subquotient"]], +"sseq":[["impl Display for BidegreeElement<'_>"],["impl Display for Bidegree"],["impl Display for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/hash/trait.Hash.js b/docs/implementors/core/hash/trait.Hash.js index 004ffd11c..4d9cc6609 100644 --- a/docs/implementors/core/hash/trait.Hash.js +++ b/docs/implementors/core/hash/trait.Hash.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"algebra":[["impl Hash for AdemBasisElement"],["impl Hash for MilnorBasisElement"],["impl Hash for PolynomialAlgebraMonomial"]], -"fp":[["impl<const P: u32> Hash for FpVectorP<P>"],["impl Hash for FpVector"]], -"sseq":[["impl Hash for BidegreeGenerator"],["impl Hash for Bidegree"]] +"algebra":[["impl Hash for MilnorBasisElement"],["impl Hash for AdemBasisElement"],["impl Hash for PolynomialAlgebraMonomial"]], +"fp":[["impl Hash for FpVector"],["impl<const P: u32> Hash for FpVectorP<P>"]], +"sseq":[["impl Hash for Bidegree"],["impl Hash for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/iter/traits/collect/trait.Extend.js b/docs/implementors/core/iter/traits/collect/trait.Extend.js index 638f060a6..ed76dfcd8 100644 --- a/docs/implementors/core/iter/traits/collect/trait.Extend.js +++ b/docs/implementors/core/iter/traits/collect/trait.Extend.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"bivec":[["impl<A> Extend<A> for BiVec<A>"]] +"bivec":[["impl<A> Extend<A> for BiVec<A>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/iter/traits/collect/trait.IntoIterator.js b/docs/implementors/core/iter/traits/collect/trait.IntoIterator.js index 323389428..812a6c005 100644 --- a/docs/implementors/core/iter/traits/collect/trait.IntoIterator.js +++ b/docs/implementors/core/iter/traits/collect/trait.IntoIterator.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"bivec":[["impl<T> IntoIterator for BiVec<T>"],["impl<'a, T> IntoIterator for &'a mut BiVec<T>"],["impl<'a, T> IntoIterator for &'a BiVec<T>"]], -"fp":[["impl<'a> IntoIterator for &'a Matrix"],["impl<'a> IntoIterator for &'a mut Matrix"],["impl<'a> IntoIterator for &'a FpVector"]] +"bivec":[["impl<T> IntoIterator for BiVec<T>"],["impl<'a, T> IntoIterator for &'a BiVec<T>"],["impl<'a, T> IntoIterator for &'a mut BiVec<T>"]], +"fp":[["impl<'a> IntoIterator for &'a mut Matrix"],["impl<'a> IntoIterator for &'a Matrix"],["impl<'a> IntoIterator for &'a FpVector"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/iter/traits/exact_size/trait.ExactSizeIterator.js b/docs/implementors/core/iter/traits/exact_size/trait.ExactSizeIterator.js index 990aa12ee..6dc1ecae2 100644 --- a/docs/implementors/core/iter/traits/exact_size/trait.ExactSizeIterator.js +++ b/docs/implementors/core/iter/traits/exact_size/trait.ExactSizeIterator.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl<'a> ExactSizeIterator for FpVectorIterator<'a>"]] +"fp":[["impl<'a> ExactSizeIterator for FpVectorIterator<'a>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/iter/traits/iterator/trait.Iterator.js b/docs/implementors/core/iter/traits/iterator/trait.Iterator.js index 9b78c79ad..031c22434 100644 --- a/docs/implementors/core/iter/traits/iterator/trait.Iterator.js +++ b/docs/implementors/core/iter/traits/iterator/trait.Iterator.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"algebra":[["impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>"],["impl<'a> Iterator for PartitionIterator<'a>"],["impl<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> Iterator for OffsetIterator<'a, U, A, T, N>"]], -"ext":[["impl Iterator for SubalgebraIterator"],["impl<'a, CC: ChainComplex + ?Sized> Iterator for StemIterator<'a, CC>"],["impl<'a> Iterator for SignatureIterator<'a>"]], -"fp":[["impl Iterator for BitflagIterator"],["impl Iterator for BinomialIterator"],["impl<'a> Iterator for FpVectorIterator<'a>"],["impl<'a, const P: u32> Iterator for FpVectorNonZeroIteratorP<'a, P>"],["impl<'a> Iterator for FpVectorNonZeroIterator<'a>"]] +"algebra":[["impl<'a, const MOD4: bool> Iterator for PPartMultiplier<'a, MOD4>"],["impl<'a, const U: bool, A: MuAlgebra<U>, T: Iterator<Item = i32> + 'a, const N: usize> Iterator for OffsetIterator<'a, U, A, T, N>"],["impl<'a> Iterator for PartitionIterator<'a>"]], +"ext":[["impl<'a> Iterator for SignatureIterator<'a>"],["impl Iterator for SubalgebraIterator"],["impl<'a, CC: ChainComplex + ?Sized> Iterator for StemIterator<'a, CC>"]], +"fp":[["impl Iterator for BitflagIterator"],["impl<'a, const P: u32> Iterator for FpVectorNonZeroIteratorP<'a, P>"],["impl Iterator for BinomialIterator"],["impl<'a> Iterator for FpVectorIterator<'a>"],["impl<'a> Iterator for FpVectorNonZeroIterator<'a>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Copy.js b/docs/implementors/core/marker/trait.Copy.js index d3fc2089d..9c0834dc9 100644 --- a/docs/implementors/core/marker/trait.Copy.js +++ b/docs/implementors/core/marker/trait.Copy.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl Copy for AlgebraType"],["impl Copy for BocksteinOrSq"]], -"ext":[["impl Copy for SaveKind"]], -"fp":[["impl Copy for LimbBitIndexPair"],["impl Copy for ValidPrime"],["impl<'a> Copy for Slice<'a>"],["impl<'a, const P: u32> Copy for SliceP<'a, P>"]], -"sseq":[["impl Copy for BidegreeGenerator"],["impl<T> Copy for BidegreeRange<'_, T>"],["impl Copy for Bidegree"]] +"algebra":[["impl Copy for AlgebraType"],["impl Copy for BocksteinOrSq"]], +"ext":[["impl Copy for SaveKind"]], +"fp":[["impl Copy for LimbBitIndexPair"],["impl Copy for ValidPrime"],["impl<'a, const P: u32> Copy for SliceP<'a, P>"],["impl<'a> Copy for Slice<'a>"]], +"sseq":[["impl Copy for Bidegree"],["impl<T> Copy for BidegreeRange<'_, T>"],["impl Copy for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Freeze.js b/docs/implementors/core/marker/trait.Freeze.js index 5c9edf567..6e292d216 100644 --- a/docs/implementors/core/marker/trait.Freeze.js +++ b/docs/implementors/core/marker/trait.Freeze.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> Freeze for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Freeze for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> !Freeze for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Freeze for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> !Freeze for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Freeze for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Freeze for OffsetIterator<'a, U, A, T, N>where\n T: Freeze,",1,["algebra::module::free_module::OffsetIterator"]],["impl Freeze for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Freeze for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Freeze for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> !Freeze for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Freeze for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Freeze for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> !Freeze for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Freeze for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Freeze for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> !Freeze for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T = S> !Freeze for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Freeze for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> !Freeze for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Freeze for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Freeze for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl !Freeze for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Freeze for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Freeze for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Freeze for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Freeze for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Freeze for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl !Freeze for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl !Freeze for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Freeze for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Freeze for Field",1,["algebra::algebra::field::Field"]],["impl Freeze for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Freeze for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl !Freeze for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Freeze for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Freeze for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Freeze for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Freeze for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Freeze for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Freeze for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Freeze for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl !Freeze for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Freeze for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Freeze for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> Freeze for BiVec<T>",1,["bivec::BiVec"]]], -"chart":[["impl Freeze for Orientation",1,["chart::Orientation"]],["impl<T> Freeze for SvgBackend<T>where\n T: Freeze,",1,["chart::SvgBackend"]],["impl<T> Freeze for TikzBackend<T>where\n T: Freeze,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> Freeze for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Freeze for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Freeze for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Freeze for StemIterator<'a, CC>",1,["ext::chain_complex::StemIterator"]],["impl<F> Freeze for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Freeze for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> !Freeze for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> !Freeze for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Freeze for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Freeze for ChecksumWriter<T>where\n T: Freeze,",1,["ext::save::ChecksumWriter"]],["impl<T> Freeze for ChecksumReader<T>where\n T: Freeze,",1,["ext::save::ChecksumReader"]],["impl<A> Freeze for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Freeze for SenderData",1,["ext::nassau::SenderData"]],["impl Freeze for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Freeze for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Freeze for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Freeze for Magic",1,["ext::nassau::Magic"]],["impl<M> !Freeze for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Freeze for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> !Freeze for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> !Freeze for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Freeze for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Freeze for LogWriter<T>where\n T: Freeze,",1,["ext::utils::logging::LogWriter"]],["impl Freeze for Config",1,["ext::utils::Config"]]], -"fp":[["impl Freeze for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Freeze for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Freeze for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Freeze for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Freeze for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Freeze for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Freeze for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Freeze for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Freeze for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Freeze for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Freeze for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Freeze for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Freeze for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Freeze for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Freeze for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Freeze for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Freeze for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Freeze for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Freeze for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Freeze for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Freeze for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl Freeze for OooTracker",1,["once::OooTracker"]],["impl<T> Freeze for Page<T>",1,["once::Page"]],["impl<T> !Freeze for OnceVec<T>",1,["once::OnceVec"]],["impl<T> !Freeze for OnceBiVec<T>",1,["once::OnceBiVec"]]], -"sseq":[["impl !Freeze for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Freeze for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Freeze for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Freeze for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Freeze for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl Freeze for Differential",1,["sseq::differential::Differential"]],["impl Freeze for Adams",1,["sseq::sseq::Adams"]],["impl Freeze for Product",1,["sseq::sseq::Product"]],["impl<P> Freeze for Sseq<P>",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> Freeze for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Freeze for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> !Freeze for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Freeze for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> !Freeze for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Freeze for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Freeze for OffsetIterator<'a, U, A, T, N>where\n T: Freeze,",1,["algebra::module::free_module::OffsetIterator"]],["impl Freeze for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Freeze for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Freeze for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> !Freeze for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Freeze for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Freeze for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> !Freeze for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Freeze for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Freeze for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> !Freeze for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T = S> !Freeze for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Freeze for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> !Freeze for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Freeze for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Freeze for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl !Freeze for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Freeze for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Freeze for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Freeze for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Freeze for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Freeze for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl !Freeze for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl !Freeze for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Freeze for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Freeze for Field",1,["algebra::algebra::field::Field"]],["impl Freeze for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Freeze for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl !Freeze for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Freeze for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Freeze for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Freeze for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Freeze for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Freeze for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Freeze for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Freeze for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl !Freeze for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Freeze for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Freeze for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> Freeze for BiVec<T>",1,["bivec::BiVec"]]], +"chart":[["impl Freeze for Orientation",1,["chart::Orientation"]],["impl<T> Freeze for SvgBackend<T>where\n T: Freeze,",1,["chart::SvgBackend"]],["impl<T> Freeze for TikzBackend<T>where\n T: Freeze,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> Freeze for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Freeze for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Freeze for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Freeze for StemIterator<'a, CC>",1,["ext::chain_complex::StemIterator"]],["impl<F> Freeze for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Freeze for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> !Freeze for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> !Freeze for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Freeze for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Freeze for ChecksumWriter<T>where\n T: Freeze,",1,["ext::save::ChecksumWriter"]],["impl<T> Freeze for ChecksumReader<T>where\n T: Freeze,",1,["ext::save::ChecksumReader"]],["impl<A> Freeze for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Freeze for SenderData",1,["ext::nassau::SenderData"]],["impl Freeze for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Freeze for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Freeze for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Freeze for Magic",1,["ext::nassau::Magic"]],["impl<M> !Freeze for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Freeze for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> !Freeze for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> !Freeze for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Freeze for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Freeze for LogWriter<T>where\n T: Freeze,",1,["ext::utils::logging::LogWriter"]],["impl Freeze for Config",1,["ext::utils::Config"]]], +"fp":[["impl Freeze for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Freeze for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Freeze for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Freeze for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Freeze for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Freeze for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Freeze for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Freeze for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Freeze for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Freeze for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Freeze for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Freeze for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Freeze for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Freeze for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Freeze for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Freeze for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Freeze for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Freeze for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Freeze for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Freeze for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Freeze for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl Freeze for OooTracker",1,["once::OooTracker"]],["impl<T> Freeze for Page<T>",1,["once::Page"]],["impl<T> !Freeze for OnceVec<T>",1,["once::OnceVec"]],["impl<T> !Freeze for OnceBiVec<T>",1,["once::OnceBiVec"]]], +"sseq":[["impl !Freeze for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Freeze for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Freeze for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Freeze for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Freeze for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl Freeze for Differential",1,["sseq::differential::Differential"]],["impl Freeze for Adams",1,["sseq::sseq::Adams"]],["impl Freeze for Product",1,["sseq::sseq::Product"]],["impl<P> Freeze for Sseq<P>",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Send.js b/docs/implementors/core/marker/trait.Send.js index 9264c048d..f32ae9fd4 100644 --- a/docs/implementors/core/marker/trait.Send.js +++ b/docs/implementors/core/marker/trait.Send.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> Send for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Send for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Send for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Send for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Send for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Send for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Send for OffsetIterator<'a, U, A, T, N>where\n T: Send,",1,["algebra::module::free_module::OffsetIterator"]],["impl Send for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Send for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Send for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Send for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Send for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Send for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Send for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Send for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Send for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Send for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Send for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Send for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Send for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Send for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Send for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Send for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Send for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Send for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Send for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Send for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Send for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Send for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Send for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Send for Field",1,["algebra::algebra::field::Field"]],["impl Send for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Send for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Send for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Send for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Send for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Send for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Send for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Send for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Send for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Send for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Send for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Send for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> Send for BiVec<T>where\n T: Send,",1,["bivec::BiVec"]]], -"chart":[["impl Send for Orientation",1,["chart::Orientation"]],["impl<T> Send for SvgBackend<T>where\n T: Send,",1,["chart::SvgBackend"]],["impl<T> Send for TikzBackend<T>where\n T: Send,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> Send for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Send for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Send for StemIterator<'a, CC>where\n CC: Sync,",1,["ext::chain_complex::StemIterator"]],["impl<F> Send for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Send for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Send for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Send for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Send for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Send for ChecksumWriter<T>where\n T: Send,",1,["ext::save::ChecksumWriter"]],["impl<T> Send for ChecksumReader<T>where\n T: Send,",1,["ext::save::ChecksumReader"]],["impl<A> Send for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Send for SenderData",1,["ext::nassau::SenderData"]],["impl Send for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Send for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Send for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Send for Magic",1,["ext::nassau::Magic"]],["impl<M> Send for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Send for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> Send for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Send for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Send for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Send for LogWriter<T>where\n T: Send,",1,["ext::utils::logging::LogWriter"]],["impl Send for Config",1,["ext::utils::Config"]]], -"fp":[["impl Send for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Send for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Send for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Send for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Send for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Send for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Send for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Send for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Send for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Send for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Send for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Send for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Send for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Send for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Send for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Send for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Send for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Send for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Send for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Send for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Send for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl Send for OooTracker",1,["once::OooTracker"]],["impl<T> !Send for Page<T>",1,["once::Page"]],["impl<T> Send for OnceBiVec<T>where\n T: Send,",1,["once::OnceBiVec"]],["impl<T: Send> Send for OnceVec<T>"]], -"sseq":[["impl Send for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Send for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Send for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Send for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Send for BidegreeRange<'a, T>where\n T: Sync,",1,["sseq::coordinates::range::BidegreeRange"]],["impl Send for Differential",1,["sseq::differential::Differential"]],["impl Send for Adams",1,["sseq::sseq::Adams"]],["impl Send for Product",1,["sseq::sseq::Product"]],["impl<P> Send for Sseq<P>where\n P: Send,",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> Send for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Send for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Send for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Send for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Send for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Send for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Send for OffsetIterator<'a, U, A, T, N>where\n T: Send,",1,["algebra::module::free_module::OffsetIterator"]],["impl Send for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Send for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Send for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Send for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Send for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Send for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Send for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Send for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Send for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Send for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Send for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Send for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Send for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Send for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Send for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Send for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Send for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Send for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Send for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Send for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Send for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Send for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Send for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Send for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Send for Field",1,["algebra::algebra::field::Field"]],["impl Send for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Send for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Send for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Send for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Send for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Send for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Send for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Send for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Send for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Send for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Send for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Send for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Send for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> Send for BiVec<T>where\n T: Send,",1,["bivec::BiVec"]]], +"chart":[["impl Send for Orientation",1,["chart::Orientation"]],["impl<T> Send for SvgBackend<T>where\n T: Send,",1,["chart::SvgBackend"]],["impl<T> Send for TikzBackend<T>where\n T: Send,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> Send for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Send for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Send for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Send for StemIterator<'a, CC>where\n CC: Sync,",1,["ext::chain_complex::StemIterator"]],["impl<F> Send for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Send for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Send for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Send for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Send for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Send for ChecksumWriter<T>where\n T: Send,",1,["ext::save::ChecksumWriter"]],["impl<T> Send for ChecksumReader<T>where\n T: Send,",1,["ext::save::ChecksumReader"]],["impl<A> Send for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Send for SenderData",1,["ext::nassau::SenderData"]],["impl Send for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Send for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Send for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Send for Magic",1,["ext::nassau::Magic"]],["impl<M> Send for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Send for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> Send for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Send for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Send for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Send for LogWriter<T>where\n T: Send,",1,["ext::utils::logging::LogWriter"]],["impl Send for Config",1,["ext::utils::Config"]]], +"fp":[["impl Send for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Send for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Send for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Send for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Send for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Send for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Send for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Send for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Send for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Send for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Send for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Send for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Send for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Send for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Send for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Send for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Send for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Send for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Send for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Send for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Send for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl Send for OooTracker",1,["once::OooTracker"]],["impl<T> !Send for Page<T>",1,["once::Page"]],["impl<T> Send for OnceBiVec<T>where\n T: Send,",1,["once::OnceBiVec"]],["impl<T: Send> Send for OnceVec<T>"]], +"sseq":[["impl Send for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Send for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Send for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Send for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Send for BidegreeRange<'a, T>where\n T: Sync,",1,["sseq::coordinates::range::BidegreeRange"]],["impl Send for Differential",1,["sseq::differential::Differential"]],["impl Send for Adams",1,["sseq::sseq::Adams"]],["impl Send for Product",1,["sseq::sseq::Product"]],["impl<P> Send for Sseq<P>where\n P: Send,",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.StructuralEq.js b/docs/implementors/core/marker/trait.StructuralEq.js index 5a2200e65..38b237e9e 100644 --- a/docs/implementors/core/marker/trait.StructuralEq.js +++ b/docs/implementors/core/marker/trait.StructuralEq.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl StructuralEq for AlgebraType"],["impl StructuralEq for MilnorProfile"],["impl StructuralEq for PolynomialAlgebraMonomial"]], -"bivec":[["impl<T> StructuralEq for BiVec<T>"]], -"ext":[["impl StructuralEq for Config"],["impl StructuralEq for SaveKind"]], -"fp":[["impl StructuralEq for FpVector"],["impl StructuralEq for ValidPrime"],["impl<const P: u32> StructuralEq for FpVectorP<P>"],["impl StructuralEq for Subspace"],["impl StructuralEq for QuasiInverse"]], -"once":[["impl<T> StructuralEq for OnceBiVec<T>"]], -"sseq":[["impl StructuralEq for BidegreeGenerator"],["impl StructuralEq for Bidegree"]] +"algebra":[["impl StructuralEq for MilnorProfile"],["impl StructuralEq for AlgebraType"],["impl StructuralEq for PolynomialAlgebraMonomial"]], +"bivec":[["impl<T> StructuralEq for BiVec<T>"]], +"ext":[["impl StructuralEq for Config"],["impl StructuralEq for SaveKind"]], +"fp":[["impl StructuralEq for ValidPrime"],["impl StructuralEq for QuasiInverse"],["impl<const P: u32> StructuralEq for FpVectorP<P>"],["impl StructuralEq for FpVector"],["impl StructuralEq for Subspace"]], +"once":[["impl<T> StructuralEq for OnceBiVec<T>"]], +"sseq":[["impl StructuralEq for Bidegree"],["impl StructuralEq for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.StructuralPartialEq.js b/docs/implementors/core/marker/trait.StructuralPartialEq.js index 35e8e0f0c..dfeb4528f 100644 --- a/docs/implementors/core/marker/trait.StructuralPartialEq.js +++ b/docs/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,8 +1,8 @@ (function() {var implementors = { -"algebra":[["impl StructuralPartialEq for PolynomialAlgebraMonomial"],["impl StructuralPartialEq for AlgebraType"],["impl StructuralPartialEq for MilnorProfile"]], -"bivec":[["impl<T> StructuralPartialEq for BiVec<T>"]], -"ext":[["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for SaveKind"]], -"fp":[["impl StructuralPartialEq for FpVector"],["impl StructuralPartialEq for ValidPrime"],["impl StructuralPartialEq for QuasiInverse"],["impl<const P: u32> StructuralPartialEq for FpVectorP<P>"],["impl StructuralPartialEq for Subspace"]], -"once":[["impl<T> StructuralPartialEq for OnceBiVec<T>"]], -"sseq":[["impl StructuralPartialEq for Bidegree"],["impl StructuralPartialEq for BidegreeGenerator"]] +"algebra":[["impl StructuralPartialEq for AlgebraType"],["impl StructuralPartialEq for MilnorProfile"],["impl StructuralPartialEq for PolynomialAlgebraMonomial"]], +"bivec":[["impl<T> StructuralPartialEq for BiVec<T>"]], +"ext":[["impl StructuralPartialEq for Config"],["impl StructuralPartialEq for SaveKind"]], +"fp":[["impl StructuralPartialEq for FpVector"],["impl StructuralPartialEq for ValidPrime"],["impl StructuralPartialEq for Subspace"],["impl StructuralPartialEq for QuasiInverse"],["impl<const P: u32> StructuralPartialEq for FpVectorP<P>"]], +"once":[["impl<T> StructuralPartialEq for OnceBiVec<T>"]], +"sseq":[["impl StructuralPartialEq for BidegreeGenerator"],["impl StructuralPartialEq for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Sync.js b/docs/implementors/core/marker/trait.Sync.js index a59891f9f..69c70842b 100644 --- a/docs/implementors/core/marker/trait.Sync.js +++ b/docs/implementors/core/marker/trait.Sync.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> Sync for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Sync for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Sync for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Sync for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Sync for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Sync for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Sync for OffsetIterator<'a, U, A, T, N>where\n T: Sync,",1,["algebra::module::free_module::OffsetIterator"]],["impl Sync for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Sync for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Sync for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Sync for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Sync for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Sync for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Sync for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Sync for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Sync for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Sync for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Sync for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Sync for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Sync for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Sync for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Sync for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Sync for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Sync for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Sync for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Sync for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Sync for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Sync for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Sync for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Sync for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Sync for Field",1,["algebra::algebra::field::Field"]],["impl Sync for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Sync for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Sync for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Sync for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Sync for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Sync for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Sync for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Sync for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Sync for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Sync for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Sync for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Sync for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> Sync for BiVec<T>where\n T: Sync,",1,["bivec::BiVec"]]], -"chart":[["impl Sync for Orientation",1,["chart::Orientation"]],["impl<T> Sync for SvgBackend<T>where\n T: Sync,",1,["chart::SvgBackend"]],["impl<T> Sync for TikzBackend<T>where\n T: Sync,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> Sync for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Sync for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Sync for StemIterator<'a, CC>where\n CC: Sync,",1,["ext::chain_complex::StemIterator"]],["impl<F> Sync for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Sync for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Sync for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Sync for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Sync for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Sync for ChecksumWriter<T>where\n T: Sync,",1,["ext::save::ChecksumWriter"]],["impl<T> Sync for ChecksumReader<T>where\n T: Sync,",1,["ext::save::ChecksumReader"]],["impl<A> Sync for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Sync for SenderData",1,["ext::nassau::SenderData"]],["impl Sync for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Sync for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Sync for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Sync for Magic",1,["ext::nassau::Magic"]],["impl<M> Sync for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Sync for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> Sync for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Sync for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Sync for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Sync for LogWriter<T>where\n T: Sync,",1,["ext::utils::logging::LogWriter"]],["impl Sync for Config",1,["ext::utils::Config"]]], -"fp":[["impl Sync for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Sync for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Sync for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Sync for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Sync for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Sync for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Sync for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Sync for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Sync for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Sync for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Sync for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Sync for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Sync for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Sync for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Sync for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Sync for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Sync for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Sync for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Sync for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Sync for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Sync for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl Sync for OooTracker",1,["once::OooTracker"]],["impl<T> !Sync for Page<T>",1,["once::Page"]],["impl<T> Sync for OnceBiVec<T>where\n T: Sync,",1,["once::OnceBiVec"]],["impl<T: Sync> Sync for OnceVec<T>"]], -"sseq":[["impl Sync for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Sync for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Sync for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Sync for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Sync for BidegreeRange<'a, T>where\n T: Sync,",1,["sseq::coordinates::range::BidegreeRange"]],["impl Sync for Differential",1,["sseq::differential::Differential"]],["impl Sync for Adams",1,["sseq::sseq::Adams"]],["impl Sync for Product",1,["sseq::sseq::Product"]],["impl<P> Sync for Sseq<P>where\n P: Sync,",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> Sync for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Sync for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Sync for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Sync for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Sync for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Sync for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Sync for OffsetIterator<'a, U, A, T, N>where\n T: Sync,",1,["algebra::module::free_module::OffsetIterator"]],["impl Sync for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Sync for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Sync for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Sync for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Sync for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Sync for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Sync for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Sync for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Sync for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Sync for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Sync for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Sync for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Sync for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Sync for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Sync for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Sync for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Sync for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Sync for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Sync for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Sync for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Sync for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Sync for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Sync for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Sync for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Sync for Field",1,["algebra::algebra::field::Field"]],["impl Sync for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Sync for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Sync for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Sync for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Sync for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Sync for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Sync for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Sync for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Sync for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Sync for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Sync for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Sync for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Sync for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> Sync for BiVec<T>where\n T: Sync,",1,["bivec::BiVec"]]], +"chart":[["impl Sync for Orientation",1,["chart::Orientation"]],["impl<T> Sync for SvgBackend<T>where\n T: Sync,",1,["chart::SvgBackend"]],["impl<T> Sync for TikzBackend<T>where\n T: Sync,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> Sync for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Sync for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Sync for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Sync for StemIterator<'a, CC>where\n CC: Sync,",1,["ext::chain_complex::StemIterator"]],["impl<F> Sync for ChainMap<F>",1,["ext::chain_complex::ChainMap"]],["impl Sync for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Sync for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Sync for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Sync for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Sync for ChecksumWriter<T>where\n T: Sync,",1,["ext::save::ChecksumWriter"]],["impl<T> Sync for ChecksumReader<T>where\n T: Sync,",1,["ext::save::ChecksumReader"]],["impl<A> Sync for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Sync for SenderData",1,["ext::nassau::SenderData"]],["impl Sync for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Sync for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Sync for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Sync for Magic",1,["ext::nassau::Magic"]],["impl<M> Sync for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Sync for SecondaryComposite<A>",1,["ext::secondary::SecondaryComposite"]],["impl<A> Sync for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Sync for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Sync for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Sync for LogWriter<T>where\n T: Sync,",1,["ext::utils::logging::LogWriter"]],["impl Sync for Config",1,["ext::utils::Config"]]], +"fp":[["impl Sync for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Sync for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Sync for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Sync for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Sync for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Sync for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Sync for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Sync for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Sync for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Sync for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Sync for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Sync for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Sync for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Sync for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Sync for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Sync for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Sync for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Sync for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Sync for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Sync for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Sync for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl Sync for OooTracker",1,["once::OooTracker"]],["impl<T> !Sync for Page<T>",1,["once::Page"]],["impl<T> Sync for OnceBiVec<T>where\n T: Sync,",1,["once::OnceBiVec"]],["impl<T: Sync> Sync for OnceVec<T>"]], +"sseq":[["impl Sync for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Sync for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Sync for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Sync for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Sync for BidegreeRange<'a, T>where\n T: Sync,",1,["sseq::coordinates::range::BidegreeRange"]],["impl Sync for Differential",1,["sseq::differential::Differential"]],["impl Sync for Adams",1,["sseq::sseq::Adams"]],["impl Sync for Product",1,["sseq::sseq::Product"]],["impl<P> Sync for Sseq<P>where\n P: Sync,",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/marker/trait.Unpin.js b/docs/implementors/core/marker/trait.Unpin.js index 5f7aa1ddd..84f687fa9 100644 --- a/docs/implementors/core/marker/trait.Unpin.js +++ b/docs/implementors/core/marker/trait.Unpin.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> Unpin for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Unpin for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Unpin for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Unpin for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Unpin for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Unpin for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Unpin for OffsetIterator<'a, U, A, T, N>where\n T: Unpin,",1,["algebra::module::free_module::OffsetIterator"]],["impl Unpin for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Unpin for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Unpin for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Unpin for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Unpin for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Unpin for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Unpin for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Unpin for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Unpin for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Unpin for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Unpin for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Unpin for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Unpin for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Unpin for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Unpin for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Unpin for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Unpin for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Unpin for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Unpin for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Unpin for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Unpin for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Unpin for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Unpin for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Unpin for Field",1,["algebra::algebra::field::Field"]],["impl Unpin for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Unpin for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Unpin for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Unpin for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Unpin for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Unpin for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Unpin for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Unpin for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Unpin for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Unpin for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Unpin for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Unpin for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> Unpin for BiVec<T>where\n T: Unpin,",1,["bivec::BiVec"]]], -"chart":[["impl Unpin for Orientation",1,["chart::Orientation"]],["impl<T> Unpin for SvgBackend<T>where\n T: Unpin,",1,["chart::SvgBackend"]],["impl<T> Unpin for TikzBackend<T>where\n T: Unpin,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> Unpin for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Unpin for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Unpin for StemIterator<'a, CC>",1,["ext::chain_complex::StemIterator"]],["impl<F> Unpin for ChainMap<F>where\n F: Unpin,",1,["ext::chain_complex::ChainMap"]],["impl Unpin for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Unpin for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Unpin for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Unpin for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Unpin for ChecksumWriter<T>where\n T: Unpin,",1,["ext::save::ChecksumWriter"]],["impl<T> Unpin for ChecksumReader<T>where\n T: Unpin,",1,["ext::save::ChecksumReader"]],["impl<A> Unpin for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Unpin for SenderData",1,["ext::nassau::SenderData"]],["impl Unpin for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Unpin for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Unpin for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Unpin for Magic",1,["ext::nassau::Magic"]],["impl<M> Unpin for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Unpin for SecondaryComposite<A>where\n <A as PairAlgebra>::Element: Unpin,",1,["ext::secondary::SecondaryComposite"]],["impl<A> Unpin for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Unpin for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Unpin for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Unpin for LogWriter<T>where\n T: Unpin,",1,["ext::utils::logging::LogWriter"]],["impl Unpin for Config",1,["ext::utils::Config"]]], -"fp":[["impl Unpin for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Unpin for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Unpin for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Unpin for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Unpin for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Unpin for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Unpin for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Unpin for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Unpin for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Unpin for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Unpin for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Unpin for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Unpin for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Unpin for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Unpin for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Unpin for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Unpin for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Unpin for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Unpin for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Unpin for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Unpin for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl Unpin for OooTracker",1,["once::OooTracker"]],["impl<T> Unpin for Page<T>",1,["once::Page"]],["impl<T> Unpin for OnceVec<T>",1,["once::OnceVec"]],["impl<T> Unpin for OnceBiVec<T>",1,["once::OnceBiVec"]]], -"sseq":[["impl Unpin for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Unpin for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Unpin for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Unpin for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Unpin for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl Unpin for Differential",1,["sseq::differential::Differential"]],["impl Unpin for Adams",1,["sseq::sseq::Adams"]],["impl Unpin for Product",1,["sseq::sseq::Product"]],["impl<P> Unpin for Sseq<P>where\n P: Unpin,",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> Unpin for FiniteDimensionalModule<A>",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl Unpin for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> Unpin for FinitelyPresentedModule<A>",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl Unpin for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> Unpin for MuFreeModule<U, A>",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> Unpin for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> Unpin for OffsetIterator<'a, U, A, T, N>where\n T: Unpin,",1,["algebra::module::free_module::OffsetIterator"]],["impl Unpin for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> Unpin for RealProjectiveSpace<A>",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl Unpin for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> Unpin for HomModule<M>",1,["algebra::module::hom_module::HomModule"]],["impl<M> Unpin for QuotientModule<M>",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> Unpin for SuspensionModule<M>",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> Unpin for TensorModule<M, N>",1,["algebra::module::tensor_module::TensorModule"]],["impl Unpin for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl Unpin for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> Unpin for MuFreeModuleHomomorphism<U, M>",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> Unpin for FullModuleHomomorphism<S, T>",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> Unpin for GenericZeroHomomorphism<S, T>",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> Unpin for HomPullback<M>",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> Unpin for QuotientHomomorphism<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> Unpin for QuotientHomomorphismSource<F>",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl Unpin for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl Unpin for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl Unpin for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl Unpin for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl Unpin for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl Unpin for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl Unpin for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl Unpin for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> Unpin for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl Unpin for Field",1,["algebra::algebra::field::Field"]],["impl Unpin for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl Unpin for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl Unpin for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl Unpin for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl Unpin for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> Unpin for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl Unpin for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl Unpin for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl Unpin for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> Unpin for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl Unpin for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl Unpin for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl Unpin for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> Unpin for BiVec<T>where\n T: Unpin,",1,["bivec::BiVec"]]], +"chart":[["impl Unpin for Orientation",1,["chart::Orientation"]],["impl<T> Unpin for SvgBackend<T>where\n T: Unpin,",1,["chart::SvgBackend"]],["impl<T> Unpin for TikzBackend<T>where\n T: Unpin,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> Unpin for FiniteChainComplex<M, F>",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> Unpin for FiniteAugmentedChainComplex<M, F1, F2, CC>",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl Unpin for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> Unpin for StemIterator<'a, CC>",1,["ext::chain_complex::StemIterator"]],["impl<F> Unpin for ChainMap<F>where\n F: Unpin,",1,["ext::chain_complex::ChainMap"]],["impl Unpin for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> Unpin for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> Unpin for MuResolutionHomomorphism<U, CC1, CC2>",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl Unpin for SaveKind",1,["ext::save::SaveKind"]],["impl<T> Unpin for ChecksumWriter<T>where\n T: Unpin,",1,["ext::save::ChecksumWriter"]],["impl<T> Unpin for ChecksumReader<T>where\n T: Unpin,",1,["ext::save::ChecksumReader"]],["impl<A> Unpin for SaveFile<A>",1,["ext::save::SaveFile"]],["impl Unpin for SenderData",1,["ext::nassau::SenderData"]],["impl Unpin for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl Unpin for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> Unpin for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl Unpin for Magic",1,["ext::nassau::Magic"]],["impl<M> Unpin for Resolution<M>",1,["ext::nassau::Resolution"]],["impl<A> Unpin for SecondaryComposite<A>where\n <A as PairAlgebra>::Element: Unpin,",1,["ext::secondary::SecondaryComposite"]],["impl<A> Unpin for SecondaryHomotopy<A>",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> Unpin for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl Unpin for Timer",1,["ext::utils::logging::Timer"]],["impl<T> Unpin for LogWriter<T>where\n T: Unpin,",1,["ext::utils::logging::LogWriter"]],["impl Unpin for Config",1,["ext::utils::Config"]]], +"fp":[["impl Unpin for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl Unpin for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> Unpin for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> Unpin for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl Unpin for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl Unpin for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl Unpin for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl Unpin for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl Unpin for ValidPrime",1,["fp::prime::ValidPrime"]],["impl Unpin for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl Unpin for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl Unpin for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl Unpin for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> Unpin for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> Unpin for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> Unpin for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> Unpin for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> Unpin for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> Unpin for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> Unpin for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> Unpin for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl Unpin for OooTracker",1,["once::OooTracker"]],["impl<T> Unpin for Page<T>",1,["once::Page"]],["impl<T> Unpin for OnceVec<T>",1,["once::OnceVec"]],["impl<T> Unpin for OnceBiVec<T>",1,["once::OnceBiVec"]]], +"sseq":[["impl Unpin for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl Unpin for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> Unpin for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl Unpin for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> Unpin for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl Unpin for Differential",1,["sseq::differential::Differential"]],["impl Unpin for Adams",1,["sseq::sseq::Adams"]],["impl Unpin for Product",1,["sseq::sseq::Product"]],["impl<P> Unpin for Sseq<P>where\n P: Unpin,",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/arith/trait.Add.js b/docs/implementors/core/ops/arith/trait.Add.js index b4394c142..458a2bb5f 100644 --- a/docs/implementors/core/ops/arith/trait.Add.js +++ b/docs/implementors/core/ops/arith/trait.Add.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sseq":[["impl Add<Bidegree> for Bidegree"]] +"sseq":[["impl Add<Bidegree> for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/arith/trait.AddAssign.js b/docs/implementors/core/ops/arith/trait.AddAssign.js index b20dca501..aab24d586 100644 --- a/docs/implementors/core/ops/arith/trait.AddAssign.js +++ b/docs/implementors/core/ops/arith/trait.AddAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl AddAssign<&Matrix> for Matrix"],["impl AddAssign<&FpVector> for FpVector"]] +"fp":[["impl AddAssign<&Matrix> for Matrix"],["impl AddAssign<&FpVector> for FpVector"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/arith/trait.Mul.js b/docs/implementors/core/ops/arith/trait.Mul.js index 45dabef59..db7547489 100644 --- a/docs/implementors/core/ops/arith/trait.Mul.js +++ b/docs/implementors/core/ops/arith/trait.Mul.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl Mul<&Matrix> for &Matrix"]] +"fp":[["impl Mul<&Matrix> for &Matrix"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/arith/trait.MulAssign.js b/docs/implementors/core/ops/arith/trait.MulAssign.js index 7c3654b1e..62b3ba72a 100644 --- a/docs/implementors/core/ops/arith/trait.MulAssign.js +++ b/docs/implementors/core/ops/arith/trait.MulAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl MulAssign<u32> for Matrix"]] +"fp":[["impl MulAssign<u32> for Matrix"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/arith/trait.Sub.js b/docs/implementors/core/ops/arith/trait.Sub.js index e580af71c..2dffa3a1e 100644 --- a/docs/implementors/core/ops/arith/trait.Sub.js +++ b/docs/implementors/core/ops/arith/trait.Sub.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sseq":[["impl Sub<Bidegree> for Bidegree"]] +"sseq":[["impl Sub<Bidegree> for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/deref/trait.Deref.js b/docs/implementors/core/ops/deref/trait.Deref.js index d31f7a08a..fbb353d2a 100644 --- a/docs/implementors/core/ops/deref/trait.Deref.js +++ b/docs/implementors/core/ops/deref/trait.Deref.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl<const N: usize> Deref for AugmentedMatrix<N>"],["impl Deref for ValidPrime"]] +"fp":[["impl<const N: usize> Deref for AugmentedMatrix<N>"],["impl Deref for ValidPrime"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/deref/trait.DerefMut.js b/docs/implementors/core/ops/deref/trait.DerefMut.js index 64ed23ba8..120029651 100644 --- a/docs/implementors/core/ops/deref/trait.DerefMut.js +++ b/docs/implementors/core/ops/deref/trait.DerefMut.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"fp":[["impl<const N: usize> DerefMut for AugmentedMatrix<N>"]] +"fp":[["impl<const N: usize> DerefMut for AugmentedMatrix<N>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/drop/trait.Drop.js b/docs/implementors/core/ops/drop/trait.Drop.js index 386746d78..6143041ea 100644 --- a/docs/implementors/core/ops/drop/trait.Drop.js +++ b/docs/implementors/core/ops/drop/trait.Drop.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"chart":[["impl<T: Write> Drop for SvgBackend<T>"],["impl<T: Write> Drop for TikzBackend<T>"]], -"ext":[["impl<T: Read> Drop for ChecksumReader<T>"],["impl<T: Write> Drop for ChecksumWriter<T>"]], -"once":[["impl<T> Drop for OnceVec<T>"]] +"chart":[["impl<T: Write> Drop for TikzBackend<T>"],["impl<T: Write> Drop for SvgBackend<T>"]], +"ext":[["impl<T: Write> Drop for ChecksumWriter<T>"],["impl<T: Read> Drop for ChecksumReader<T>"]], +"once":[["impl<T> Drop for OnceVec<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/index/trait.Index.js b/docs/implementors/core/ops/index/trait.Index.js index 39d2a4af3..28bbbb0f3 100644 --- a/docs/implementors/core/ops/index/trait.Index.js +++ b/docs/implementors/core/ops/index/trait.Index.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl Index<usize> for Matrix2D"]], -"bivec":[["impl<T> Index<i32> for BiVec<T>"]], -"fp":[["impl<I> Index<I> for Matrixwhere\n Vec<FpVector>: Index<I>,"]], -"once":[["impl<T> Index<usize> for OnceVec<T>"],["impl<T> Index<u32> for OnceVec<T>"],["impl<T> Index<i32> for OnceBiVec<T>"]] +"algebra":[["impl Index<usize> for Matrix2D"]], +"bivec":[["impl<T> Index<i32> for BiVec<T>"]], +"fp":[["impl<I> Index<I> for Matrixwhere\n Vec<FpVector>: Index<I>,"]], +"once":[["impl<T> Index<i32> for OnceBiVec<T>"],["impl<T> Index<usize> for OnceVec<T>"],["impl<T> Index<u32> for OnceVec<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/ops/index/trait.IndexMut.js b/docs/implementors/core/ops/index/trait.IndexMut.js index cff74b2eb..d662da3bf 100644 --- a/docs/implementors/core/ops/index/trait.IndexMut.js +++ b/docs/implementors/core/ops/index/trait.IndexMut.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl IndexMut<usize> for Matrix2D"]], -"bivec":[["impl<T> IndexMut<i32> for BiVec<T>"]], -"fp":[["impl<I> IndexMut<I> for Matrixwhere\n Vec<FpVector>: IndexMut<I>,"]], -"once":[["impl<T> IndexMut<i32> for OnceBiVec<T>"],["impl<T> IndexMut<u32> for OnceVec<T>"],["impl<T> IndexMut<usize> for OnceVec<T>"]] +"algebra":[["impl IndexMut<usize> for Matrix2D"]], +"bivec":[["impl<T> IndexMut<i32> for BiVec<T>"]], +"fp":[["impl<I> IndexMut<I> for Matrixwhere\n Vec<FpVector>: IndexMut<I>,"]], +"once":[["impl<T> IndexMut<u32> for OnceVec<T>"],["impl<T> IndexMut<usize> for OnceVec<T>"],["impl<T> IndexMut<i32> for OnceBiVec<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 845cdf7d9..f0d186de4 100644 --- a/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> RefUnwindSafe for FiniteDimensionalModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl RefUnwindSafe for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> RefUnwindSafe for FinitelyPresentedModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl RefUnwindSafe for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where\n A: RefUnwindSafe,",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> RefUnwindSafe for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> RefUnwindSafe for OffsetIterator<'a, U, A, T, N>where\n A: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::free_module::OffsetIterator"]],["impl RefUnwindSafe for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> RefUnwindSafe for RealProjectiveSpace<A>where\n A: RefUnwindSafe,",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl RefUnwindSafe for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> RefUnwindSafe for HomModule<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::hom_module::HomModule"]],["impl<M> RefUnwindSafe for QuotientModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> RefUnwindSafe for SuspensionModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> RefUnwindSafe for TensorModule<M, N>where\n M: RefUnwindSafe,\n N: RefUnwindSafe,",1,["algebra::module::tensor_module::TensorModule"]],["impl RefUnwindSafe for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl RefUnwindSafe for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> RefUnwindSafe for FullModuleHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> RefUnwindSafe for HomPullback<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> RefUnwindSafe for QuotientHomomorphism<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,\n <F as ModuleHomomorphism>::Target: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> RefUnwindSafe for QuotientHomomorphismSource<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl RefUnwindSafe for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl RefUnwindSafe for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl RefUnwindSafe for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl RefUnwindSafe for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl RefUnwindSafe for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl RefUnwindSafe for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl RefUnwindSafe for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl RefUnwindSafe for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> RefUnwindSafe for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl RefUnwindSafe for Field",1,["algebra::algebra::field::Field"]],["impl RefUnwindSafe for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl RefUnwindSafe for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl RefUnwindSafe for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl RefUnwindSafe for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl RefUnwindSafe for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl RefUnwindSafe for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl RefUnwindSafe for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl RefUnwindSafe for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> RefUnwindSafe for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl RefUnwindSafe for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl RefUnwindSafe for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl RefUnwindSafe for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> RefUnwindSafe for BiVec<T>where\n T: RefUnwindSafe,",1,["bivec::BiVec"]]], -"chart":[["impl RefUnwindSafe for Orientation",1,["chart::Orientation"]],["impl<T> RefUnwindSafe for SvgBackend<T>where\n T: RefUnwindSafe,",1,["chart::SvgBackend"]],["impl<T> RefUnwindSafe for TikzBackend<T>where\n T: RefUnwindSafe,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where\n F: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where\n CC: RefUnwindSafe,\n F1: RefUnwindSafe,\n F2: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl RefUnwindSafe for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> RefUnwindSafe for StemIterator<'a, CC>where\n CC: RefUnwindSafe,",1,["ext::chain_complex::StemIterator"]],["impl<F> RefUnwindSafe for ChainMap<F>where\n F: RefUnwindSafe,",1,["ext::chain_complex::ChainMap"]],["impl RefUnwindSafe for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> !RefUnwindSafe for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> RefUnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where\n CC1: RefUnwindSafe,\n CC2: RefUnwindSafe,\n <CC1 as ChainComplex>::Algebra: RefUnwindSafe,\n <CC2 as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl RefUnwindSafe for SaveKind",1,["ext::save::SaveKind"]],["impl<T> RefUnwindSafe for ChecksumWriter<T>where\n T: RefUnwindSafe,",1,["ext::save::ChecksumWriter"]],["impl<T> RefUnwindSafe for ChecksumReader<T>where\n T: RefUnwindSafe,",1,["ext::save::ChecksumReader"]],["impl<A> RefUnwindSafe for SaveFile<A>where\n A: RefUnwindSafe,",1,["ext::save::SaveFile"]],["impl RefUnwindSafe for SenderData",1,["ext::nassau::SenderData"]],["impl RefUnwindSafe for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl RefUnwindSafe for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> RefUnwindSafe for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl RefUnwindSafe for Magic",1,["ext::nassau::Magic"]],["impl<M> RefUnwindSafe for Resolution<M>where\n M: RefUnwindSafe,",1,["ext::nassau::Resolution"]],["impl<A> RefUnwindSafe for SecondaryComposite<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryComposite"]],["impl<A> RefUnwindSafe for SecondaryHomotopy<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> !RefUnwindSafe for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl RefUnwindSafe for Timer",1,["ext::utils::logging::Timer"]],["impl<T> RefUnwindSafe for LogWriter<T>where\n T: RefUnwindSafe,",1,["ext::utils::logging::LogWriter"]],["impl RefUnwindSafe for Config",1,["ext::utils::Config"]]], -"fp":[["impl RefUnwindSafe for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl RefUnwindSafe for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> RefUnwindSafe for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl RefUnwindSafe for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl RefUnwindSafe for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl RefUnwindSafe for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl RefUnwindSafe for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl RefUnwindSafe for ValidPrime",1,["fp::prime::ValidPrime"]],["impl RefUnwindSafe for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl RefUnwindSafe for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl RefUnwindSafe for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl RefUnwindSafe for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> RefUnwindSafe for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> RefUnwindSafe for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> RefUnwindSafe for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> RefUnwindSafe for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> RefUnwindSafe for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> RefUnwindSafe for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> RefUnwindSafe for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> RefUnwindSafe for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl RefUnwindSafe for OooTracker",1,["once::OooTracker"]],["impl<T> RefUnwindSafe for Page<T>where\n T: RefUnwindSafe,",1,["once::Page"]],["impl<T> RefUnwindSafe for OnceVec<T>where\n T: RefUnwindSafe,",1,["once::OnceVec"]],["impl<T> RefUnwindSafe for OnceBiVec<T>where\n T: RefUnwindSafe,",1,["once::OnceBiVec"]]], -"sseq":[["impl RefUnwindSafe for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl RefUnwindSafe for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> RefUnwindSafe for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl RefUnwindSafe for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> !RefUnwindSafe for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl RefUnwindSafe for Differential",1,["sseq::differential::Differential"]],["impl RefUnwindSafe for Adams",1,["sseq::sseq::Adams"]],["impl RefUnwindSafe for Product",1,["sseq::sseq::Product"]],["impl<P> RefUnwindSafe for Sseq<P>where\n P: RefUnwindSafe,",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> RefUnwindSafe for FiniteDimensionalModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl RefUnwindSafe for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> RefUnwindSafe for FinitelyPresentedModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl RefUnwindSafe for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> RefUnwindSafe for MuFreeModule<U, A>where\n A: RefUnwindSafe,",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> RefUnwindSafe for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> RefUnwindSafe for OffsetIterator<'a, U, A, T, N>where\n A: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::free_module::OffsetIterator"]],["impl RefUnwindSafe for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> RefUnwindSafe for RealProjectiveSpace<A>where\n A: RefUnwindSafe,",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl RefUnwindSafe for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> RefUnwindSafe for HomModule<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::hom_module::HomModule"]],["impl<M> RefUnwindSafe for QuotientModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> RefUnwindSafe for SuspensionModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> RefUnwindSafe for TensorModule<M, N>where\n M: RefUnwindSafe,\n N: RefUnwindSafe,",1,["algebra::module::tensor_module::TensorModule"]],["impl RefUnwindSafe for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl RefUnwindSafe for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> RefUnwindSafe for MuFreeModuleHomomorphism<U, M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> RefUnwindSafe for FullModuleHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> RefUnwindSafe for GenericZeroHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> RefUnwindSafe for HomPullback<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> RefUnwindSafe for QuotientHomomorphism<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,\n <F as ModuleHomomorphism>::Target: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> RefUnwindSafe for QuotientHomomorphismSource<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl RefUnwindSafe for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl RefUnwindSafe for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl RefUnwindSafe for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl RefUnwindSafe for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl RefUnwindSafe for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl RefUnwindSafe for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl RefUnwindSafe for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl RefUnwindSafe for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> RefUnwindSafe for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl RefUnwindSafe for Field",1,["algebra::algebra::field::Field"]],["impl RefUnwindSafe for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl RefUnwindSafe for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl RefUnwindSafe for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl RefUnwindSafe for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl RefUnwindSafe for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> RefUnwindSafe for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl RefUnwindSafe for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl RefUnwindSafe for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl RefUnwindSafe for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> RefUnwindSafe for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl RefUnwindSafe for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl RefUnwindSafe for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl RefUnwindSafe for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> RefUnwindSafe for BiVec<T>where\n T: RefUnwindSafe,",1,["bivec::BiVec"]]], +"chart":[["impl RefUnwindSafe for Orientation",1,["chart::Orientation"]],["impl<T> RefUnwindSafe for SvgBackend<T>where\n T: RefUnwindSafe,",1,["chart::SvgBackend"]],["impl<T> RefUnwindSafe for TikzBackend<T>where\n T: RefUnwindSafe,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> RefUnwindSafe for FiniteChainComplex<M, F>where\n F: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> RefUnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where\n CC: RefUnwindSafe,\n F1: RefUnwindSafe,\n F2: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl RefUnwindSafe for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> RefUnwindSafe for StemIterator<'a, CC>where\n CC: RefUnwindSafe,",1,["ext::chain_complex::StemIterator"]],["impl<F> RefUnwindSafe for ChainMap<F>where\n F: RefUnwindSafe,",1,["ext::chain_complex::ChainMap"]],["impl RefUnwindSafe for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> !RefUnwindSafe for MuResolution<U, CC>",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> RefUnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where\n CC1: RefUnwindSafe,\n CC2: RefUnwindSafe,\n <CC1 as ChainComplex>::Algebra: RefUnwindSafe,\n <CC2 as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl RefUnwindSafe for SaveKind",1,["ext::save::SaveKind"]],["impl<T> RefUnwindSafe for ChecksumWriter<T>where\n T: RefUnwindSafe,",1,["ext::save::ChecksumWriter"]],["impl<T> RefUnwindSafe for ChecksumReader<T>where\n T: RefUnwindSafe,",1,["ext::save::ChecksumReader"]],["impl<A> RefUnwindSafe for SaveFile<A>where\n A: RefUnwindSafe,",1,["ext::save::SaveFile"]],["impl RefUnwindSafe for SenderData",1,["ext::nassau::SenderData"]],["impl RefUnwindSafe for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl RefUnwindSafe for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> RefUnwindSafe for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl RefUnwindSafe for Magic",1,["ext::nassau::Magic"]],["impl<M> RefUnwindSafe for Resolution<M>where\n M: RefUnwindSafe,",1,["ext::nassau::Resolution"]],["impl<A> RefUnwindSafe for SecondaryComposite<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryComposite"]],["impl<A> RefUnwindSafe for SecondaryHomotopy<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> !RefUnwindSafe for SecondaryResolution<CC>",1,["ext::secondary::SecondaryResolution"]],["impl RefUnwindSafe for Timer",1,["ext::utils::logging::Timer"]],["impl<T> RefUnwindSafe for LogWriter<T>where\n T: RefUnwindSafe,",1,["ext::utils::logging::LogWriter"]],["impl RefUnwindSafe for Config",1,["ext::utils::Config"]]], +"fp":[["impl RefUnwindSafe for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl RefUnwindSafe for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> RefUnwindSafe for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> RefUnwindSafe for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl RefUnwindSafe for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl RefUnwindSafe for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl RefUnwindSafe for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl RefUnwindSafe for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl RefUnwindSafe for ValidPrime",1,["fp::prime::ValidPrime"]],["impl RefUnwindSafe for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl RefUnwindSafe for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl RefUnwindSafe for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl RefUnwindSafe for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> RefUnwindSafe for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> RefUnwindSafe for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> RefUnwindSafe for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> RefUnwindSafe for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> RefUnwindSafe for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> RefUnwindSafe for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> RefUnwindSafe for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> RefUnwindSafe for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl RefUnwindSafe for OooTracker",1,["once::OooTracker"]],["impl<T> RefUnwindSafe for Page<T>where\n T: RefUnwindSafe,",1,["once::Page"]],["impl<T> RefUnwindSafe for OnceVec<T>where\n T: RefUnwindSafe,",1,["once::OnceVec"]],["impl<T> RefUnwindSafe for OnceBiVec<T>where\n T: RefUnwindSafe,",1,["once::OnceBiVec"]]], +"sseq":[["impl RefUnwindSafe for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl RefUnwindSafe for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> RefUnwindSafe for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl RefUnwindSafe for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> !RefUnwindSafe for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl RefUnwindSafe for Differential",1,["sseq::differential::Differential"]],["impl RefUnwindSafe for Adams",1,["sseq::sseq::Adams"]],["impl RefUnwindSafe for Product",1,["sseq::sseq::Product"]],["impl<P> RefUnwindSafe for Sseq<P>where\n P: RefUnwindSafe,",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index a4a863b86..ee82badf5 100644 --- a/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,9 +1,9 @@ (function() {var implementors = { -"algebra":[["impl<A> UnwindSafe for FiniteDimensionalModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl UnwindSafe for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> UnwindSafe for FinitelyPresentedModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl UnwindSafe for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where\n A: RefUnwindSafe,",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> UnwindSafe for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> UnwindSafe for OffsetIterator<'a, U, A, T, N>where\n A: RefUnwindSafe,\n T: UnwindSafe,",1,["algebra::module::free_module::OffsetIterator"]],["impl UnwindSafe for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> UnwindSafe for RealProjectiveSpace<A>where\n A: RefUnwindSafe,",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl UnwindSafe for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> UnwindSafe for HomModule<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::hom_module::HomModule"]],["impl<M> UnwindSafe for QuotientModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> UnwindSafe for SuspensionModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> UnwindSafe for TensorModule<M, N>where\n M: RefUnwindSafe,\n N: RefUnwindSafe,",1,["algebra::module::tensor_module::TensorModule"]],["impl UnwindSafe for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl UnwindSafe for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> UnwindSafe for FullModuleHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> UnwindSafe for HomPullback<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> UnwindSafe for QuotientHomomorphism<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,\n <F as ModuleHomomorphism>::Target: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> UnwindSafe for QuotientHomomorphismSource<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl UnwindSafe for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl UnwindSafe for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl UnwindSafe for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl UnwindSafe for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl UnwindSafe for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl UnwindSafe for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl UnwindSafe for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl UnwindSafe for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> UnwindSafe for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl UnwindSafe for Field",1,["algebra::algebra::field::Field"]],["impl UnwindSafe for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl UnwindSafe for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl UnwindSafe for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl UnwindSafe for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl UnwindSafe for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl UnwindSafe for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl UnwindSafe for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl UnwindSafe for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> UnwindSafe for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl UnwindSafe for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl UnwindSafe for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl UnwindSafe for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], -"bivec":[["impl<T> UnwindSafe for BiVec<T>where\n T: UnwindSafe,",1,["bivec::BiVec"]]], -"chart":[["impl UnwindSafe for Orientation",1,["chart::Orientation"]],["impl<T> UnwindSafe for SvgBackend<T>where\n T: UnwindSafe,",1,["chart::SvgBackend"]],["impl<T> UnwindSafe for TikzBackend<T>where\n T: UnwindSafe,",1,["chart::TikzBackend"]]], -"ext":[["impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where\n F: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where\n CC: RefUnwindSafe,\n F1: RefUnwindSafe,\n F2: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl UnwindSafe for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> UnwindSafe for StemIterator<'a, CC>where\n CC: RefUnwindSafe,",1,["ext::chain_complex::StemIterator"]],["impl<F> UnwindSafe for ChainMap<F>where\n F: UnwindSafe,",1,["ext::chain_complex::ChainMap"]],["impl UnwindSafe for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> UnwindSafe for MuResolution<U, CC>where\n CC: RefUnwindSafe,\n <CC as ChainComplex>::Algebra: RefUnwindSafe,\n <CC as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> UnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where\n CC1: RefUnwindSafe,\n CC2: RefUnwindSafe,\n <CC1 as ChainComplex>::Algebra: RefUnwindSafe,\n <CC2 as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl UnwindSafe for SaveKind",1,["ext::save::SaveKind"]],["impl<T> UnwindSafe for ChecksumWriter<T>where\n T: UnwindSafe,",1,["ext::save::ChecksumWriter"]],["impl<T> UnwindSafe for ChecksumReader<T>where\n T: UnwindSafe,",1,["ext::save::ChecksumReader"]],["impl<A> UnwindSafe for SaveFile<A>where\n A: RefUnwindSafe,",1,["ext::save::SaveFile"]],["impl UnwindSafe for SenderData",1,["ext::nassau::SenderData"]],["impl UnwindSafe for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl UnwindSafe for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> UnwindSafe for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl UnwindSafe for Magic",1,["ext::nassau::Magic"]],["impl<M> UnwindSafe for Resolution<M>where\n M: RefUnwindSafe,",1,["ext::nassau::Resolution"]],["impl<A> UnwindSafe for SecondaryComposite<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: UnwindSafe,",1,["ext::secondary::SecondaryComposite"]],["impl<A> UnwindSafe for SecondaryHomotopy<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> UnwindSafe for SecondaryResolution<CC>where\n CC: RefUnwindSafe,\n <CC as ChainComplex>::Algebra: RefUnwindSafe,\n <<CC as ChainComplex>::Algebra as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryResolution"]],["impl UnwindSafe for Timer",1,["ext::utils::logging::Timer"]],["impl<T> UnwindSafe for LogWriter<T>where\n T: UnwindSafe,",1,["ext::utils::logging::LogWriter"]],["impl UnwindSafe for Config",1,["ext::utils::Config"]]], -"fp":[["impl UnwindSafe for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl UnwindSafe for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> UnwindSafe for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> !UnwindSafe for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl UnwindSafe for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl UnwindSafe for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl UnwindSafe for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl UnwindSafe for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl UnwindSafe for ValidPrime",1,["fp::prime::ValidPrime"]],["impl UnwindSafe for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl UnwindSafe for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl UnwindSafe for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl UnwindSafe for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> UnwindSafe for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> !UnwindSafe for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> UnwindSafe for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> UnwindSafe for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> UnwindSafe for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> !UnwindSafe for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> UnwindSafe for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> UnwindSafe for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], -"once":[["impl UnwindSafe for OooTracker",1,["once::OooTracker"]],["impl<T> UnwindSafe for Page<T>where\n T: RefUnwindSafe,",1,["once::Page"]],["impl<T> UnwindSafe for OnceVec<T>where\n T: RefUnwindSafe,",1,["once::OnceVec"]],["impl<T> UnwindSafe for OnceBiVec<T>where\n T: RefUnwindSafe,",1,["once::OnceBiVec"]]], -"sseq":[["impl UnwindSafe for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl UnwindSafe for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> UnwindSafe for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl UnwindSafe for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> !UnwindSafe for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl UnwindSafe for Differential",1,["sseq::differential::Differential"]],["impl UnwindSafe for Adams",1,["sseq::sseq::Adams"]],["impl UnwindSafe for Product",1,["sseq::sseq::Product"]],["impl<P> UnwindSafe for Sseq<P>where\n P: UnwindSafe,",1,["sseq::sseq::Sseq"]]] +"algebra":[["impl<A> UnwindSafe for FiniteDimensionalModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finite_dimensional_module::FiniteDimensionalModule"]],["impl UnwindSafe for FPMIndexTable",1,["algebra::module::finitely_presented_module::FPMIndexTable"]],["impl<A> UnwindSafe for FinitelyPresentedModule<A>where\n A: RefUnwindSafe,",1,["algebra::module::finitely_presented_module::FinitelyPresentedModule"]],["impl UnwindSafe for OperationGeneratorPair",1,["algebra::module::free_module::OperationGeneratorPair"]],["impl<const U: bool, A> UnwindSafe for MuFreeModule<U, A>where\n A: RefUnwindSafe,",1,["algebra::module::free_module::MuFreeModule"]],["impl<const N: usize> UnwindSafe for GeneratorData<N>",1,["algebra::module::free_module::GeneratorData"]],["impl<'a, const U: bool, A, T, const N: usize> UnwindSafe for OffsetIterator<'a, U, A, T, N>where\n A: RefUnwindSafe,\n T: UnwindSafe,",1,["algebra::module::free_module::OffsetIterator"]],["impl UnwindSafe for ModuleFailedRelationError",1,["algebra::module::module_trait::ModuleFailedRelationError"]],["impl<A> UnwindSafe for RealProjectiveSpace<A>where\n A: RefUnwindSafe,",1,["algebra::module::rpn::RealProjectiveSpace"]],["impl UnwindSafe for RPSpec",1,["algebra::module::rpn::RPSpec"]],["impl<M> UnwindSafe for HomModule<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::hom_module::HomModule"]],["impl<M> UnwindSafe for QuotientModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::quotient_module::QuotientModule"]],["impl<M> UnwindSafe for SuspensionModule<M>where\n M: RefUnwindSafe,",1,["algebra::module::suspension_module::SuspensionModule"]],["impl<M, N> UnwindSafe for TensorModule<M, N>where\n M: RefUnwindSafe,\n N: RefUnwindSafe,",1,["algebra::module::tensor_module::TensorModule"]],["impl UnwindSafe for GeneratorBasisEltPair",1,["algebra::module::block_structure::GeneratorBasisEltPair"]],["impl UnwindSafe for BlockStructure",1,["algebra::module::block_structure::BlockStructure"]],["impl<const U: bool, M> UnwindSafe for MuFreeModuleHomomorphism<U, M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::free_module_homomorphism::MuFreeModuleHomomorphism"]],["impl<S, T> UnwindSafe for FullModuleHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::full_module_homomorphism::FullModuleHomomorphism"]],["impl<S, T> UnwindSafe for GenericZeroHomomorphism<S, T>where\n S: RefUnwindSafe,\n T: RefUnwindSafe,",1,["algebra::module::homomorphism::generic_zero_homomorphism::GenericZeroHomomorphism"]],["impl<M> UnwindSafe for HomPullback<M>where\n M: RefUnwindSafe,\n <M as Module>::Algebra: RefUnwindSafe,",1,["algebra::module::homomorphism::hom_pullback::HomPullback"]],["impl<F> UnwindSafe for QuotientHomomorphism<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,\n <F as ModuleHomomorphism>::Target: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphism"]],["impl<F> UnwindSafe for QuotientHomomorphismSource<F>where\n F: RefUnwindSafe,\n <F as ModuleHomomorphism>::Source: RefUnwindSafe,",1,["algebra::module::homomorphism::quotient_homomorphism::QuotientHomomorphismSource"]],["impl UnwindSafe for SteenrodEvaluator",1,["algebra::steenrod_evaluator::SteenrodEvaluator"]],["impl UnwindSafe for AlgebraBasisElt",1,["algebra::steenrod_parser::AlgebraBasisElt"]],["impl UnwindSafe for AlgebraNode",1,["algebra::steenrod_parser::AlgebraNode"]],["impl UnwindSafe for BocksteinOrSq",1,["algebra::steenrod_parser::BocksteinOrSq"]],["impl UnwindSafe for AdemBasisElement",1,["algebra::algebra::adem_algebra::AdemBasisElement"]],["impl UnwindSafe for PorBockstein",1,["algebra::algebra::adem_algebra::PorBockstein"]],["impl UnwindSafe for AdemAlgebra",1,["algebra::algebra::adem_algebra::AdemAlgebra"]],["impl UnwindSafe for TruncatedPolynomialMonomialBasis",1,["algebra::algebra::combinatorics::TruncatedPolynomialMonomialBasis"]],["impl<'a> UnwindSafe for PartitionIterator<'a>",1,["algebra::algebra::combinatorics::PartitionIterator"]],["impl UnwindSafe for Field",1,["algebra::algebra::field::Field"]],["impl UnwindSafe for MilnorProfile",1,["algebra::algebra::milnor_algebra::MilnorProfile"]],["impl UnwindSafe for MilnorBasisElement",1,["algebra::algebra::milnor_algebra::MilnorBasisElement"]],["impl UnwindSafe for MilnorAlgebra",1,["algebra::algebra::milnor_algebra::MilnorAlgebra"]],["impl UnwindSafe for Matrix2D",1,["algebra::algebra::milnor_algebra::Matrix2D"]],["impl UnwindSafe for PPartAllocation",1,["algebra::algebra::milnor_algebra::PPartAllocation"]],["impl<'a, const MOD4: bool> UnwindSafe for PPartMultiplier<'a, MOD4>",1,["algebra::algebra::milnor_algebra::PPartMultiplier"]],["impl UnwindSafe for PolynomialAlgebraMonomial",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraMonomial"]],["impl UnwindSafe for PolynomialAlgebraTableEntry",1,["algebra::algebra::polynomial_algebra::PolynomialAlgebraTableEntry"]],["impl UnwindSafe for AlgebraType",1,["algebra::algebra::steenrod_algebra::AlgebraType"]],["impl<'a> UnwindSafe for SteenrodAlgebraBorrow<'a>",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebraBorrow"]],["impl UnwindSafe for SteenrodAlgebra",1,["algebra::algebra::steenrod_algebra::SteenrodAlgebra"]],["impl UnwindSafe for AlgebraSpec",1,["algebra::algebra::steenrod_algebra::AlgebraSpec"]],["impl UnwindSafe for MilnorPairElement",1,["algebra::algebra::pair_algebra::MilnorPairElement"]]], +"bivec":[["impl<T> UnwindSafe for BiVec<T>where\n T: UnwindSafe,",1,["bivec::BiVec"]]], +"chart":[["impl UnwindSafe for Orientation",1,["chart::Orientation"]],["impl<T> UnwindSafe for SvgBackend<T>where\n T: UnwindSafe,",1,["chart::SvgBackend"]],["impl<T> UnwindSafe for TikzBackend<T>where\n T: UnwindSafe,",1,["chart::TikzBackend"]]], +"ext":[["impl<M, F> UnwindSafe for FiniteChainComplex<M, F>where\n F: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteChainComplex"]],["impl<M, F1, F2, CC> UnwindSafe for FiniteAugmentedChainComplex<M, F1, F2, CC>where\n CC: RefUnwindSafe,\n F1: RefUnwindSafe,\n F2: RefUnwindSafe,\n M: RefUnwindSafe,",1,["ext::chain_complex::finite_chain_complex::FiniteAugmentedChainComplex"]],["impl UnwindSafe for ChainComplexGrading",1,["ext::chain_complex::ChainComplexGrading"]],["impl<'a, CC: ?Sized> UnwindSafe for StemIterator<'a, CC>where\n CC: RefUnwindSafe,",1,["ext::chain_complex::StemIterator"]],["impl<F> UnwindSafe for ChainMap<F>where\n F: UnwindSafe,",1,["ext::chain_complex::ChainMap"]],["impl UnwindSafe for SenderData",1,["ext::resolution::SenderData"]],["impl<const U: bool, CC> UnwindSafe for MuResolution<U, CC>where\n CC: RefUnwindSafe,\n <CC as ChainComplex>::Algebra: RefUnwindSafe,\n <CC as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution::MuResolution"]],["impl<const U: bool, CC1, CC2> UnwindSafe for MuResolutionHomomorphism<U, CC1, CC2>where\n CC1: RefUnwindSafe,\n CC2: RefUnwindSafe,\n <CC1 as ChainComplex>::Algebra: RefUnwindSafe,\n <CC2 as ChainComplex>::Module: RefUnwindSafe,",1,["ext::resolution_homomorphism::MuResolutionHomomorphism"]],["impl UnwindSafe for SaveKind",1,["ext::save::SaveKind"]],["impl<T> UnwindSafe for ChecksumWriter<T>where\n T: UnwindSafe,",1,["ext::save::ChecksumWriter"]],["impl<T> UnwindSafe for ChecksumReader<T>where\n T: UnwindSafe,",1,["ext::save::ChecksumReader"]],["impl<A> UnwindSafe for SaveFile<A>where\n A: RefUnwindSafe,",1,["ext::save::SaveFile"]],["impl UnwindSafe for SenderData",1,["ext::nassau::SenderData"]],["impl UnwindSafe for MilnorSubalgebra",1,["ext::nassau::MilnorSubalgebra"]],["impl UnwindSafe for SubalgebraIterator",1,["ext::nassau::SubalgebraIterator"]],["impl<'a> UnwindSafe for SignatureIterator<'a>",1,["ext::nassau::SignatureIterator"]],["impl UnwindSafe for Magic",1,["ext::nassau::Magic"]],["impl<M> UnwindSafe for Resolution<M>where\n M: RefUnwindSafe,",1,["ext::nassau::Resolution"]],["impl<A> UnwindSafe for SecondaryComposite<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: UnwindSafe,",1,["ext::secondary::SecondaryComposite"]],["impl<A> UnwindSafe for SecondaryHomotopy<A>where\n A: RefUnwindSafe,\n <A as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryHomotopy"]],["impl<CC> UnwindSafe for SecondaryResolution<CC>where\n CC: RefUnwindSafe,\n <CC as ChainComplex>::Algebra: RefUnwindSafe,\n <<CC as ChainComplex>::Algebra as PairAlgebra>::Element: RefUnwindSafe,",1,["ext::secondary::SecondaryResolution"]],["impl UnwindSafe for Timer",1,["ext::utils::logging::Timer"]],["impl<T> UnwindSafe for LogWriter<T>where\n T: UnwindSafe,",1,["ext::utils::logging::LogWriter"]],["impl UnwindSafe for Config",1,["ext::utils::Config"]]], +"fp":[["impl UnwindSafe for LimbBitIndexPair",1,["fp::limb::LimbBitIndexPair"]],["impl UnwindSafe for Matrix",1,["fp::matrix::matrix_inner::Matrix"]],["impl<const N: usize> UnwindSafe for AugmentedMatrix<N>",1,["fp::matrix::matrix_inner::AugmentedMatrix"]],["impl<'a> !UnwindSafe for MatrixSliceMut<'a>",1,["fp::matrix::matrix_inner::MatrixSliceMut"]],["impl UnwindSafe for QuasiInverse",1,["fp::matrix::quasi_inverse::QuasiInverse"]],["impl UnwindSafe for Subquotient",1,["fp::matrix::subquotient::Subquotient"]],["impl UnwindSafe for Subspace",1,["fp::matrix::subspace::Subspace"]],["impl UnwindSafe for M4riTable",1,["fp::matrix::m4ri::M4riTable"]],["impl UnwindSafe for ValidPrime",1,["fp::prime::ValidPrime"]],["impl UnwindSafe for InvalidPrimeError",1,["fp::prime::InvalidPrimeError"]],["impl UnwindSafe for BitflagIterator",1,["fp::prime::BitflagIterator"]],["impl UnwindSafe for BinomialIterator",1,["fp::prime::BinomialIterator"]],["impl UnwindSafe for FpVector",1,["fp::vector::vector_generic::FpVector"]],["impl<'a> UnwindSafe for Slice<'a>",1,["fp::vector::vector_generic::Slice"]],["impl<'a> !UnwindSafe for SliceMut<'a>",1,["fp::vector::vector_generic::SliceMut"]],["impl<'a> UnwindSafe for FpVectorNonZeroIterator<'a>",1,["fp::vector::vector_generic::FpVectorNonZeroIterator"]],["impl<const P: u32> UnwindSafe for FpVectorP<P>",1,["fp::vector::inner::FpVectorP"]],["impl<'a, const P: u32> UnwindSafe for SliceP<'a, P>",1,["fp::vector::inner::SliceP"]],["impl<'a, const P: u32> !UnwindSafe for SliceMutP<'a, P>",1,["fp::vector::inner::SliceMutP"]],["impl<'a> UnwindSafe for FpVectorIterator<'a>",1,["fp::vector::iter::FpVectorIterator"]],["impl<'a, const P: u32> UnwindSafe for FpVectorNonZeroIteratorP<'a, P>",1,["fp::vector::iter::FpVectorNonZeroIteratorP"]]], +"once":[["impl UnwindSafe for OooTracker",1,["once::OooTracker"]],["impl<T> UnwindSafe for Page<T>where\n T: RefUnwindSafe,",1,["once::Page"]],["impl<T> UnwindSafe for OnceVec<T>where\n T: RefUnwindSafe,",1,["once::OnceVec"]],["impl<T> UnwindSafe for OnceBiVec<T>where\n T: RefUnwindSafe,",1,["once::OnceBiVec"]]], +"sseq":[["impl UnwindSafe for DenseBigradedModule",1,["sseq::bigraded::DenseBigradedModule"]],["impl UnwindSafe for Bidegree",1,["sseq::coordinates::bidegree::Bidegree"]],["impl<'a> UnwindSafe for BidegreeElement<'a>",1,["sseq::coordinates::element::BidegreeElement"]],["impl UnwindSafe for BidegreeGenerator",1,["sseq::coordinates::generator::BidegreeGenerator"]],["impl<'a, T> !UnwindSafe for BidegreeRange<'a, T>",1,["sseq::coordinates::range::BidegreeRange"]],["impl UnwindSafe for Differential",1,["sseq::differential::Differential"]],["impl UnwindSafe for Adams",1,["sseq::sseq::Adams"]],["impl UnwindSafe for Product",1,["sseq::sseq::Product"]],["impl<P> UnwindSafe for Sseq<P>where\n P: UnwindSafe,",1,["sseq::sseq::Sseq"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/core/str/traits/trait.FromStr.js b/docs/implementors/core/str/traits/trait.FromStr.js index 774907c67..7a4fba7d9 100644 --- a/docs/implementors/core/str/traits/trait.FromStr.js +++ b/docs/implementors/core/str/traits/trait.FromStr.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"algebra":[["impl FromStr for AlgebraType"]], -"fp":[["impl FromStr for ValidPrime"]] +"algebra":[["impl FromStr for AlgebraType"]], +"fp":[["impl FromStr for ValidPrime"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.js b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.js b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.js b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.js b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/rayon/iter/trait.IndexedParallelIterator.js b/docs/implementors/rayon/iter/trait.IndexedParallelIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/rayon/iter/trait.IndexedParallelIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/rayon/iter/trait.ParallelIterator.js b/docs/implementors/rayon/iter/trait.ParallelIterator.js new file mode 100644 index 000000000..2388e44e0 --- /dev/null +++ b/docs/implementors/rayon/iter/trait.ParallelIterator.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"maybe_rayon":[] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/serde/de/trait.Deserialize.js b/docs/implementors/serde/de/trait.Deserialize.js index f74d01bf1..67a7c9e31 100644 --- a/docs/implementors/serde/de/trait.Deserialize.js +++ b/docs/implementors/serde/de/trait.Deserialize.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl<'de> Deserialize<'de> for RPSpec"],["impl<'de> Deserialize<'de> for MilnorProfile"],["impl<'de> Deserialize<'de> for AlgebraSpec"]], -"bivec":[["impl<'de, T: Deserialize<'de>> Deserialize<'de> for BiVec<T>"]], -"fp":[["impl<'de> Deserialize<'de> for FpVector"],["impl<'de> Deserialize<'de> for ValidPrime"]], -"sseq":[["impl<'de> Deserialize<'de> for Bidegree"],["impl<'de> Deserialize<'de> for BidegreeGenerator"]] +"algebra":[["impl<'de> Deserialize<'de> for MilnorProfile"],["impl<'de> Deserialize<'de> for AlgebraSpec"],["impl<'de> Deserialize<'de> for RPSpec"]], +"bivec":[["impl<'de, T: Deserialize<'de>> Deserialize<'de> for BiVec<T>"]], +"fp":[["impl<'de> Deserialize<'de> for FpVector"],["impl<'de> Deserialize<'de> for ValidPrime"]], +"sseq":[["impl<'de> Deserialize<'de> for Bidegree"],["impl<'de> Deserialize<'de> for BidegreeGenerator"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/serde/ser/trait.Serialize.js b/docs/implementors/serde/ser/trait.Serialize.js index c07ff5722..6bff32c79 100644 --- a/docs/implementors/serde/ser/trait.Serialize.js +++ b/docs/implementors/serde/ser/trait.Serialize.js @@ -1,6 +1,6 @@ (function() {var implementors = { -"algebra":[["impl Serialize for MilnorProfile"]], -"bivec":[["impl<T: Serialize> Serialize for BiVec<T>"]], -"fp":[["impl Serialize for ValidPrime"],["impl Serialize for FpVector"]], -"sseq":[["impl Serialize for Bidegree"],["impl Serialize for BidegreeGenerator"]] +"algebra":[["impl Serialize for MilnorProfile"]], +"bivec":[["impl<T: Serialize> Serialize for BiVec<T>"]], +"fp":[["impl Serialize for FpVector"],["impl Serialize for ValidPrime"]], +"sseq":[["impl Serialize for BidegreeGenerator"],["impl Serialize for Bidegree"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/std/io/trait.Read.js b/docs/implementors/std/io/trait.Read.js index 0ca87f227..681cf27d9 100644 --- a/docs/implementors/std/io/trait.Read.js +++ b/docs/implementors/std/io/trait.Read.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"ext":[["impl<T: Read> Read for ChecksumReader<T>"]] +"ext":[["impl<T: Read> Read for ChecksumReader<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/implementors/std/io/trait.Write.js b/docs/implementors/std/io/trait.Write.js index 740c2e7ea..3d20cf54f 100644 --- a/docs/implementors/std/io/trait.Write.js +++ b/docs/implementors/std/io/trait.Write.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"ext":[["impl<T: Write> Write for ChecksumWriter<T>"],["impl<T: Write> Write for LogWriter<T>"]] +"ext":[["impl<T: Write> Write for LogWriter<T>"],["impl<T: Write> Write for ChecksumWriter<T>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/lift_hom/all.html b/docs/lift_hom/all.html index d213e32c9..159e43474 100644 --- a/docs/lift_hom/all.html +++ b/docs/lift_hom/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/lift_hom/index.html b/docs/lift_hom/index.html index dbea694ea..c7f774fa7 100644 --- a/docs/lift_hom/index.html +++ b/docs/lift_hom/index.html @@ -1,4 +1,4 @@ -lift_hom - Rust +lift_hom - Rust @@ -23,7 +23,7 @@ }); -

    Crate lift_hom

    source ·
    Expand description

    Given an element in $\Ext(M, N)$, this computes the induced map $\Ext(N, k) \to \Ext(M, k)$ +

    Crate lift_hom

    source ·
    Expand description

    Given an element in $\Ext(M, N)$, this computes the induced map $\Ext(N, k) \to \Ext(M, k)$ given by composition.

    It begins by asking for the two modules $M$, $N$ and the $\Ext$ class. Afterwards, you may either supply save files for the two modules, or a range to compute the map for.

    diff --git a/docs/mahowald_invariant/all.html b/docs/mahowald_invariant/all.html index 42e1b543a..485b846d7 100644 --- a/docs/mahowald_invariant/all.html +++ b/docs/mahowald_invariant/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/mahowald_invariant/index.html b/docs/mahowald_invariant/index.html index e2357d958..5d08b445d 100644 --- a/docs/mahowald_invariant/index.html +++ b/docs/mahowald_invariant/index.html @@ -1,4 +1,4 @@ -mahowald_invariant - Rust +mahowald_invariant - Rust @@ -23,7 +23,7 @@ }); -
    Expand description

    Computes algebraic Mahowald invariants (aka algebraic root invariants).

    +
    Expand description

    Computes algebraic Mahowald invariants (aka algebraic root invariants).

    Sample output (with Max k = 7):

    M({basis element}) = {mahowald_invariant}[ mod {indeterminacy}]
    diff --git a/docs/massey/all.html b/docs/massey/all.html
    index 13d17f507..daf47103c 100644
    --- a/docs/massey/all.html
    +++ b/docs/massey/all.html
    @@ -1,4 +1,4 @@
    -List of all items in this crate
    +List of all items in this crate
     
     
     
    @@ -23,4 +23,4 @@
         });
     
     
    -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/massey/index.html b/docs/massey/index.html index ccd43e66b..c3b2e1c8b 100644 --- a/docs/massey/index.html +++ b/docs/massey/index.html @@ -1,4 +1,4 @@ -massey - Rust +massey - Rust @@ -23,7 +23,7 @@ }); -

    Crate massey

    source ·
    Expand description

    Computes the triple Massey product up to a sign

    +

    Crate massey

    source ·
    Expand description

    Computes the triple Massey product up to a sign

    This is optimized to compute <a, b, -> for fixed a, b and all -, where a and b have small degree.

    \ No newline at end of file diff --git a/docs/maybe_rayon/all.html b/docs/maybe_rayon/all.html new file mode 100644 index 000000000..1e1a5ebfd --- /dev/null +++ b/docs/maybe_rayon/all.html @@ -0,0 +1,26 @@ +List of all items in this crate + + + + + + +
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/fn.in_place_scope.html b/docs/maybe_rayon/concurrent/fn.in_place_scope.html new file mode 100644 index 000000000..bb7430314 --- /dev/null +++ b/docs/maybe_rayon/concurrent/fn.in_place_scope.html @@ -0,0 +1,27 @@ +in_place_scope in maybe_rayon::concurrent - Rust + + + + + + +
    pub fn in_place_scope<'scope, OP, R>(op: OP) -> Rwhere
    +    OP: FnOnce(&Scope<'scope>) -> R,
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/fn.join.html b/docs/maybe_rayon/concurrent/fn.join.html new file mode 100644 index 000000000..dd514c849 --- /dev/null +++ b/docs/maybe_rayon/concurrent/fn.join.html @@ -0,0 +1,30 @@ +join in maybe_rayon::concurrent - Rust + + + + + + +

    Function maybe_rayon::concurrent::join

    source ·
    pub fn join<A, B, RA, RB>(oper_a: A, oper_b: B) -> (RA, RB)where
    +    A: FnOnce() -> RA + Send,
    +    B: FnOnce() -> RB + Send,
    +    RA: Send,
    +    RB: Send,
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/fn.scope.html b/docs/maybe_rayon/concurrent/fn.scope.html new file mode 100644 index 000000000..00595b901 --- /dev/null +++ b/docs/maybe_rayon/concurrent/fn.scope.html @@ -0,0 +1,28 @@ +scope in maybe_rayon::concurrent - Rust + + + + + + +

    Function maybe_rayon::concurrent::scope

    source ·
    pub fn scope<'scope, OP, R>(op: OP) -> Rwhere
    +    OP: FnOnce(&Scope<'scope>) -> R + Send,
    +    R: Send,
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/index.html b/docs/maybe_rayon/concurrent/index.html new file mode 100644 index 000000000..5099e9ace --- /dev/null +++ b/docs/maybe_rayon/concurrent/index.html @@ -0,0 +1,26 @@ +maybe_rayon::concurrent - Rust + + + + + + +
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/index.html b/docs/maybe_rayon/concurrent/prelude/index.html new file mode 100644 index 000000000..1cf6d670d --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/index.html @@ -0,0 +1,28 @@ +maybe_rayon::concurrent::prelude - Rust + + + + + + +

    Traits

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/sidebar-items.js b/docs/maybe_rayon/concurrent/prelude/sidebar-items.js new file mode 100644 index 000000000..85cc2a3bc --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["IndexedParallelIterator","MaybeIndexedParallelIterator","MaybeIntoParallelIterator","MaybeIntoParallelRefMutIterator","MaybeParallelIterator","ParallelIterator"]}; \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.IndexedParallelIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.IndexedParallelIterator.html new file mode 100644 index 000000000..7095339aa --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.IndexedParallelIterator.html @@ -0,0 +1,711 @@ +IndexedParallelIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    pub trait IndexedParallelIterator: ParallelIterator {
    +
    Show 31 methods // Required methods + fn len(&self) -> usize; + fn drive<C>(self, consumer: C) -> <C as Consumer<Self::Item>>::Result + where C: Consumer<Self::Item>; + fn with_producer<CB>( + self, + callback: CB + ) -> <CB as ProducerCallback<Self::Item>>::Output + where CB: ProducerCallback<Self::Item>; + + // Provided methods + fn collect_into_vec(self, target: &mut Vec<Self::Item, Global>) { ... } + fn unzip_into_vecs<A, B>( + self, + left: &mut Vec<A, Global>, + right: &mut Vec<B, Global> + ) + where Self: IndexedParallelIterator<Item = (A, B)>, + A: Send, + B: Send { ... } + fn zip<Z>(self, zip_op: Z) -> Zip<Self, <Z as IntoParallelIterator>::Iter> + where Z: IntoParallelIterator, + <Z as IntoParallelIterator>::Iter: IndexedParallelIterator { ... } + fn zip_eq<Z>( + self, + zip_op: Z + ) -> ZipEq<Self, <Z as IntoParallelIterator>::Iter> + where Z: IntoParallelIterator, + <Z as IntoParallelIterator>::Iter: IndexedParallelIterator { ... } + fn interleave<I>( + self, + other: I + ) -> Interleave<Self, <I as IntoParallelIterator>::Iter> + where I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator<Item = Self::Item> { ... } + fn interleave_shortest<I>( + self, + other: I + ) -> InterleaveShortest<Self, <I as IntoParallelIterator>::Iter> + where I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator<Item = Self::Item> { ... } + fn chunks(self, chunk_size: usize) -> Chunks<Self> { ... } + fn fold_chunks<T, ID, F>( + self, + chunk_size: usize, + identity: ID, + fold_op: F + ) -> FoldChunks<Self, ID, F> + where ID: Fn() -> T + Send + Sync, + F: Fn(T, Self::Item) -> T + Send + Sync, + T: Send { ... } + fn fold_chunks_with<T, F>( + self, + chunk_size: usize, + init: T, + fold_op: F + ) -> FoldChunksWith<Self, T, F> + where T: Send + Clone, + F: Fn(T, Self::Item) -> T + Send + Sync { ... } + fn cmp<I>(self, other: I) -> Ordering + where I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: Ord { ... } + fn partial_cmp<I>(self, other: I) -> Option<Ordering> + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item> { ... } + fn eq<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialEq<<I as IntoParallelIterator>::Item> { ... } + fn ne<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialEq<<I as IntoParallelIterator>::Item> { ... } + fn lt<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item> { ... } + fn le<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item> { ... } + fn gt<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item> { ... } + fn ge<I>(self, other: I) -> bool + where I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item> { ... } + fn enumerate(self) -> Enumerate<Self> { ... } + fn step_by(self, step: usize) -> StepBy<Self> { ... } + fn skip(self, n: usize) -> Skip<Self> { ... } + fn take(self, n: usize) -> Take<Self> { ... } + fn position_any<P>(self, predicate: P) -> Option<usize> + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn position_first<P>(self, predicate: P) -> Option<usize> + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn position_last<P>(self, predicate: P) -> Option<usize> + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn positions<P>(self, predicate: P) -> Positions<Self, P> + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn rev(self) -> Rev<Self> { ... } + fn with_min_len(self, min: usize) -> MinLen<Self> { ... } + fn with_max_len(self, max: usize) -> MaxLen<Self> { ... } +
    }
    Expand description

    An iterator that supports “random access” to its data, meaning +that you can split it at arbitrary indices and draw data from +those points.

    +

    Note: Not implemented for u64, i64, u128, or i128 ranges

    +

    Required Methods§

    fn len(&self) -> usize

    Produces an exact count of how many items this iterator will +produce, presuming no panic occurs.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let par_iter = (0..100).into_par_iter().zip(vec![0; 10]);
    +assert_eq!(par_iter.len(), 10);
    +
    +let vec: Vec<_> = par_iter.collect();
    +assert_eq!(vec.len(), 10);
    +

    fn drive<C>(self, consumer: C) -> <C as Consumer<Self::Item>>::Resultwhere + C: Consumer<Self::Item>,

    Internal method used to define the behavior of this parallel +iterator. You should not need to call this directly.

    +

    This method causes the iterator self to start producing +items and to feed them to the consumer consumer one by one. +It may split the consumer before doing so to create the +opportunity to produce in parallel. If a split does happen, it +will inform the consumer of the index where the split should +occur (unlike ParallelIterator::drive_unindexed()).

    +

    See the README for more details on the internals of parallel +iterators.

    +

    fn with_producer<CB>( + self, + callback: CB +) -> <CB as ProducerCallback<Self::Item>>::Outputwhere + CB: ProducerCallback<Self::Item>,

    Internal method used to define the behavior of this parallel +iterator. You should not need to call this directly.

    +

    This method converts the iterator into a producer P and then +invokes callback.callback() with P. Note that the type of +this producer is not defined as part of the API, since +callback must be defined generically for all producers. This +allows the producer type to contain references; it also means +that parallel iterators can adjust that type without causing a +breaking change.

    +

    See the README for more details on the internals of parallel +iterators.

    +

    Provided Methods§

    fn collect_into_vec(self, target: &mut Vec<Self::Item, Global>)

    Collects the results of the iterator into the specified +vector. The vector is always cleared before execution +begins. If possible, reusing the vector across calls can lead +to better performance since it reuses the same backing buffer.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +// any prior data will be cleared
    +let mut vec = vec![-1, -2, -3];
    +
    +(0..5).into_par_iter()
    +    .collect_into_vec(&mut vec);
    +
    +assert_eq!(vec, [0, 1, 2, 3, 4]);
    +

    fn unzip_into_vecs<A, B>( + self, + left: &mut Vec<A, Global>, + right: &mut Vec<B, Global> +)where + Self: IndexedParallelIterator<Item = (A, B)>, + A: Send, + B: Send,

    Unzips the results of the iterator into the specified +vectors. The vectors are always cleared before execution +begins. If possible, reusing the vectors across calls can lead +to better performance since they reuse the same backing buffer.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +// any prior data will be cleared
    +let mut left = vec![42; 10];
    +let mut right = vec![-1; 10];
    +
    +(10..15).into_par_iter()
    +    .enumerate()
    +    .unzip_into_vecs(&mut left, &mut right);
    +
    +assert_eq!(left, [0, 1, 2, 3, 4]);
    +assert_eq!(right, [10, 11, 12, 13, 14]);
    +

    fn zip<Z>(self, zip_op: Z) -> Zip<Self, <Z as IntoParallelIterator>::Iter>where + Z: IntoParallelIterator, + <Z as IntoParallelIterator>::Iter: IndexedParallelIterator,

    Iterates over tuples (A, B), where the items A are from +this iterator and B are from the iterator given as argument. +Like the zip method on ordinary iterators, if the two +iterators are of unequal length, you only get the items they +have in common.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (1..4)
    +    .into_par_iter()
    +    .zip(vec!['a', 'b', 'c'])
    +    .collect();
    +
    +assert_eq!(result, [(1, 'a'), (2, 'b'), (3, 'c')]);
    +

    fn zip_eq<Z>(self, zip_op: Z) -> ZipEq<Self, <Z as IntoParallelIterator>::Iter>where + Z: IntoParallelIterator, + <Z as IntoParallelIterator>::Iter: IndexedParallelIterator,

    The same as Zip, but requires that both iterators have the same length.

    +
    Panics
    +

    Will panic if self and zip_op are not the same length.

    + +
    use rayon::prelude::*;
    +
    +let one = [1u8];
    +let two = [2u8, 2];
    +let one_iter = one.par_iter();
    +let two_iter = two.par_iter();
    +
    +// this will panic
    +let zipped: Vec<(&u8, &u8)> = one_iter.zip_eq(two_iter).collect();
    +
    +// we should never get here
    +assert_eq!(1, zipped.len());
    +

    fn interleave<I>( + self, + other: I +) -> Interleave<Self, <I as IntoParallelIterator>::Iter>where + I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator<Item = Self::Item>,

    Interleaves elements of this iterator and the other given +iterator. Alternately yields elements from this iterator and +the given iterator, until both are exhausted. If one iterator +is exhausted before the other, the last elements are provided +from the other.

    +
    Examples
    +
    use rayon::prelude::*;
    +let (x, y) = (vec![1, 2], vec![3, 4, 5, 6]);
    +let r: Vec<i32> = x.into_par_iter().interleave(y).collect();
    +assert_eq!(r, vec![1, 3, 2, 4, 5, 6]);
    +

    fn interleave_shortest<I>( + self, + other: I +) -> InterleaveShortest<Self, <I as IntoParallelIterator>::Iter>where + I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator<Item = Self::Item>,

    Interleaves elements of this iterator and the other given +iterator, until one is exhausted.

    +
    Examples
    +
    use rayon::prelude::*;
    +let (x, y) = (vec![1, 2, 3, 4], vec![5, 6]);
    +let r: Vec<i32> = x.into_par_iter().interleave_shortest(y).collect();
    +assert_eq!(r, vec![1, 5, 2, 6, 3]);
    +

    fn chunks(self, chunk_size: usize) -> Chunks<Self>

    Splits an iterator up into fixed-size chunks.

    +

    Returns an iterator that returns Vecs of the given number of elements. +If the number of elements in the iterator is not divisible by chunk_size, +the last chunk may be shorter than chunk_size.

    +

    See also par_chunks() and par_chunks_mut() for similar behavior on +slices, without having to allocate intermediate Vecs for the chunks.

    +
    Examples
    +
    use rayon::prelude::*;
    +let a = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    +let r: Vec<Vec<i32>> = a.into_par_iter().chunks(3).collect();
    +assert_eq!(r, vec![vec![1,2,3], vec![4,5,6], vec![7,8,9], vec![10]]);
    +

    fn fold_chunks<T, ID, F>( + self, + chunk_size: usize, + identity: ID, + fold_op: F +) -> FoldChunks<Self, ID, F>where + ID: Fn() -> T + Send + Sync, + F: Fn(T, Self::Item) -> T + Send + Sync, + T: Send,

    Splits an iterator into fixed-size chunks, performing a sequential fold() on +each chunk.

    +

    Returns an iterator that produces a folded result for each chunk of items +produced by this iterator.

    +

    This works essentially like:

    +
    iter.chunks(chunk_size)
    +    .map(|chunk|
    +        chunk.into_iter()
    +            .fold(identity, fold_op)
    +    )
    +
    +

    except there is no per-chunk allocation overhead.

    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    use rayon::prelude::*;
    +let nums = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    +let chunk_sums = nums.into_par_iter().fold_chunks(2, || 0, |a, n| a + n).collect::<Vec<_>>();
    +assert_eq!(chunk_sums, vec![3, 7, 11, 15, 19]);
    +

    fn fold_chunks_with<T, F>( + self, + chunk_size: usize, + init: T, + fold_op: F +) -> FoldChunksWith<Self, T, F>where + T: Send + Clone, + F: Fn(T, Self::Item) -> T + Send + Sync,

    Splits an iterator into fixed-size chunks, performing a sequential fold() on +each chunk.

    +

    Returns an iterator that produces a folded result for each chunk of items +produced by this iterator.

    +

    This works essentially like fold_chunks(chunk_size, || init.clone(), fold_op), +except it doesn’t require the init type to be Sync, nor any other form of +added synchronization.

    +

    Panics if chunk_size is 0.

    +
    Examples
    +
    use rayon::prelude::*;
    +let nums = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    +let chunk_sums = nums.into_par_iter().fold_chunks_with(2, 0, |a, n| a + n).collect::<Vec<_>>();
    +assert_eq!(chunk_sums, vec![3, 7, 11, 15, 19]);
    +

    fn cmp<I>(self, other: I) -> Orderingwhere + I: IntoParallelIterator<Item = Self::Item>, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: Ord,

    Lexicographically compares the elements of this ParallelIterator with those of +another.

    +
    Examples
    +
    use rayon::prelude::*;
    +use std::cmp::Ordering::*;
    +
    +let x = vec![1, 2, 3];
    +assert_eq!(x.par_iter().cmp(&vec![1, 3, 0]), Less);
    +assert_eq!(x.par_iter().cmp(&vec![1, 2, 3]), Equal);
    +assert_eq!(x.par_iter().cmp(&vec![1, 2]), Greater);
    +

    fn partial_cmp<I>(self, other: I) -> Option<Ordering>where + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item>,

    Lexicographically compares the elements of this ParallelIterator with those of +another.

    +
    Examples
    +
    use rayon::prelude::*;
    +use std::cmp::Ordering::*;
    +use std::f64::NAN;
    +
    +let x = vec![1.0, 2.0, 3.0];
    +assert_eq!(x.par_iter().partial_cmp(&vec![1.0, 3.0, 0.0]), Some(Less));
    +assert_eq!(x.par_iter().partial_cmp(&vec![1.0, 2.0, 3.0]), Some(Equal));
    +assert_eq!(x.par_iter().partial_cmp(&vec![1.0, 2.0]), Some(Greater));
    +assert_eq!(x.par_iter().partial_cmp(&vec![1.0, NAN]), None);
    +

    fn eq<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialEq<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are equal to those of another

    +

    fn ne<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialEq<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are unequal to those of another

    +

    fn lt<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are lexicographically less than those of another.

    +

    fn le<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are less or equal to those of another.

    +

    fn gt<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are lexicographically greater than those of another.

    +

    fn ge<I>(self, other: I) -> boolwhere + I: IntoParallelIterator, + <I as IntoParallelIterator>::Iter: IndexedParallelIterator, + Self::Item: PartialOrd<<I as IntoParallelIterator>::Item>,

    Determines if the elements of this ParallelIterator +are less or equal to those of another.

    +

    fn enumerate(self) -> Enumerate<Self>

    Yields an index along with each item.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let chars = vec!['a', 'b', 'c'];
    +let result: Vec<_> = chars
    +    .into_par_iter()
    +    .enumerate()
    +    .collect();
    +
    +assert_eq!(result, [(0, 'a'), (1, 'b'), (2, 'c')]);
    +

    fn step_by(self, step: usize) -> StepBy<Self>

    Creates an iterator that steps by the given amount

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let range = (3..10);
    +let result: Vec<i32> = range
    +   .into_par_iter()
    +   .step_by(3)
    +   .collect();
    +
    +assert_eq!(result, [3, 6, 9])
    +

    fn skip(self, n: usize) -> Skip<Self>

    Creates an iterator that skips the first n elements.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .skip(95)
    +    .collect();
    +
    +assert_eq!(result, [95, 96, 97, 98, 99]);
    +

    fn take(self, n: usize) -> Take<Self>

    Creates an iterator that yields the first n elements.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .take(5)
    +    .collect();
    +
    +assert_eq!(result, [0, 1, 2, 3, 4]);
    +

    fn position_any<P>(self, predicate: P) -> Option<usize>where + P: Fn(Self::Item) -> bool + Sync + Send,

    Searches for some item in the parallel iterator that +matches the given predicate, and returns its index. Like +ParallelIterator::find_any, the parallel search will not +necessarily find the first match, and once a match is +found we’ll attempt to stop processing any more.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +let i = a.par_iter().position_any(|&x| x == 3).expect("found");
    +assert!(i == 2 || i == 3);
    +
    +assert_eq!(a.par_iter().position_any(|&x| x == 100), None);
    +

    fn position_first<P>(self, predicate: P) -> Option<usize>where + P: Fn(Self::Item) -> bool + Sync + Send,

    Searches for the sequentially first item in the parallel iterator +that matches the given predicate, and returns its index.

    +

    Like ParallelIterator::find_first, once a match is found, +all attempts to the right of the match will be stopped, while +attempts to the left must continue in case an earlier match +is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “first” may be nebulous. If you +just want the first match that discovered anywhere in the iterator, +position_any is a better choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +assert_eq!(a.par_iter().position_first(|&x| x == 3), Some(2));
    +
    +assert_eq!(a.par_iter().position_first(|&x| x == 100), None);
    +

    fn position_last<P>(self, predicate: P) -> Option<usize>where + P: Fn(Self::Item) -> bool + Sync + Send,

    Searches for the sequentially last item in the parallel iterator +that matches the given predicate, and returns its index.

    +

    Like ParallelIterator::find_last, once a match is found, +all attempts to the left of the match will be stopped, while +attempts to the right must continue in case a later match +is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “last” may be nebulous. When the +order doesn’t actually matter to you, position_any is a better +choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +assert_eq!(a.par_iter().position_last(|&x| x == 3), Some(3));
    +
    +assert_eq!(a.par_iter().position_last(|&x| x == 100), None);
    +

    fn positions<P>(self, predicate: P) -> Positions<Self, P>where + P: Fn(Self::Item) -> bool + Sync + Send,

    Searches for items in the parallel iterator that match the given +predicate, and returns their indices.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let primes = vec![2, 3, 5, 7, 11, 13, 17, 19, 23, 29];
    +
    +// Find the positions of primes congruent to 1 modulo 6
    +let p1mod6: Vec<_> = primes.par_iter().positions(|&p| p % 6 == 1).collect();
    +assert_eq!(p1mod6, [3, 5, 7]); // primes 7, 13, and 19
    +
    +// Find the positions of primes congruent to 5 modulo 6
    +let p5mod6: Vec<_> = primes.par_iter().positions(|&p| p % 6 == 5).collect();
    +assert_eq!(p5mod6, [2, 4, 6, 8, 9]); // primes 5, 11, 17, 23, and 29
    +

    fn rev(self) -> Rev<Self>

    Produces a new iterator with the elements of this iterator in +reverse order.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..5)
    +    .into_par_iter()
    +    .rev()
    +    .collect();
    +
    +assert_eq!(result, [4, 3, 2, 1, 0]);
    +

    fn with_min_len(self, min: usize) -> MinLen<Self>

    Sets the minimum length of iterators desired to process in each +rayon job. Rayon will not split any smaller than this length, but +of course an iterator could already be smaller to begin with.

    +

    Producers like zip and interleave will use greater of the two +minimums. +Chained iterators and iterators inside flat_map may each use +their own minimum length.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let min = (0..1_000_000)
    +    .into_par_iter()
    +    .with_min_len(1234)
    +    .fold(|| 0, |acc, _| acc + 1) // count how many are in this segment
    +    .min().unwrap();
    +
    +assert!(min >= 1234);
    +

    fn with_max_len(self, max: usize) -> MaxLen<Self>

    Sets the maximum length of iterators desired to process in each +rayon job. Rayon will try to split at least below this length, +unless that would put it below the length from with_min_len(). +For example, given min=10 and max=15, a length of 16 will not be +split any further.

    +

    Producers like zip and interleave will use lesser of the two +maximums. +Chained iterators and iterators inside flat_map may each use +their own maximum length.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let max = (0..1_000_000)
    +    .into_par_iter()
    +    .with_max_len(1234)
    +    .fold(|| 0, |acc, _| acc + 1) // count how many are in this segment
    +    .max().unwrap();
    +
    +assert!(max <= 1234);
    +

    Implementations on Foreign Types§

    §

    impl<L, R> IndexedParallelIterator for Either<L, R>where + L: IndexedParallelIterator, + R: IndexedParallelIterator<Item = <L as ParallelIterator>::Item>,

    §

    fn drive<C>( + self, + consumer: C +) -> <C as Consumer<<Either<L, R> as ParallelIterator>::Item>>::Resultwhere + C: Consumer<<Either<L, R> as ParallelIterator>::Item>,

    §

    fn len(&self) -> usize

    §

    fn with_producer<CB>( + self, + callback: CB +) -> <CB as ProducerCallback<<Either<L, R> as ParallelIterator>::Item>>::Outputwhere + CB: ProducerCallback<<Either<L, R> as ParallelIterator>::Item>,

    Implementors§

    §

    impl IndexedParallelIterator for Iter<char>

    §

    impl IndexedParallelIterator for Iter<char>

    §

    impl<'a, T> IndexedParallelIterator for Drain<'a, T>where + T: Ord + Send,

    §

    impl<'a, T> IndexedParallelIterator for Drain<'a, T>where + T: Send,

    §

    impl<'a, T> IndexedParallelIterator for Iter<'a, T>where + T: Ord + Sync + 'a,

    §

    impl<'a, T> IndexedParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    impl<'a, T> IndexedParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    impl<'a, T> IndexedParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    impl<'a, T> IndexedParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T> IndexedParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T> IndexedParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T, I> IndexedParallelIterator for Cloned<I>where + I: IndexedParallelIterator<Item = &'a T>, + T: 'a + Clone + Send + Sync,

    §

    impl<'a, T, I> IndexedParallelIterator for Copied<I>where + I: IndexedParallelIterator<Item = &'a T>, + T: 'a + Copy + Send + Sync,

    §

    impl<'data, T> IndexedParallelIterator for Chunks<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> IndexedParallelIterator for ChunksExact<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> IndexedParallelIterator for ChunksExactMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> IndexedParallelIterator for ChunksMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> IndexedParallelIterator for Drain<'data, T>where + T: Send,

    §

    impl<'data, T> IndexedParallelIterator for Iter<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> IndexedParallelIterator for IterMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> IndexedParallelIterator for RChunks<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> IndexedParallelIterator for RChunksExact<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> IndexedParallelIterator for RChunksExactMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> IndexedParallelIterator for RChunksMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> IndexedParallelIterator for Windows<'data, T>where + T: Sync + 'data,

    §

    impl<A> IndexedParallelIterator for MultiZip<(A,)>where + A: IndexedParallelIterator,

    §

    impl<A, B> IndexedParallelIterator for Chain<A, B>where + A: IndexedParallelIterator, + B: IndexedParallelIterator<Item = <A as ParallelIterator>::Item>,

    §

    impl<A, B> IndexedParallelIterator for MultiZip<(A, B)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B> IndexedParallelIterator for Zip<A, B>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B> IndexedParallelIterator for ZipEq<A, B>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B, C> IndexedParallelIterator for MultiZip<(A, B, C)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator,

    §

    impl<A, B, C, D> IndexedParallelIterator for MultiZip<(A, B, C, D)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator,

    §

    impl<A, B, C, D, E> IndexedParallelIterator for MultiZip<(A, B, C, D, E)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G, H)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J, K> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J, K)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator, + K: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J, K, L> IndexedParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J, K, L)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator, + K: IndexedParallelIterator, + L: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Chunks<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Enumerate<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Intersperse<I>where + I: IndexedParallelIterator, + <I as ParallelIterator>::Item: Clone + Send,

    §

    impl<I> IndexedParallelIterator for MaxLen<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for MinLen<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for PanicFuse<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Rev<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Skip<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for StepBy<I>where + I: IndexedParallelIterator,

    §

    impl<I> IndexedParallelIterator for Take<I>where + I: IndexedParallelIterator,

    §

    impl<I, F> IndexedParallelIterator for Inspect<I, F>where + I: IndexedParallelIterator, + F: Fn(&<I as ParallelIterator>::Item) + Sync + Send,

    §

    impl<I, F> IndexedParallelIterator for Update<I, F>where + I: IndexedParallelIterator, + F: Fn(&mut <I as ParallelIterator>::Item) + Send + Sync,

    §

    impl<I, F, R> IndexedParallelIterator for Map<I, F>where + I: IndexedParallelIterator, + F: Fn(<I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    impl<I, ID, U, F> IndexedParallelIterator for FoldChunks<I, ID, F>where + I: IndexedParallelIterator, + ID: Fn() -> U + Send + Sync, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Send + Sync, + U: Send,

    §

    impl<I, INIT, T, F, R> IndexedParallelIterator for MapInit<I, INIT, F>where + I: IndexedParallelIterator, + INIT: Fn() -> T + Sync + Send, + F: Fn(&mut T, <I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    impl<I, J> IndexedParallelIterator for Interleave<I, J>where + I: IndexedParallelIterator, + J: IndexedParallelIterator<Item = <I as ParallelIterator>::Item>,

    §

    impl<I, J> IndexedParallelIterator for InterleaveShortest<I, J>where + I: IndexedParallelIterator, + J: IndexedParallelIterator<Item = <I as ParallelIterator>::Item>,

    §

    impl<I, T, F, R> IndexedParallelIterator for MapWith<I, T, F>where + I: IndexedParallelIterator, + T: Send + Clone, + F: Fn(&mut T, <I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    impl<I, U, F> IndexedParallelIterator for FoldChunksWith<I, U, F>where + I: IndexedParallelIterator, + U: Send + Clone, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Send + Sync,

    §

    impl<T> IndexedParallelIterator for Empty<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for IntoIter<T>where + T: Ord + Send,

    §

    impl<T> IndexedParallelIterator for IntoIter<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for IntoIter<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for IntoIter<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for IntoIter<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for Iter<T>where + T: IndexedRangeInteger,

    §

    impl<T> IndexedParallelIterator for Iter<T>where + T: IndexedRangeInteger,

    §

    impl<T> IndexedParallelIterator for Once<T>where + T: Send,

    §

    impl<T> IndexedParallelIterator for RepeatN<T>where + T: Clone + Send,

    §

    impl<T, const N: usize> IndexedParallelIterator for IntoIter<T, N>where + T: Send,

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.html new file mode 100644 index 000000000..74f8f4152 --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIndexedParallelIterator.html @@ -0,0 +1,26 @@ +MaybeIndexedParallelIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.html new file mode 100644 index 000000000..a82d86155 --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelIterator.html @@ -0,0 +1,29 @@ +MaybeIntoParallelIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    pub trait MaybeIntoParallelIterator: IntoParallelIterator {
    +    // Required method
    +    fn maybe_into_par_iter(self) -> Self::Iter;
    +}

    Required Methods§

    source

    fn maybe_into_par_iter(self) -> Self::Iter

    Implementors§

    source§

    impl<I: IntoParallelIterator> MaybeIntoParallelIterator for I

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.html new file mode 100644 index 000000000..a4a7f2fa0 --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.MaybeIntoParallelRefMutIterator.html @@ -0,0 +1,29 @@ +MaybeIntoParallelRefMutIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    pub trait MaybeIntoParallelRefMutIterator<'data>: IntoParallelRefMutIterator<'data> {
    +    // Required method
    +    fn maybe_par_iter_mut(&'data mut self) -> Self::Iter;
    +}

    Required Methods§

    source

    fn maybe_par_iter_mut(&'data mut self) -> Self::Iter

    Implementors§

    source§

    impl<'data, I: IntoParallelRefMutIterator<'data> + ?Sized> MaybeIntoParallelRefMutIterator<'data> for I

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.html new file mode 100644 index 000000000..cbcbee115 --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.MaybeParallelIterator.html @@ -0,0 +1,26 @@ +MaybeParallelIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    pub trait MaybeParallelIterator: ParallelIterator { }

    Implementors§

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/prelude/trait.ParallelIterator.html b/docs/maybe_rayon/concurrent/prelude/trait.ParallelIterator.html new file mode 100644 index 000000000..a1681406b --- /dev/null +++ b/docs/maybe_rayon/concurrent/prelude/trait.ParallelIterator.html @@ -0,0 +1,1683 @@ +ParallelIterator in maybe_rayon::concurrent::prelude - Rust + + + + + + +
    pub trait ParallelIterator: Sized + Send {
    +    type Item: Send;
    +
    +
    Show 58 methods // Required method + fn drive_unindexed<C>( + self, + consumer: C + ) -> <C as Consumer<Self::Item>>::Result + where C: UnindexedConsumer<Self::Item>; + + // Provided methods + fn for_each<OP>(self, op: OP) + where OP: Fn(Self::Item) + Sync + Send { ... } + fn for_each_with<OP, T>(self, init: T, op: OP) + where OP: Fn(&mut T, Self::Item) + Sync + Send, + T: Send + Clone { ... } + fn for_each_init<OP, INIT, T>(self, init: INIT, op: OP) + where OP: Fn(&mut T, Self::Item) + Sync + Send, + INIT: Fn() -> T + Sync + Send { ... } + fn try_for_each<OP, R>(self, op: OP) -> R + where OP: Fn(Self::Item) -> R + Sync + Send, + R: Try<Output = ()> + Send { ... } + fn try_for_each_with<OP, T, R>(self, init: T, op: OP) -> R + where OP: Fn(&mut T, Self::Item) -> R + Sync + Send, + T: Send + Clone, + R: Try<Output = ()> + Send { ... } + fn try_for_each_init<OP, INIT, T, R>(self, init: INIT, op: OP) -> R + where OP: Fn(&mut T, Self::Item) -> R + Sync + Send, + INIT: Fn() -> T + Sync + Send, + R: Try<Output = ()> + Send { ... } + fn count(self) -> usize { ... } + fn map<F, R>(self, map_op: F) -> Map<Self, F> + where F: Fn(Self::Item) -> R + Sync + Send, + R: Send { ... } + fn map_with<F, T, R>(self, init: T, map_op: F) -> MapWith<Self, T, F> + where F: Fn(&mut T, Self::Item) -> R + Sync + Send, + T: Send + Clone, + R: Send { ... } + fn map_init<F, INIT, T, R>( + self, + init: INIT, + map_op: F + ) -> MapInit<Self, INIT, F> + where F: Fn(&mut T, Self::Item) -> R + Sync + Send, + INIT: Fn() -> T + Sync + Send, + R: Send { ... } + fn cloned<'a, T>(self) -> Cloned<Self> + where T: 'a + Clone + Send, + Self: ParallelIterator<Item = &'a T> { ... } + fn copied<'a, T>(self) -> Copied<Self> + where T: 'a + Copy + Send, + Self: ParallelIterator<Item = &'a T> { ... } + fn inspect<OP>(self, inspect_op: OP) -> Inspect<Self, OP> + where OP: Fn(&Self::Item) + Sync + Send { ... } + fn update<F>(self, update_op: F) -> Update<Self, F> + where F: Fn(&mut Self::Item) + Sync + Send { ... } + fn filter<P>(self, filter_op: P) -> Filter<Self, P> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn filter_map<P, R>(self, filter_op: P) -> FilterMap<Self, P> + where P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send { ... } + fn flat_map<F, PI>(self, map_op: F) -> FlatMap<Self, F> + where F: Fn(Self::Item) -> PI + Sync + Send, + PI: IntoParallelIterator { ... } + fn flat_map_iter<F, SI>(self, map_op: F) -> FlatMapIter<Self, F> + where F: Fn(Self::Item) -> SI + Sync + Send, + SI: IntoIterator, + <SI as IntoIterator>::Item: Send { ... } + fn flatten(self) -> Flatten<Self> + where Self::Item: IntoParallelIterator { ... } + fn flatten_iter(self) -> FlattenIter<Self> + where Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: Send { ... } + fn reduce<OP, ID>(self, identity: ID, op: OP) -> Self::Item + where OP: Fn(Self::Item, Self::Item) -> Self::Item + Sync + Send, + ID: Fn() -> Self::Item + Sync + Send { ... } + fn reduce_with<OP>(self, op: OP) -> Option<Self::Item> + where OP: Fn(Self::Item, Self::Item) -> Self::Item + Sync + Send { ... } + fn try_reduce<T, OP, ID>(self, identity: ID, op: OP) -> Self::Item + where OP: Fn(T, T) -> Self::Item + Sync + Send, + ID: Fn() -> T + Sync + Send, + Self::Item: Try<Output = T> { ... } + fn try_reduce_with<T, OP>(self, op: OP) -> Option<Self::Item> + where OP: Fn(T, T) -> Self::Item + Sync + Send, + Self::Item: Try<Output = T> { ... } + fn fold<T, ID, F>(self, identity: ID, fold_op: F) -> Fold<Self, ID, F> + where F: Fn(T, Self::Item) -> T + Sync + Send, + ID: Fn() -> T + Sync + Send, + T: Send { ... } + fn fold_with<F, T>(self, init: T, fold_op: F) -> FoldWith<Self, T, F> + where F: Fn(T, Self::Item) -> T + Sync + Send, + T: Send + Clone { ... } + fn try_fold<T, R, ID, F>( + self, + identity: ID, + fold_op: F + ) -> TryFold<Self, R, ID, F> + where F: Fn(T, Self::Item) -> R + Sync + Send, + ID: Fn() -> T + Sync + Send, + R: Try<Output = T> + Send { ... } + fn try_fold_with<F, T, R>( + self, + init: T, + fold_op: F + ) -> TryFoldWith<Self, R, F> + where F: Fn(T, Self::Item) -> R + Sync + Send, + R: Try<Output = T> + Send, + T: Clone + Send { ... } + fn sum<S>(self) -> S + where S: Send + Sum<Self::Item> + Sum<S> { ... } + fn product<P>(self) -> P + where P: Send + Product<Self::Item> + Product<P> { ... } + fn min(self) -> Option<Self::Item> + where Self::Item: Ord { ... } + fn min_by<F>(self, f: F) -> Option<Self::Item> + where F: Sync + Send + Fn(&Self::Item, &Self::Item) -> Ordering { ... } + fn min_by_key<K, F>(self, f: F) -> Option<Self::Item> + where K: Ord + Send, + F: Sync + Send + Fn(&Self::Item) -> K { ... } + fn max(self) -> Option<Self::Item> + where Self::Item: Ord { ... } + fn max_by<F>(self, f: F) -> Option<Self::Item> + where F: Sync + Send + Fn(&Self::Item, &Self::Item) -> Ordering { ... } + fn max_by_key<K, F>(self, f: F) -> Option<Self::Item> + where K: Ord + Send, + F: Sync + Send + Fn(&Self::Item) -> K { ... } + fn chain<C>( + self, + chain: C + ) -> Chain<Self, <C as IntoParallelIterator>::Iter> + where C: IntoParallelIterator<Item = Self::Item> { ... } + fn find_any<P>(self, predicate: P) -> Option<Self::Item> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn find_first<P>(self, predicate: P) -> Option<Self::Item> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn find_last<P>(self, predicate: P) -> Option<Self::Item> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn find_map_any<P, R>(self, predicate: P) -> Option<R> + where P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send { ... } + fn find_map_first<P, R>(self, predicate: P) -> Option<R> + where P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send { ... } + fn find_map_last<P, R>(self, predicate: P) -> Option<R> + where P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send { ... } + fn any<P>(self, predicate: P) -> bool + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn all<P>(self, predicate: P) -> bool + where P: Fn(Self::Item) -> bool + Sync + Send { ... } + fn while_some<T>(self) -> WhileSome<Self> + where Self: ParallelIterator<Item = Option<T>>, + T: Send { ... } + fn panic_fuse(self) -> PanicFuse<Self> { ... } + fn collect<C>(self) -> C + where C: FromParallelIterator<Self::Item> { ... } + fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB) + where Self: ParallelIterator<Item = (A, B)>, + FromA: Default + Send + ParallelExtend<A>, + FromB: Default + Send + ParallelExtend<B>, + A: Send, + B: Send { ... } + fn partition<A, B, P>(self, predicate: P) -> (A, B) + where A: Default + Send + ParallelExtend<Self::Item>, + B: Default + Send + ParallelExtend<Self::Item>, + P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn partition_map<A, B, P, L, R>(self, predicate: P) -> (A, B) + where A: Default + Send + ParallelExtend<L>, + B: Default + Send + ParallelExtend<R>, + P: Fn(Self::Item) -> Either<L, R> + Sync + Send, + L: Send, + R: Send { ... } + fn intersperse(self, element: Self::Item) -> Intersperse<Self> + where Self::Item: Clone { ... } + fn take_any(self, n: usize) -> TakeAny<Self> { ... } + fn skip_any(self, n: usize) -> SkipAny<Self> { ... } + fn take_any_while<P>(self, predicate: P) -> TakeAnyWhile<Self, P> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn skip_any_while<P>(self, predicate: P) -> SkipAnyWhile<Self, P> + where P: Fn(&Self::Item) -> bool + Sync + Send { ... } + fn opt_len(&self) -> Option<usize> { ... } +
    }
    Expand description

    Parallel version of the standard iterator trait.

    +

    The combinators on this trait are available on all parallel +iterators. Additional methods can be found on the +IndexedParallelIterator trait: those methods are only +available for parallel iterators where the number of items is +known in advance (so, e.g., after invoking filter, those methods +become unavailable).

    +

    For examples of using parallel iterators, see the docs on the +iter module.

    +

    Required Associated Types§

    type Item: Send

    The type of item that this parallel iterator produces. +For example, if you use the for_each method, this is the type of +item that your closure will be invoked with.

    +

    Required Methods§

    fn drive_unindexed<C>(self, consumer: C) -> <C as Consumer<Self::Item>>::Resultwhere + C: UnindexedConsumer<Self::Item>,

    Internal method used to define the behavior of this parallel +iterator. You should not need to call this directly.

    +

    This method causes the iterator self to start producing +items and to feed them to the consumer consumer one by one. +It may split the consumer before doing so to create the +opportunity to produce in parallel.

    +

    See the README for more details on the internals of parallel +iterators.

    +

    Provided Methods§

    fn for_each<OP>(self, op: OP)where + OP: Fn(Self::Item) + Sync + Send,

    Executes OP on each item produced by the iterator, in parallel.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +(0..100).into_par_iter().for_each(|x| println!("{:?}", x));
    +

    fn for_each_with<OP, T>(self, init: T, op: OP)where + OP: Fn(&mut T, Self::Item) + Sync + Send, + T: Send + Clone,

    Executes OP on the given init value with each item produced by +the iterator, in parallel.

    +

    The init value will be cloned only as needed to be paired with +the group of items in each rayon job. It does not require the type +to be Sync.

    +
    Examples
    +
    use std::sync::mpsc::channel;
    +use rayon::prelude::*;
    +
    +let (sender, receiver) = channel();
    +
    +(0..5).into_par_iter().for_each_with(sender, |s, x| s.send(x).unwrap());
    +
    +let mut res: Vec<_> = receiver.iter().collect();
    +
    +res.sort();
    +
    +assert_eq!(&res[..], &[0, 1, 2, 3, 4])
    +

    fn for_each_init<OP, INIT, T>(self, init: INIT, op: OP)where + OP: Fn(&mut T, Self::Item) + Sync + Send, + INIT: Fn() -> T + Sync + Send,

    Executes OP on a value returned by init with each item produced by +the iterator, in parallel.

    +

    The init function will be called only as needed for a value to be +paired with the group of items in each rayon job. There is no +constraint on that returned type at all!

    +
    Examples
    +
    use rand::Rng;
    +use rayon::prelude::*;
    +
    +let mut v = vec![0u8; 1_000_000];
    +
    +v.par_chunks_mut(1000)
    +    .for_each_init(
    +        || rand::thread_rng(),
    +        |rng, chunk| rng.fill(chunk),
    +    );
    +
    +// There's a remote chance that this will fail...
    +for i in 0u8..=255 {
    +    assert!(v.contains(&i));
    +}
    +

    fn try_for_each<OP, R>(self, op: OP) -> Rwhere + OP: Fn(Self::Item) -> R + Sync + Send, + R: Try<Output = ()> + Send,

    Executes a fallible OP on each item produced by the iterator, in parallel.

    +

    If the OP returns Result::Err or Option::None, we will attempt to +stop processing the rest of the items in the iterator as soon as +possible, and we will return that terminating value. Otherwise, we will +return an empty Result::Ok(()) or Option::Some(()). If there are +multiple errors in parallel, it is not specified which will be returned.

    +
    Examples
    +
    use rayon::prelude::*;
    +use std::io::{self, Write};
    +
    +// This will stop iteration early if there's any write error, like
    +// having piped output get closed on the other end.
    +(0..100).into_par_iter()
    +    .try_for_each(|x| writeln!(io::stdout(), "{:?}", x))
    +    .expect("expected no write errors");
    +

    fn try_for_each_with<OP, T, R>(self, init: T, op: OP) -> Rwhere + OP: Fn(&mut T, Self::Item) -> R + Sync + Send, + T: Send + Clone, + R: Try<Output = ()> + Send,

    Executes a fallible OP on the given init value with each item +produced by the iterator, in parallel.

    +

    This combines the init semantics of for_each_with() and the +failure semantics of try_for_each().

    +
    Examples
    +
    use std::sync::mpsc::channel;
    +use rayon::prelude::*;
    +
    +let (sender, receiver) = channel();
    +
    +(0..5).into_par_iter()
    +    .try_for_each_with(sender, |s, x| s.send(x))
    +    .expect("expected no send errors");
    +
    +let mut res: Vec<_> = receiver.iter().collect();
    +
    +res.sort();
    +
    +assert_eq!(&res[..], &[0, 1, 2, 3, 4])
    +

    fn try_for_each_init<OP, INIT, T, R>(self, init: INIT, op: OP) -> Rwhere + OP: Fn(&mut T, Self::Item) -> R + Sync + Send, + INIT: Fn() -> T + Sync + Send, + R: Try<Output = ()> + Send,

    Executes a fallible OP on a value returned by init with each item +produced by the iterator, in parallel.

    +

    This combines the init semantics of for_each_init() and the +failure semantics of try_for_each().

    +
    Examples
    +
    use rand::Rng;
    +use rayon::prelude::*;
    +
    +let mut v = vec![0u8; 1_000_000];
    +
    +v.par_chunks_mut(1000)
    +    .try_for_each_init(
    +        || rand::thread_rng(),
    +        |rng, chunk| rng.try_fill(chunk),
    +    )
    +    .expect("expected no rand errors");
    +
    +// There's a remote chance that this will fail...
    +for i in 0u8..=255 {
    +    assert!(v.contains(&i));
    +}
    +

    fn count(self) -> usize

    Counts the number of items in this parallel iterator.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let count = (0..100).into_par_iter().count();
    +
    +assert_eq!(count, 100);
    +

    fn map<F, R>(self, map_op: F) -> Map<Self, F>where + F: Fn(Self::Item) -> R + Sync + Send, + R: Send,

    Applies map_op to each item of this iterator, producing a new +iterator with the results.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let mut par_iter = (0..5).into_par_iter().map(|x| x * 2);
    +
    +let doubles: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&doubles[..], &[0, 2, 4, 6, 8]);
    +

    fn map_with<F, T, R>(self, init: T, map_op: F) -> MapWith<Self, T, F>where + F: Fn(&mut T, Self::Item) -> R + Sync + Send, + T: Send + Clone, + R: Send,

    Applies map_op to the given init value with each item of this +iterator, producing a new iterator with the results.

    +

    The init value will be cloned only as needed to be paired with +the group of items in each rayon job. It does not require the type +to be Sync.

    +
    Examples
    +
    use std::sync::mpsc::channel;
    +use rayon::prelude::*;
    +
    +let (sender, receiver) = channel();
    +
    +let a: Vec<_> = (0..5)
    +                .into_par_iter()            // iterating over i32
    +                .map_with(sender, |s, x| {
    +                    s.send(x).unwrap();     // sending i32 values through the channel
    +                    x                       // returning i32
    +                })
    +                .collect();                 // collecting the returned values into a vector
    +
    +let mut b: Vec<_> = receiver.iter()         // iterating over the values in the channel
    +                            .collect();     // and collecting them
    +b.sort();
    +
    +assert_eq!(a, b);
    +

    fn map_init<F, INIT, T, R>( + self, + init: INIT, + map_op: F +) -> MapInit<Self, INIT, F>where + F: Fn(&mut T, Self::Item) -> R + Sync + Send, + INIT: Fn() -> T + Sync + Send, + R: Send,

    Applies map_op to a value returned by init with each item of this +iterator, producing a new iterator with the results.

    +

    The init function will be called only as needed for a value to be +paired with the group of items in each rayon job. There is no +constraint on that returned type at all!

    +
    Examples
    +
    use rand::Rng;
    +use rayon::prelude::*;
    +
    +let a: Vec<_> = (1i32..1_000_000)
    +    .into_par_iter()
    +    .map_init(
    +        || rand::thread_rng(),  // get the thread-local RNG
    +        |rng, x| if rng.gen() { // randomly negate items
    +            -x
    +        } else {
    +            x
    +        },
    +    ).collect();
    +
    +// There's a remote chance that this will fail...
    +assert!(a.iter().any(|&x| x < 0));
    +assert!(a.iter().any(|&x| x > 0));
    +

    fn cloned<'a, T>(self) -> Cloned<Self>where + T: 'a + Clone + Send, + Self: ParallelIterator<Item = &'a T>,

    Creates an iterator which clones all of its elements. This may be +useful when you have an iterator over &T, but you need T, and +that type implements Clone. See also copied().

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3];
    +
    +let v_cloned: Vec<_> = a.par_iter().cloned().collect();
    +
    +// cloned is the same as .map(|&x| x), for integers
    +let v_map: Vec<_> = a.par_iter().map(|&x| x).collect();
    +
    +assert_eq!(v_cloned, vec![1, 2, 3]);
    +assert_eq!(v_map, vec![1, 2, 3]);
    +

    fn copied<'a, T>(self) -> Copied<Self>where + T: 'a + Copy + Send, + Self: ParallelIterator<Item = &'a T>,

    Creates an iterator which copies all of its elements. This may be +useful when you have an iterator over &T, but you need T, and +that type implements Copy. See also cloned().

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3];
    +
    +let v_copied: Vec<_> = a.par_iter().copied().collect();
    +
    +// copied is the same as .map(|&x| x), for integers
    +let v_map: Vec<_> = a.par_iter().map(|&x| x).collect();
    +
    +assert_eq!(v_copied, vec![1, 2, 3]);
    +assert_eq!(v_map, vec![1, 2, 3]);
    +

    fn inspect<OP>(self, inspect_op: OP) -> Inspect<Self, OP>where + OP: Fn(&Self::Item) + Sync + Send,

    Applies inspect_op to a reference to each item of this iterator, +producing a new iterator passing through the original items. This is +often useful for debugging to see what’s happening in iterator stages.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 4, 2, 3];
    +
    +// this iterator sequence is complex.
    +let sum = a.par_iter()
    +            .cloned()
    +            .filter(|&x| x % 2 == 0)
    +            .reduce(|| 0, |sum, i| sum + i);
    +
    +println!("{}", sum);
    +
    +// let's add some inspect() calls to investigate what's happening
    +let sum = a.par_iter()
    +            .cloned()
    +            .inspect(|x| println!("about to filter: {}", x))
    +            .filter(|&x| x % 2 == 0)
    +            .inspect(|x| println!("made it through filter: {}", x))
    +            .reduce(|| 0, |sum, i| sum + i);
    +
    +println!("{}", sum);
    +

    fn update<F>(self, update_op: F) -> Update<Self, F>where + F: Fn(&mut Self::Item) + Sync + Send,

    Mutates each item of this iterator before yielding it.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let par_iter = (0..5).into_par_iter().update(|x| {*x *= 2;});
    +
    +let doubles: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&doubles[..], &[0, 2, 4, 6, 8]);
    +

    fn filter<P>(self, filter_op: P) -> Filter<Self, P>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Applies filter_op to each item of this iterator, producing a new +iterator with only the items that gave true results.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let mut par_iter = (0..10).into_par_iter().filter(|x| x % 2 == 0);
    +
    +let even_numbers: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&even_numbers[..], &[0, 2, 4, 6, 8]);
    +

    fn filter_map<P, R>(self, filter_op: P) -> FilterMap<Self, P>where + P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send,

    Applies filter_op to each item of this iterator to get an Option, +producing a new iterator with only the items from Some results.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let mut par_iter = (0..10).into_par_iter()
    +                        .filter_map(|x| {
    +                            if x % 2 == 0 { Some(x * 3) }
    +                            else { None }
    +                        });
    +
    +let even_numbers: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&even_numbers[..], &[0, 6, 12, 18, 24]);
    +

    fn flat_map<F, PI>(self, map_op: F) -> FlatMap<Self, F>where + F: Fn(Self::Item) -> PI + Sync + Send, + PI: IntoParallelIterator,

    Applies map_op to each item of this iterator to get nested parallel iterators, +producing a new parallel iterator that flattens these back into one.

    +

    See also flat_map_iter.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [[1, 2], [3, 4], [5, 6], [7, 8]];
    +
    +let par_iter = a.par_iter().cloned().flat_map(|a| a.to_vec());
    +
    +let vec: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&vec[..], &[1, 2, 3, 4, 5, 6, 7, 8]);
    +

    fn flat_map_iter<F, SI>(self, map_op: F) -> FlatMapIter<Self, F>where + F: Fn(Self::Item) -> SI + Sync + Send, + SI: IntoIterator, + <SI as IntoIterator>::Item: Send,

    Applies map_op to each item of this iterator to get nested serial iterators, +producing a new parallel iterator that flattens these back into one.

    +
    flat_map_iter versus flat_map
    +

    These two methods are similar but behave slightly differently. With flat_map, +each of the nested iterators must be a parallel iterator, and they will be further +split up with nested parallelism. With flat_map_iter, each nested iterator is a +sequential Iterator, and we only parallelize between them, while the items +produced by each nested iterator are processed sequentially.

    +

    When choosing between these methods, consider whether nested parallelism suits the +potential iterators at hand. If there’s little computation involved, or its length +is much less than the outer parallel iterator, then it may perform better to avoid +the overhead of parallelism, just flattening sequentially with flat_map_iter. +If there is a lot of computation, potentially outweighing the outer parallel +iterator, then the nested parallelism of flat_map may be worthwhile.

    +
    Examples
    +
    use rayon::prelude::*;
    +use std::cell::RefCell;
    +
    +let a = [[1, 2], [3, 4], [5, 6], [7, 8]];
    +
    +let par_iter = a.par_iter().flat_map_iter(|a| {
    +    // The serial iterator doesn't have to be thread-safe, just its items.
    +    let cell_iter = RefCell::new(a.iter().cloned());
    +    std::iter::from_fn(move || cell_iter.borrow_mut().next())
    +});
    +
    +let vec: Vec<_> = par_iter.collect();
    +
    +assert_eq!(&vec[..], &[1, 2, 3, 4, 5, 6, 7, 8]);
    +

    fn flatten(self) -> Flatten<Self>where + Self::Item: IntoParallelIterator,

    An adaptor that flattens parallel-iterable Items into one large iterator.

    +

    See also flatten_iter.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let x: Vec<Vec<_>> = vec![vec![1, 2], vec![3, 4]];
    +let y: Vec<_> = x.into_par_iter().flatten().collect();
    +
    +assert_eq!(y, vec![1, 2, 3, 4]);
    +

    fn flatten_iter(self) -> FlattenIter<Self>where + Self::Item: IntoIterator, + <Self::Item as IntoIterator>::Item: Send,

    An adaptor that flattens serial-iterable Items into one large iterator.

    +

    See also flatten and the analogous comparison of +flat_map_iter versus flat_map.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let x: Vec<Vec<_>> = vec![vec![1, 2], vec![3, 4]];
    +let iters: Vec<_> = x.into_iter().map(Vec::into_iter).collect();
    +let y: Vec<_> = iters.into_par_iter().flatten_iter().collect();
    +
    +assert_eq!(y, vec![1, 2, 3, 4]);
    +

    fn reduce<OP, ID>(self, identity: ID, op: OP) -> Self::Itemwhere + OP: Fn(Self::Item, Self::Item) -> Self::Item + Sync + Send, + ID: Fn() -> Self::Item + Sync + Send,

    Reduces the items in the iterator into one item using op. +The argument identity should be a closure that can produce +“identity” value which may be inserted into the sequence as +needed to create opportunities for parallel execution. So, for +example, if you are doing a summation, then identity() ought +to produce something that represents the zero for your type +(but consider just calling sum() in that case).

    +
    Examples
    +
    // Iterate over a sequence of pairs `(x0, y0), ..., (xN, yN)`
    +// and use reduce to compute one pair `(x0 + ... + xN, y0 + ... + yN)`
    +// where the first/second elements are summed separately.
    +use rayon::prelude::*;
    +let sums = [(0, 1), (5, 6), (16, 2), (8, 9)]
    +           .par_iter()        // iterating over &(i32, i32)
    +           .cloned()          // iterating over (i32, i32)
    +           .reduce(|| (0, 0), // the "identity" is 0 in both columns
    +                   |a, b| (a.0 + b.0, a.1 + b.1));
    +assert_eq!(sums, (0 + 5 + 16 + 8, 1 + 6 + 2 + 9));
    +

    Note: unlike a sequential fold operation, the order in +which op will be applied to reduce the result is not fully +specified. So op should be associative or else the results +will be non-deterministic. And of course identity() should +produce a true identity.

    +

    fn reduce_with<OP>(self, op: OP) -> Option<Self::Item>where + OP: Fn(Self::Item, Self::Item) -> Self::Item + Sync + Send,

    Reduces the items in the iterator into one item using op. +If the iterator is empty, None is returned; otherwise, +Some is returned.

    +

    This version of reduce is simple but somewhat less +efficient. If possible, it is better to call reduce(), which +requires an identity element.

    +
    Examples
    +
    use rayon::prelude::*;
    +let sums = [(0, 1), (5, 6), (16, 2), (8, 9)]
    +           .par_iter()        // iterating over &(i32, i32)
    +           .cloned()          // iterating over (i32, i32)
    +           .reduce_with(|a, b| (a.0 + b.0, a.1 + b.1))
    +           .unwrap();
    +assert_eq!(sums, (0 + 5 + 16 + 8, 1 + 6 + 2 + 9));
    +

    Note: unlike a sequential fold operation, the order in +which op will be applied to reduce the result is not fully +specified. So op should be associative or else the results +will be non-deterministic.

    +

    fn try_reduce<T, OP, ID>(self, identity: ID, op: OP) -> Self::Itemwhere + OP: Fn(T, T) -> Self::Item + Sync + Send, + ID: Fn() -> T + Sync + Send, + Self::Item: Try<Output = T>,

    Reduces the items in the iterator into one item using a fallible op. +The identity argument is used the same way as in reduce().

    +

    If a Result::Err or Option::None item is found, or if op reduces +to one, we will attempt to stop processing the rest of the items in the +iterator as soon as possible, and we will return that terminating value. +Otherwise, we will return the final reduced Result::Ok(T) or +Option::Some(T). If there are multiple errors in parallel, it is not +specified which will be returned.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +// Compute the sum of squares, being careful about overflow.
    +fn sum_squares<I: IntoParallelIterator<Item = i32>>(iter: I) -> Option<i32> {
    +    iter.into_par_iter()
    +        .map(|i| i.checked_mul(i))            // square each item,
    +        .try_reduce(|| 0, i32::checked_add)   // and add them up!
    +}
    +assert_eq!(sum_squares(0..5), Some(0 + 1 + 4 + 9 + 16));
    +
    +// The sum might overflow
    +assert_eq!(sum_squares(0..10_000), None);
    +
    +// Or the squares might overflow before it even reaches `try_reduce`
    +assert_eq!(sum_squares(1_000_000..1_000_001), None);
    +

    fn try_reduce_with<T, OP>(self, op: OP) -> Option<Self::Item>where + OP: Fn(T, T) -> Self::Item + Sync + Send, + Self::Item: Try<Output = T>,

    Reduces the items in the iterator into one item using a fallible op.

    +

    Like reduce_with(), if the iterator is empty, None is returned; +otherwise, Some is returned. Beyond that, it behaves like +try_reduce() for handling Err/None.

    +

    For instance, with Option items, the return value may be:

    +
      +
    • None, the iterator was empty
    • +
    • Some(None), we stopped after encountering None.
    • +
    • Some(Some(x)), the entire iterator reduced to x.
    • +
    +

    With Result items, the nesting is more obvious:

    +
      +
    • None, the iterator was empty
    • +
    • Some(Err(e)), we stopped after encountering an error e.
    • +
    • Some(Ok(x)), the entire iterator reduced to x.
    • +
    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let files = ["/dev/null", "/does/not/exist"];
    +
    +// Find the biggest file
    +files.into_par_iter()
    +    .map(|path| std::fs::metadata(path).map(|m| (path, m.len())))
    +    .try_reduce_with(|a, b| {
    +        Ok(if a.1 >= b.1 { a } else { b })
    +    })
    +    .expect("Some value, since the iterator is not empty")
    +    .expect_err("not found");
    +

    fn fold<T, ID, F>(self, identity: ID, fold_op: F) -> Fold<Self, ID, F>where + F: Fn(T, Self::Item) -> T + Sync + Send, + ID: Fn() -> T + Sync + Send, + T: Send,

    Parallel fold is similar to sequential fold except that the +sequence of items may be subdivided before it is +folded. Consider a list of numbers like 22 3 77 89 46. If +you used sequential fold to add them (fold(0, |a,b| a+b), +you would wind up first adding 0 + 22, then 22 + 3, then 25 + +77, and so forth. The parallel fold works similarly except +that it first breaks up your list into sublists, and hence +instead of yielding up a single sum at the end, it yields up +multiple sums. The number of results is nondeterministic, as +is the point where the breaks occur.

    +

    So if we did the same parallel fold (fold(0, |a,b| a+b)) on +our example list, we might wind up with a sequence of two numbers, +like so:

    +
    22 3 77 89 46
    +      |     |
    +    102   135
    +
    +

    Or perhaps these three numbers:

    +
    22 3 77 89 46
    +      |  |  |
    +    102 89 46
    +
    +

    In general, Rayon will attempt to find good breaking points +that keep all of your cores busy.

    +
    Fold versus reduce
    +

    The fold() and reduce() methods each take an identity element +and a combining function, but they operate rather differently.

    +

    reduce() requires that the identity function has the same +type as the things you are iterating over, and it fully +reduces the list of items into a single item. So, for example, +imagine we are iterating over a list of bytes bytes: [128_u8, 64_u8, 64_u8]. If we used bytes.reduce(|| 0_u8, |a: u8, b: u8| a + b), we would get an overflow. This is because 0, +a, and b here are all bytes, just like the numbers in the +list (I wrote the types explicitly above, but those are the +only types you can use). To avoid the overflow, we would need +to do something like bytes.map(|b| b as u32).reduce(|| 0, |a, b| a + b), in which case our result would be 256.

    +

    In contrast, with fold(), the identity function does not +have to have the same type as the things you are iterating +over, and you potentially get back many results. So, if we +continue with the bytes example from the previous paragraph, +we could do bytes.fold(|| 0_u32, |a, b| a + (b as u32)) to +convert our bytes into u32. And of course we might not get +back a single sum.

    +

    There is a more subtle distinction as well, though it’s +actually implied by the above points. When you use reduce(), +your reduction function is sometimes called with values that +were never part of your original parallel iterator (for +example, both the left and right might be a partial sum). With +fold(), in contrast, the left value in the fold function is +always the accumulator, and the right value is always from +your original sequence.

    +
    Fold vs Map/Reduce
    +

    Fold makes sense if you have some operation where it is +cheaper to create groups of elements at a time. For example, +imagine collecting characters into a string. If you were going +to use map/reduce, you might try this:

    + +
    use rayon::prelude::*;
    +
    +let s =
    +    ['a', 'b', 'c', 'd', 'e']
    +    .par_iter()
    +    .map(|c: &char| format!("{}", c))
    +    .reduce(|| String::new(),
    +            |mut a: String, b: String| { a.push_str(&b); a });
    +
    +assert_eq!(s, "abcde");
    +

    Because reduce produces the same type of element as its input, +you have to first map each character into a string, and then +you can reduce them. This means we create one string per +element in our iterator – not so great. Using fold, we can +do this instead:

    + +
    use rayon::prelude::*;
    +
    +let s =
    +    ['a', 'b', 'c', 'd', 'e']
    +    .par_iter()
    +    .fold(|| String::new(),
    +            |mut s: String, c: &char| { s.push(*c); s })
    +    .reduce(|| String::new(),
    +            |mut a: String, b: String| { a.push_str(&b); a });
    +
    +assert_eq!(s, "abcde");
    +

    Now fold will process groups of our characters at a time, +and we only make one string per group. We should wind up with +some small-ish number of strings roughly proportional to the +number of CPUs you have (it will ultimately depend on how busy +your processors are). Note that we still need to do a reduce +afterwards to combine those groups of strings into a single +string.

    +

    You could use a similar trick to save partial results (e.g., a +cache) or something similar.

    +
    Combining fold with other operations
    +

    You can combine fold with reduce if you want to produce a +single value. This is then roughly equivalent to a map/reduce +combination in effect:

    + +
    use rayon::prelude::*;
    +
    +let bytes = 0..22_u8;
    +let sum = bytes.into_par_iter()
    +               .fold(|| 0_u32, |a: u32, b: u8| a + (b as u32))
    +               .sum::<u32>();
    +
    +assert_eq!(sum, (0..22).sum()); // compare to sequential
    +

    fn fold_with<F, T>(self, init: T, fold_op: F) -> FoldWith<Self, T, F>where + F: Fn(T, Self::Item) -> T + Sync + Send, + T: Send + Clone,

    Applies fold_op to the given init value with each item of this +iterator, finally producing the value for further use.

    +

    This works essentially like fold(|| init.clone(), fold_op), except +it doesn’t require the init type to be Sync, nor any other form +of added synchronization.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let bytes = 0..22_u8;
    +let sum = bytes.into_par_iter()
    +               .fold_with(0_u32, |a: u32, b: u8| a + (b as u32))
    +               .sum::<u32>();
    +
    +assert_eq!(sum, (0..22).sum()); // compare to sequential
    +

    fn try_fold<T, R, ID, F>( + self, + identity: ID, + fold_op: F +) -> TryFold<Self, R, ID, F>where + F: Fn(T, Self::Item) -> R + Sync + Send, + ID: Fn() -> T + Sync + Send, + R: Try<Output = T> + Send,

    Performs a fallible parallel fold.

    +

    This is a variation of fold() for operations which can fail with +Option::None or Result::Err. The first such failure stops +processing the local set of items, without affecting other folds in the +iterator’s subdivisions.

    +

    Often, try_fold() will be followed by try_reduce() +for a final reduction and global short-circuiting effect.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let bytes = 0..22_u8;
    +let sum = bytes.into_par_iter()
    +               .try_fold(|| 0_u32, |a: u32, b: u8| a.checked_add(b as u32))
    +               .try_reduce(|| 0, u32::checked_add);
    +
    +assert_eq!(sum, Some((0..22).sum())); // compare to sequential
    +

    fn try_fold_with<F, T, R>(self, init: T, fold_op: F) -> TryFoldWith<Self, R, F>where + F: Fn(T, Self::Item) -> R + Sync + Send, + R: Try<Output = T> + Send, + T: Clone + Send,

    Performs a fallible parallel fold with a cloneable init value.

    +

    This combines the init semantics of fold_with() and the failure +semantics of try_fold().

    + +
    use rayon::prelude::*;
    +
    +let bytes = 0..22_u8;
    +let sum = bytes.into_par_iter()
    +               .try_fold_with(0_u32, |a: u32, b: u8| a.checked_add(b as u32))
    +               .try_reduce(|| 0, u32::checked_add);
    +
    +assert_eq!(sum, Some((0..22).sum())); // compare to sequential
    +

    fn sum<S>(self) -> Swhere + S: Send + Sum<Self::Item> + Sum<S>,

    Sums up the items in the iterator.

    +

    Note that the order in items will be reduced is not specified, +so if the + operator is not truly associative (as is the +case for floating point numbers), then the results are not +fully deterministic.

    +

    Basically equivalent to self.reduce(|| 0, |a, b| a + b), +except that the type of 0 and the + operation may vary +depending on the type of value being produced.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 5, 7];
    +
    +let sum: i32 = a.par_iter().sum();
    +
    +assert_eq!(sum, 13);
    +

    fn product<P>(self) -> Pwhere + P: Send + Product<Self::Item> + Product<P>,

    Multiplies all the items in the iterator.

    +

    Note that the order in items will be reduced is not specified, +so if the * operator is not truly associative (as is the +case for floating point numbers), then the results are not +fully deterministic.

    +

    Basically equivalent to self.reduce(|| 1, |a, b| a * b), +except that the type of 1 and the * operation may vary +depending on the type of value being produced.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +fn factorial(n: u32) -> u32 {
    +   (1..n+1).into_par_iter().product()
    +}
    +
    +assert_eq!(factorial(0), 1);
    +assert_eq!(factorial(1), 1);
    +assert_eq!(factorial(5), 120);
    +

    fn min(self) -> Option<Self::Item>where + Self::Item: Ord,

    Computes the minimum of all the items in the iterator. If the +iterator is empty, None is returned; otherwise, Some(min) +is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the Ord impl is not truly associative, then +the results are not deterministic.

    +

    Basically equivalent to self.reduce_with(|a, b| cmp::min(a, b)).

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [45, 74, 32];
    +
    +assert_eq!(a.par_iter().min(), Some(&32));
    +
    +let b: [i32; 0] = [];
    +
    +assert_eq!(b.par_iter().min(), None);
    +

    fn min_by<F>(self, f: F) -> Option<Self::Item>where + F: Sync + Send + Fn(&Self::Item, &Self::Item) -> Ordering,

    Computes the minimum of all the items in the iterator with respect to +the given comparison function. If the iterator is empty, None is +returned; otherwise, Some(min) is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the comparison function is not associative, then +the results are not deterministic.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [-3_i32, 77, 53, 240, -1];
    +
    +assert_eq!(a.par_iter().min_by(|x, y| x.cmp(y)), Some(&-3));
    +

    fn min_by_key<K, F>(self, f: F) -> Option<Self::Item>where + K: Ord + Send, + F: Sync + Send + Fn(&Self::Item) -> K,

    Computes the item that yields the minimum value for the given +function. If the iterator is empty, None is returned; +otherwise, Some(item) is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the Ord impl is not truly associative, then +the results are not deterministic.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [-3_i32, 34, 2, 5, -10, -3, -23];
    +
    +assert_eq!(a.par_iter().min_by_key(|x| x.abs()), Some(&2));
    +

    fn max(self) -> Option<Self::Item>where + Self::Item: Ord,

    Computes the maximum of all the items in the iterator. If the +iterator is empty, None is returned; otherwise, Some(max) +is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the Ord impl is not truly associative, then +the results are not deterministic.

    +

    Basically equivalent to self.reduce_with(|a, b| cmp::max(a, b)).

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [45, 74, 32];
    +
    +assert_eq!(a.par_iter().max(), Some(&74));
    +
    +let b: [i32; 0] = [];
    +
    +assert_eq!(b.par_iter().max(), None);
    +

    fn max_by<F>(self, f: F) -> Option<Self::Item>where + F: Sync + Send + Fn(&Self::Item, &Self::Item) -> Ordering,

    Computes the maximum of all the items in the iterator with respect to +the given comparison function. If the iterator is empty, None is +returned; otherwise, Some(max) is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the comparison function is not associative, then +the results are not deterministic.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [-3_i32, 77, 53, 240, -1];
    +
    +assert_eq!(a.par_iter().max_by(|x, y| x.abs().cmp(&y.abs())), Some(&240));
    +

    fn max_by_key<K, F>(self, f: F) -> Option<Self::Item>where + K: Ord + Send, + F: Sync + Send + Fn(&Self::Item) -> K,

    Computes the item that yields the maximum value for the given +function. If the iterator is empty, None is returned; +otherwise, Some(item) is returned.

    +

    Note that the order in which the items will be reduced is not +specified, so if the Ord impl is not truly associative, then +the results are not deterministic.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [-3_i32, 34, 2, 5, -10, -3, -23];
    +
    +assert_eq!(a.par_iter().max_by_key(|x| x.abs()), Some(&34));
    +

    fn chain<C>(self, chain: C) -> Chain<Self, <C as IntoParallelIterator>::Iter>where + C: IntoParallelIterator<Item = Self::Item>,

    Takes two iterators and creates a new iterator over both.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [0, 1, 2];
    +let b = [9, 8, 7];
    +
    +let par_iter = a.par_iter().chain(b.par_iter());
    +
    +let chained: Vec<_> = par_iter.cloned().collect();
    +
    +assert_eq!(&chained[..], &[0, 1, 2, 9, 8, 7]);
    +

    fn find_any<P>(self, predicate: P) -> Option<Self::Item>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Searches for some item in the parallel iterator that +matches the given predicate and returns it. This operation +is similar to find on sequential iterators but +the item returned may not be the first one in the parallel +sequence which matches, since we search the entire sequence in parallel.

    +

    Once a match is found, we will attempt to stop processing +the rest of the items in the iterator as soon as possible +(just as find stops iterating once a match is found).

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +assert_eq!(a.par_iter().find_any(|&&x| x == 3), Some(&3));
    +
    +assert_eq!(a.par_iter().find_any(|&&x| x == 100), None);
    +

    fn find_first<P>(self, predicate: P) -> Option<Self::Item>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Searches for the sequentially first item in the parallel iterator +that matches the given predicate and returns it.

    +

    Once a match is found, all attempts to the right of the match +will be stopped, while attempts to the left must continue in case +an earlier match is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “first” may be nebulous. If you +just want the first match that discovered anywhere in the iterator, +find_any is a better choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +assert_eq!(a.par_iter().find_first(|&&x| x == 3), Some(&3));
    +
    +assert_eq!(a.par_iter().find_first(|&&x| x == 100), None);
    +

    fn find_last<P>(self, predicate: P) -> Option<Self::Item>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Searches for the sequentially last item in the parallel iterator +that matches the given predicate and returns it.

    +

    Once a match is found, all attempts to the left of the match +will be stopped, while attempts to the right must continue in case +a later match is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “last” may be nebulous. When the +order doesn’t actually matter to you, find_any is a better choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [1, 2, 3, 3];
    +
    +assert_eq!(a.par_iter().find_last(|&&x| x == 3), Some(&3));
    +
    +assert_eq!(a.par_iter().find_last(|&&x| x == 100), None);
    +

    fn find_map_any<P, R>(self, predicate: P) -> Option<R>where + P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send,

    Applies the given predicate to the items in the parallel iterator +and returns any non-None result of the map operation.

    +

    Once a non-None value is produced from the map operation, we will +attempt to stop processing the rest of the items in the iterator +as soon as possible.

    +

    Note that this method only returns some item in the parallel +iterator that is not None from the map predicate. The item returned +may not be the first non-None value produced in the parallel +sequence, since the entire sequence is mapped over in parallel.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let c = ["lol", "NaN", "5", "5"];
    +
    +let found_number = c.par_iter().find_map_any(|s| s.parse().ok());
    +
    +assert_eq!(found_number, Some(5));
    +

    fn find_map_first<P, R>(self, predicate: P) -> Option<R>where + P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send,

    Applies the given predicate to the items in the parallel iterator and +returns the sequentially first non-None result of the map operation.

    +

    Once a non-None value is produced from the map operation, all attempts +to the right of the match will be stopped, while attempts to the left +must continue in case an earlier match is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “first” may be nebulous. If you +just want the first non-None value discovered anywhere in the iterator, +find_map_any is a better choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let c = ["lol", "NaN", "2", "5"];
    +
    +let first_number = c.par_iter().find_map_first(|s| s.parse().ok());
    +
    +assert_eq!(first_number, Some(2));
    +

    fn find_map_last<P, R>(self, predicate: P) -> Option<R>where + P: Fn(Self::Item) -> Option<R> + Sync + Send, + R: Send,

    Applies the given predicate to the items in the parallel iterator and +returns the sequentially last non-None result of the map operation.

    +

    Once a non-None value is produced from the map operation, all attempts +to the left of the match will be stopped, while attempts to the right +must continue in case a later match is found.

    +

    Note that not all parallel iterators have a useful order, much like +sequential HashMap iteration, so “first” may be nebulous. If you +just want the first non-None value discovered anywhere in the iterator, +find_map_any is a better choice.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let c = ["lol", "NaN", "2", "5"];
    +
    +let last_number = c.par_iter().find_map_last(|s| s.parse().ok());
    +
    +assert_eq!(last_number, Some(5));
    +

    fn any<P>(self, predicate: P) -> boolwhere + P: Fn(Self::Item) -> bool + Sync + Send,

    Searches for some item in the parallel iterator that +matches the given predicate, and if so returns true. Once +a match is found, we’ll attempt to stop process the rest +of the items. Proving that there’s no match, returning false, +does require visiting every item.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [0, 12, 3, 4, 0, 23, 0];
    +
    +let is_valid = a.par_iter().any(|&x| x > 10);
    +
    +assert!(is_valid);
    +

    fn all<P>(self, predicate: P) -> boolwhere + P: Fn(Self::Item) -> bool + Sync + Send,

    Tests that every item in the parallel iterator matches the given +predicate, and if so returns true. If a counter-example is found, +we’ll attempt to stop processing more items, then return false.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [0, 12, 3, 4, 0, 23, 0];
    +
    +let is_valid = a.par_iter().all(|&x| x > 10);
    +
    +assert!(!is_valid);
    +

    fn while_some<T>(self) -> WhileSome<Self>where + Self: ParallelIterator<Item = Option<T>>, + T: Send,

    Creates an iterator over the Some items of this iterator, halting +as soon as any None is found.

    +
    Examples
    +
    use rayon::prelude::*;
    +use std::sync::atomic::{AtomicUsize, Ordering};
    +
    +let counter = AtomicUsize::new(0);
    +let value = (0_i32..2048)
    +    .into_par_iter()
    +    .map(|x| {
    +             counter.fetch_add(1, Ordering::SeqCst);
    +             if x < 1024 { Some(x) } else { None }
    +         })
    +    .while_some()
    +    .max();
    +
    +assert!(value < Some(1024));
    +assert!(counter.load(Ordering::SeqCst) < 2048); // should not have visited every single one
    +

    fn panic_fuse(self) -> PanicFuse<Self>

    Wraps an iterator with a fuse in case of panics, to halt all threads +as soon as possible.

    +

    Panics within parallel iterators are always propagated to the caller, +but they don’t always halt the rest of the iterator right away, due to +the internal semantics of join. This adaptor makes a greater effort +to stop processing other items sooner, with the cost of additional +synchronization overhead, which may also inhibit some optimizations.

    +
    Examples
    +

    If this code didn’t use panic_fuse(), it would continue processing +many more items in other threads (with long sleep delays) before the +panic is finally propagated.

    + +
    use rayon::prelude::*;
    +use std::{thread, time};
    +
    +(0..1_000_000)
    +    .into_par_iter()
    +    .panic_fuse()
    +    .for_each(|i| {
    +        // simulate some work
    +        thread::sleep(time::Duration::from_secs(1));
    +        assert!(i > 0); // oops!
    +    });
    +

    fn collect<C>(self) -> Cwhere + C: FromParallelIterator<Self::Item>,

    Creates a fresh collection containing all the elements produced +by this parallel iterator.

    +

    You may prefer collect_into_vec() implemented on +IndexedParallelIterator, if your underlying iterator also implements +it. collect_into_vec() allocates efficiently with precise knowledge +of how many elements the iterator contains, and even allows you to reuse +an existing vector’s backing store rather than allocating a fresh vector.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let sync_vec: Vec<_> = (0..100).into_iter().collect();
    +
    +let async_vec: Vec<_> = (0..100).into_par_iter().collect();
    +
    +assert_eq!(sync_vec, async_vec);
    +

    You can collect a pair of collections like unzip +for paired items:

    + +
    use rayon::prelude::*;
    +
    +let a = [(0, 1), (1, 2), (2, 3), (3, 4)];
    +let (first, second): (Vec<_>, Vec<_>) = a.into_par_iter().collect();
    +
    +assert_eq!(first, [0, 1, 2, 3]);
    +assert_eq!(second, [1, 2, 3, 4]);
    +

    Or like partition_map for Either items:

    + +
    use rayon::prelude::*;
    +use rayon::iter::Either;
    +
    +let (left, right): (Vec<_>, Vec<_>) = (0..8).into_par_iter().map(|x| {
    +    if x % 2 == 0 {
    +        Either::Left(x * 4)
    +    } else {
    +        Either::Right(x * 3)
    +    }
    +}).collect();
    +
    +assert_eq!(left, [0, 8, 16, 24]);
    +assert_eq!(right, [3, 9, 15, 21]);
    +

    You can even collect an arbitrarily-nested combination of pairs and Either:

    + +
    use rayon::prelude::*;
    +use rayon::iter::Either;
    +
    +let (first, (left, right)): (Vec<_>, (Vec<_>, Vec<_>))
    +    = (0..8).into_par_iter().map(|x| {
    +        if x % 2 == 0 {
    +            (x, Either::Left(x * 4))
    +        } else {
    +            (-x, Either::Right(x * 3))
    +        }
    +    }).collect();
    +
    +assert_eq!(first, [0, -1, 2, -3, 4, -5, 6, -7]);
    +assert_eq!(left, [0, 8, 16, 24]);
    +assert_eq!(right, [3, 9, 15, 21]);
    +

    All of that can also be combined with short-circuiting collection of +Result or Option types:

    + +
    use rayon::prelude::*;
    +use rayon::iter::Either;
    +
    +let result: Result<(Vec<_>, (Vec<_>, Vec<_>)), _>
    +    = (0..8).into_par_iter().map(|x| {
    +        if x > 5 {
    +            Err(x)
    +        } else if x % 2 == 0 {
    +            Ok((x, Either::Left(x * 4)))
    +        } else {
    +            Ok((-x, Either::Right(x * 3)))
    +        }
    +    }).collect();
    +
    +let error = result.unwrap_err();
    +assert!(error == 6 || error == 7);
    +

    fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)where + Self: ParallelIterator<Item = (A, B)>, + FromA: Default + Send + ParallelExtend<A>, + FromB: Default + Send + ParallelExtend<B>, + A: Send, + B: Send,

    Unzips the items of a parallel iterator into a pair of arbitrary +ParallelExtend containers.

    +

    You may prefer to use unzip_into_vecs(), which allocates more +efficiently with precise knowledge of how many elements the +iterator contains, and even allows you to reuse existing +vectors’ backing stores rather than allocating fresh vectors.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let a = [(0, 1), (1, 2), (2, 3), (3, 4)];
    +
    +let (left, right): (Vec<_>, Vec<_>) = a.par_iter().cloned().unzip();
    +
    +assert_eq!(left, [0, 1, 2, 3]);
    +assert_eq!(right, [1, 2, 3, 4]);
    +

    Nested pairs can be unzipped too.

    + +
    use rayon::prelude::*;
    +
    +let (values, (squares, cubes)): (Vec<_>, (Vec<_>, Vec<_>)) = (0..4).into_par_iter()
    +    .map(|i| (i, (i * i, i * i * i)))
    +    .unzip();
    +
    +assert_eq!(values, [0, 1, 2, 3]);
    +assert_eq!(squares, [0, 1, 4, 9]);
    +assert_eq!(cubes, [0, 1, 8, 27]);
    +

    fn partition<A, B, P>(self, predicate: P) -> (A, B)where + A: Default + Send + ParallelExtend<Self::Item>, + B: Default + Send + ParallelExtend<Self::Item>, + P: Fn(&Self::Item) -> bool + Sync + Send,

    Partitions the items of a parallel iterator into a pair of arbitrary +ParallelExtend containers. Items for which the predicate returns +true go into the first container, and the rest go into the second.

    +

    Note: unlike the standard Iterator::partition, this allows distinct +collection types for the left and right items. This is more flexible, +but may require new type annotations when converting sequential code +that used type inference assuming the two were the same.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let (left, right): (Vec<_>, Vec<_>) = (0..8).into_par_iter().partition(|x| x % 2 == 0);
    +
    +assert_eq!(left, [0, 2, 4, 6]);
    +assert_eq!(right, [1, 3, 5, 7]);
    +

    fn partition_map<A, B, P, L, R>(self, predicate: P) -> (A, B)where + A: Default + Send + ParallelExtend<L>, + B: Default + Send + ParallelExtend<R>, + P: Fn(Self::Item) -> Either<L, R> + Sync + Send, + L: Send, + R: Send,

    Partitions and maps the items of a parallel iterator into a pair of +arbitrary ParallelExtend containers. Either::Left items go into +the first container, and Either::Right items go into the second.

    +
    Examples
    +
    use rayon::prelude::*;
    +use rayon::iter::Either;
    +
    +let (left, right): (Vec<_>, Vec<_>) = (0..8).into_par_iter()
    +    .partition_map(|x| {
    +        if x % 2 == 0 {
    +            Either::Left(x * 4)
    +        } else {
    +            Either::Right(x * 3)
    +        }
    +    });
    +
    +assert_eq!(left, [0, 8, 16, 24]);
    +assert_eq!(right, [3, 9, 15, 21]);
    +

    Nested Either enums can be split as well.

    + +
    use rayon::prelude::*;
    +use rayon::iter::Either::*;
    +
    +let ((fizzbuzz, fizz), (buzz, other)): ((Vec<_>, Vec<_>), (Vec<_>, Vec<_>)) = (1..20)
    +    .into_par_iter()
    +    .partition_map(|x| match (x % 3, x % 5) {
    +        (0, 0) => Left(Left(x)),
    +        (0, _) => Left(Right(x)),
    +        (_, 0) => Right(Left(x)),
    +        (_, _) => Right(Right(x)),
    +    });
    +
    +assert_eq!(fizzbuzz, [15]);
    +assert_eq!(fizz, [3, 6, 9, 12, 18]);
    +assert_eq!(buzz, [5, 10]);
    +assert_eq!(other, [1, 2, 4, 7, 8, 11, 13, 14, 16, 17, 19]);
    +

    fn intersperse(self, element: Self::Item) -> Intersperse<Self>where + Self::Item: Clone,

    Intersperses clones of an element between items of this iterator.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let x = vec![1, 2, 3];
    +let r: Vec<_> = x.into_par_iter().intersperse(-1).collect();
    +
    +assert_eq!(r, vec![1, -1, 2, -1, 3]);
    +

    fn take_any(self, n: usize) -> TakeAny<Self>

    Creates an iterator that yields n elements from anywhere in the original iterator.

    +

    This is similar to IndexedParallelIterator::take without being +constrained to the “first” n of the original iterator order. The +taken items will still maintain their relative order where that is +visible in collect, reduce, and similar outputs.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .filter(|&x| x % 2 == 0)
    +    .take_any(5)
    +    .collect();
    +
    +assert_eq!(result.len(), 5);
    +assert!(result.windows(2).all(|w| w[0] < w[1]));
    +

    fn skip_any(self, n: usize) -> SkipAny<Self>

    Creates an iterator that skips n elements from anywhere in the original iterator.

    +

    This is similar to IndexedParallelIterator::skip without being +constrained to the “first” n of the original iterator order. The +remaining items will still maintain their relative order where that is +visible in collect, reduce, and similar outputs.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .filter(|&x| x % 2 == 0)
    +    .skip_any(5)
    +    .collect();
    +
    +assert_eq!(result.len(), 45);
    +assert!(result.windows(2).all(|w| w[0] < w[1]));
    +

    fn take_any_while<P>(self, predicate: P) -> TakeAnyWhile<Self, P>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Creates an iterator that takes elements from anywhere in the original iterator +until the given predicate returns false.

    +

    The predicate may be anything – e.g. it could be checking a fact about the item, a +global condition unrelated to the item itself, or some combination thereof.

    +

    If parallel calls to the predicate race and give different results, then the +true results will still take those particular items, while respecting the false +result from elsewhere to skip any further items.

    +

    This is similar to Iterator::take_while without being constrained to the original +iterator order. The taken items will still maintain their relative order where that is +visible in collect, reduce, and similar outputs.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .take_any_while(|x| *x < 50)
    +    .collect();
    +
    +assert!(result.len() <= 50);
    +assert!(result.windows(2).all(|w| w[0] < w[1]));
    + +
    use rayon::prelude::*;
    +use std::sync::atomic::AtomicUsize;
    +use std::sync::atomic::Ordering::Relaxed;
    +
    +// Collect any group of items that sum <= 1000
    +let quota = AtomicUsize::new(1000);
    +let result: Vec<_> = (0_usize..100)
    +    .into_par_iter()
    +    .take_any_while(|&x| {
    +        quota.fetch_update(Relaxed, Relaxed, |q| q.checked_sub(x))
    +            .is_ok()
    +    })
    +    .collect();
    +
    +let sum = result.iter().sum::<usize>();
    +assert!(matches!(sum, 902..=1000));
    +

    fn skip_any_while<P>(self, predicate: P) -> SkipAnyWhile<Self, P>where + P: Fn(&Self::Item) -> bool + Sync + Send,

    Creates an iterator that skips elements from anywhere in the original iterator +until the given predicate returns false.

    +

    The predicate may be anything – e.g. it could be checking a fact about the item, a +global condition unrelated to the item itself, or some combination thereof.

    +

    If parallel calls to the predicate race and give different results, then the +true results will still skip those particular items, while respecting the false +result from elsewhere to skip any further items.

    +

    This is similar to Iterator::skip_while without being constrained to the original +iterator order. The remaining items will still maintain their relative order where that is +visible in collect, reduce, and similar outputs.

    +
    Examples
    +
    use rayon::prelude::*;
    +
    +let result: Vec<_> = (0..100)
    +    .into_par_iter()
    +    .skip_any_while(|x| *x < 50)
    +    .collect();
    +
    +assert!(result.len() >= 50);
    +assert!(result.windows(2).all(|w| w[0] < w[1]));
    +

    fn opt_len(&self) -> Option<usize>

    Internal method used to define the behavior of this parallel +iterator. You should not need to call this directly.

    +

    Returns the number of items produced by this iterator, if known +statically. This can be used by consumers to trigger special fast +paths. Therefore, if Some(_) is returned, this iterator must only +use the (indexed) Consumer methods when driving a consumer, such +as split_at(). Calling UnindexedConsumer::split_off_left() or +other UnindexedConsumer methods – or returning an inaccurate +value – may result in panics.

    +

    This method is currently used to optimize collect for want +of true Rust specialization; it may be removed when +specialization is stable.

    +

    Implementations on Foreign Types§

    §

    impl<L, R> ParallelIterator for Either<L, R>where + L: ParallelIterator, + R: ParallelIterator<Item = <L as ParallelIterator>::Item>,

    Either<L, R> is a parallel iterator if both L and R are parallel iterators.

    +
    §

    type Item = <L as ParallelIterator>::Item

    §

    fn drive_unindexed<C>( + self, + consumer: C +) -> <C as Consumer<<Either<L, R> as ParallelIterator>::Item>>::Resultwhere + C: UnindexedConsumer<<Either<L, R> as ParallelIterator>::Item>,

    §

    fn opt_len(&self) -> Option<usize>

    Implementors§

    §

    impl ParallelIterator for Iter<char>

    §

    type Item = char

    §

    impl ParallelIterator for Iter<char>

    §

    type Item = char

    §

    impl<'a> ParallelIterator for Drain<'a>

    §

    type Item = char

    §

    impl<'a, K, V> ParallelIterator for Iter<'a, K, V>where + K: Ord + Sync + 'a, + V: Sync + 'a,

    §

    type Item = (&'a K, &'a V)

    §

    impl<'a, K, V> ParallelIterator for Iter<'a, K, V>where + K: Hash + Eq + Sync + 'a, + V: Sync + 'a,

    §

    type Item = (&'a K, &'a V)

    §

    impl<'a, K, V> ParallelIterator for IterMut<'a, K, V>where + K: Ord + Sync + 'a, + V: Send + 'a,

    §

    impl<'a, K, V> ParallelIterator for IterMut<'a, K, V>where + K: Hash + Eq + Sync + 'a, + V: Send + 'a,

    §

    impl<'a, T> ParallelIterator for Drain<'a, T>where + T: Ord + Send,

    §

    type Item = T

    §

    impl<'a, T> ParallelIterator for Drain<'a, T>where + T: Send,

    §

    type Item = T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Ord + Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Ord + Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Hash + Eq + Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for Iter<'a, T>where + T: Sync + 'a,

    §

    type Item = &'a T

    §

    impl<'a, T> ParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T> ParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T> ParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T> ParallelIterator for IterMut<'a, T>where + T: Send + 'a,

    §

    impl<'a, T, I> ParallelIterator for Cloned<I>where + I: ParallelIterator<Item = &'a T>, + T: 'a + Clone + Send + Sync,

    §

    type Item = T

    §

    impl<'a, T, I> ParallelIterator for Copied<I>where + I: ParallelIterator<Item = &'a T>, + T: 'a + Copy + Send + Sync,

    §

    type Item = T

    §

    impl<'ch> ParallelIterator for Bytes<'ch>

    §

    type Item = u8

    §

    impl<'ch> ParallelIterator for CharIndices<'ch>

    §

    type Item = (usize, char)

    §

    impl<'ch> ParallelIterator for Chars<'ch>

    §

    type Item = char

    §

    impl<'ch> ParallelIterator for EncodeUtf16<'ch>

    §

    type Item = u16

    §

    impl<'ch> ParallelIterator for Lines<'ch>

    §

    type Item = &'ch str

    §

    impl<'ch> ParallelIterator for SplitWhitespace<'ch>

    §

    type Item = &'ch str

    §

    impl<'ch, P> ParallelIterator for MatchIndices<'ch, P>where + P: Pattern,

    §

    type Item = (usize, &'ch str)

    §

    impl<'ch, P> ParallelIterator for Matches<'ch, P>where + P: Pattern,

    §

    type Item = &'ch str

    §

    impl<'ch, P> ParallelIterator for Split<'ch, P>where + P: Pattern,

    §

    type Item = &'ch str

    §

    impl<'ch, P> ParallelIterator for SplitTerminator<'ch, P>where + P: Pattern,

    §

    type Item = &'ch str

    §

    impl<'data, T> ParallelIterator for Chunks<'data, T>where + T: Sync + 'data,

    §

    type Item = &'data [T]

    §

    impl<'data, T> ParallelIterator for ChunksExact<'data, T>where + T: Sync + 'data,

    §

    type Item = &'data [T]

    §

    impl<'data, T> ParallelIterator for ChunksExactMut<'data, T>where + T: Send + 'data,

    §

    type Item = &'data mut [T]

    §

    impl<'data, T> ParallelIterator for ChunksMut<'data, T>where + T: Send + 'data,

    §

    type Item = &'data mut [T]

    §

    impl<'data, T> ParallelIterator for Drain<'data, T>where + T: Send,

    §

    type Item = T

    §

    impl<'data, T> ParallelIterator for Iter<'data, T>where + T: Sync + 'data,

    §

    impl<'data, T> ParallelIterator for IterMut<'data, T>where + T: Send + 'data,

    §

    impl<'data, T> ParallelIterator for RChunks<'data, T>where + T: Sync + 'data,

    §

    type Item = &'data [T]

    §

    impl<'data, T> ParallelIterator for RChunksExact<'data, T>where + T: Sync + 'data,

    §

    type Item = &'data [T]

    §

    impl<'data, T> ParallelIterator for RChunksExactMut<'data, T>where + T: Send + 'data,

    §

    type Item = &'data mut [T]

    §

    impl<'data, T> ParallelIterator for RChunksMut<'data, T>where + T: Send + 'data,

    §

    type Item = &'data mut [T]

    §

    impl<'data, T> ParallelIterator for Windows<'data, T>where + T: Sync + 'data,

    §

    type Item = &'data [T]

    §

    impl<'data, T, P> ParallelIterator for Split<'data, T, P>where + P: Fn(&T) -> bool + Sync + Send, + T: Sync,

    §

    type Item = &'data [T]

    §

    impl<'data, T, P> ParallelIterator for SplitMut<'data, T, P>where + P: Fn(&T) -> bool + Sync + Send, + T: Send,

    §

    type Item = &'data mut [T]

    §

    impl<A> ParallelIterator for MultiZip<(A,)>where + A: IndexedParallelIterator,

    §

    type Item = (<A as ParallelIterator>::Item,)

    §

    impl<A, B> ParallelIterator for Chain<A, B>where + A: ParallelIterator, + B: ParallelIterator<Item = <A as ParallelIterator>::Item>,

    §

    impl<A, B> ParallelIterator for MultiZip<(A, B)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B> ParallelIterator for Zip<A, B>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B> ParallelIterator for ZipEq<A, B>where + A: IndexedParallelIterator, + B: IndexedParallelIterator,

    §

    impl<A, B, C> ParallelIterator for MultiZip<(A, B, C)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator,

    §

    impl<A, B, C, D> ParallelIterator for MultiZip<(A, B, C, D)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator,

    §

    impl<A, B, C, D, E> ParallelIterator for MultiZip<(A, B, C, D, E)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F> ParallelIterator for MultiZip<(A, B, C, D, E, F)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G> ParallelIterator for MultiZip<(A, B, C, D, E, F, G)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H> ParallelIterator for MultiZip<(A, B, C, D, E, F, G, H)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I> ParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J> ParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J, K> ParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J, K)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator, + K: IndexedParallelIterator,

    §

    impl<A, B, C, D, E, F, G, H, I, J, K, L> ParallelIterator for MultiZip<(A, B, C, D, E, F, G, H, I, J, K, L)>where + A: IndexedParallelIterator, + B: IndexedParallelIterator, + C: IndexedParallelIterator, + D: IndexedParallelIterator, + E: IndexedParallelIterator, + F: IndexedParallelIterator, + G: IndexedParallelIterator, + H: IndexedParallelIterator, + I: IndexedParallelIterator, + J: IndexedParallelIterator, + K: IndexedParallelIterator, + L: IndexedParallelIterator,

    §

    impl<D, S> ParallelIterator for Split<D, S>where + D: Send, + S: Fn(D) -> (D, Option<D>) + Sync + Send,

    §

    type Item = D

    §

    impl<I> ParallelIterator for Chunks<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for Enumerate<I>where + I: IndexedParallelIterator,

    §

    type Item = (usize, <I as ParallelIterator>::Item)

    §

    impl<I> ParallelIterator for Flatten<I>where + I: ParallelIterator, + <I as ParallelIterator>::Item: IntoParallelIterator,

    §

    type Item = <<I as ParallelIterator>::Item as IntoParallelIterator>::Item

    §

    impl<I> ParallelIterator for FlattenIter<I>where + I: ParallelIterator, + <I as ParallelIterator>::Item: IntoIterator, + <<I as ParallelIterator>::Item as IntoIterator>::Item: Send,

    §

    impl<I> ParallelIterator for Intersperse<I>where + I: ParallelIterator, + <I as ParallelIterator>::Item: Clone + Send,

    §

    impl<I> ParallelIterator for MaxLen<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for MinLen<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for PanicFuse<I>where + I: ParallelIterator,

    §

    impl<I> ParallelIterator for Rev<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for Skip<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for SkipAny<I>where + I: ParallelIterator,

    §

    impl<I> ParallelIterator for StepBy<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for Take<I>where + I: IndexedParallelIterator,

    §

    impl<I> ParallelIterator for TakeAny<I>where + I: ParallelIterator,

    §

    impl<I, F> ParallelIterator for Inspect<I, F>where + I: ParallelIterator, + F: Fn(&<I as ParallelIterator>::Item) + Sync + Send,

    §

    impl<I, F> ParallelIterator for Update<I, F>where + I: ParallelIterator, + F: Fn(&mut <I as ParallelIterator>::Item) + Send + Sync,

    §

    impl<I, F, PI> ParallelIterator for FlatMap<I, F>where + I: ParallelIterator, + F: Fn(<I as ParallelIterator>::Item) -> PI + Sync + Send, + PI: IntoParallelIterator,

    §

    type Item = <PI as IntoParallelIterator>::Item

    §

    impl<I, F, R> ParallelIterator for Map<I, F>where + I: ParallelIterator, + F: Fn(<I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    type Item = <F as FnOnce(<I as ParallelIterator>::Item)>::Output

    §

    impl<I, F, SI> ParallelIterator for FlatMapIter<I, F>where + I: ParallelIterator, + F: Fn(<I as ParallelIterator>::Item) -> SI + Sync + Send, + SI: IntoIterator, + <SI as IntoIterator>::Item: Send,

    §

    type Item = <SI as IntoIterator>::Item

    §

    impl<I, ID, U, F> ParallelIterator for FoldChunks<I, ID, F>where + I: IndexedParallelIterator, + ID: Fn() -> U + Send + Sync, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Send + Sync, + U: Send,

    §

    type Item = U

    §

    impl<I, INIT, T, F, R> ParallelIterator for MapInit<I, INIT, F>where + I: ParallelIterator, + INIT: Fn() -> T + Sync + Send, + F: Fn(&mut T, <I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    type Item = R

    §

    impl<I, J> ParallelIterator for Interleave<I, J>where + I: IndexedParallelIterator, + J: IndexedParallelIterator<Item = <I as ParallelIterator>::Item>,

    §

    impl<I, J> ParallelIterator for InterleaveShortest<I, J>where + I: IndexedParallelIterator, + J: IndexedParallelIterator<Item = <I as ParallelIterator>::Item>,

    §

    impl<I, P> ParallelIterator for Filter<I, P>where + I: ParallelIterator, + P: Fn(&<I as ParallelIterator>::Item) -> bool + Sync + Send,

    §

    impl<I, P> ParallelIterator for Positions<I, P>where + I: IndexedParallelIterator, + P: Fn(<I as ParallelIterator>::Item) -> bool + Sync + Send,

    §

    type Item = usize

    §

    impl<I, P> ParallelIterator for SkipAnyWhile<I, P>where + I: ParallelIterator, + P: Fn(&<I as ParallelIterator>::Item) -> bool + Sync + Send,

    §

    impl<I, P> ParallelIterator for TakeAnyWhile<I, P>where + I: ParallelIterator, + P: Fn(&<I as ParallelIterator>::Item) -> bool + Sync + Send,

    §

    impl<I, P, R> ParallelIterator for FilterMap<I, P>where + I: ParallelIterator, + P: Fn(<I as ParallelIterator>::Item) -> Option<R> + Sync + Send, + R: Send,

    §

    type Item = R

    §

    impl<I, T> ParallelIterator for WhileSome<I>where + I: ParallelIterator<Item = Option<T>>, + T: Send,

    §

    type Item = T

    §

    impl<I, T, F, R> ParallelIterator for MapWith<I, T, F>where + I: ParallelIterator, + T: Send + Clone, + F: Fn(&mut T, <I as ParallelIterator>::Item) -> R + Sync + Send, + R: Send,

    §

    type Item = R

    §

    impl<I, U, F> ParallelIterator for FoldChunksWith<I, U, F>where + I: IndexedParallelIterator, + U: Send + Clone, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Send + Sync,

    §

    type Item = U

    §

    impl<Iter> ParallelIterator for IterBridge<Iter>where + Iter: Iterator + Send, + <Iter as Iterator>::Item: Send,

    §

    type Item = <Iter as Iterator>::Item

    §

    impl<K, V> ParallelIterator for Drain<'_, K, V>where + K: Hash + Eq + Send, + V: Send,

    §

    type Item = (K, V)

    §

    impl<K, V> ParallelIterator for IntoIter<K, V>where + K: Ord + Send, + V: Send,

    §

    type Item = (K, V)

    §

    impl<K, V> ParallelIterator for IntoIter<K, V>where + K: Hash + Eq + Send, + V: Send,

    §

    type Item = (K, V)

    §

    impl<T> ParallelIterator for Drain<'_, T>where + T: Hash + Eq + Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for Empty<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Ord + Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Ord + Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Hash + Eq + Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for IntoIter<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for Iter<T>where + T: RangeInteger,

    §

    type Item = T

    §

    impl<T> ParallelIterator for Iter<T>where + T: RangeInteger,

    §

    type Item = T

    §

    impl<T> ParallelIterator for Once<T>where + T: Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for Repeat<T>where + T: Clone + Send,

    §

    type Item = T

    §

    impl<T> ParallelIterator for RepeatN<T>where + T: Clone + Send,

    §

    type Item = T

    §

    impl<T, const N: usize> ParallelIterator for IntoIter<T, N>where + T: Send,

    §

    type Item = T

    §

    impl<U, I, F> ParallelIterator for FoldWith<I, U, F>where + I: ParallelIterator, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Sync + Send, + U: Send + Clone,

    §

    type Item = U

    §

    impl<U, I, F> ParallelIterator for TryFoldWith<I, U, F>where + I: ParallelIterator, + F: Fn(<U as Try>::Output, <I as ParallelIterator>::Item) -> U + Sync + Send, + U: Try + Send, + <U as Try>::Output: Clone + Send,

    §

    type Item = U

    §

    impl<U, I, ID, F> ParallelIterator for Fold<I, ID, F>where + I: ParallelIterator, + F: Fn(U, <I as ParallelIterator>::Item) -> U + Sync + Send, + ID: Fn() -> U + Sync + Send, + U: Send,

    §

    type Item = U

    §

    impl<U, I, ID, F> ParallelIterator for TryFold<I, U, ID, F>where + I: ParallelIterator, + F: Fn(<U as Try>::Output, <I as ParallelIterator>::Item) -> U + Sync + Send, + ID: Fn() -> <U as Try>::Output + Sync + Send, + U: Try + Send,

    §

    type Item = U

    \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/sidebar-items.js b/docs/maybe_rayon/concurrent/sidebar-items.js new file mode 100644 index 000000000..d10fe446a --- /dev/null +++ b/docs/maybe_rayon/concurrent/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["in_place_scope","join","scope"],"mod":["prelude"],"type":["Scope"]}; \ No newline at end of file diff --git a/docs/maybe_rayon/concurrent/type.Scope.html b/docs/maybe_rayon/concurrent/type.Scope.html new file mode 100644 index 000000000..763589c23 --- /dev/null +++ b/docs/maybe_rayon/concurrent/type.Scope.html @@ -0,0 +1,28 @@ +Scope in maybe_rayon::concurrent - Rust + + + + + + +

    Type Alias maybe_rayon::concurrent::Scope

    source ·
    pub type Scope<'scope> = Scope<'scope>;

    Aliased Type§

    struct Scope<'scope> {
    +    base: ScopeBase<'scope>,
    +}

    Fields§

    §base: ScopeBase<'scope>
    \ No newline at end of file diff --git a/docs/maybe_rayon/index.html b/docs/maybe_rayon/index.html new file mode 100644 index 000000000..23ea534be --- /dev/null +++ b/docs/maybe_rayon/index.html @@ -0,0 +1,26 @@ +maybe_rayon - Rust + + + + + + +
    \ No newline at end of file diff --git a/docs/maybe_rayon/sidebar-items.js b/docs/maybe_rayon/sidebar-items.js new file mode 100644 index 000000000..6aa285ca6 --- /dev/null +++ b/docs/maybe_rayon/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":["concurrent"]}; \ No newline at end of file diff --git a/docs/num_gens/all.html b/docs/num_gens/all.html index 2affb74f1..1a326edec 100644 --- a/docs/num_gens/all.html +++ b/docs/num_gens/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/num_gens/index.html b/docs/num_gens/index.html index d16bae2f1..8ef08972c 100644 --- a/docs/num_gens/index.html +++ b/docs/num_gens/index.html @@ -1,4 +1,4 @@ -num_gens - Rust +num_gens - Rust @@ -23,5 +23,5 @@ }); -

    Crate num_gens

    source ·
    Expand description

    This prints the number of generators in each $\Ext^{s, n + s}$ in the format n,s,num_gens.

    +

    Crate num_gens

    source ·
    Expand description

    This prints the number of generators in each $\Ext^{s, n + s}$ in the format n,s,num_gens.

    \ No newline at end of file diff --git a/docs/once/all.html b/docs/once/all.html index 1278a8052..0cb6cb14e 100644 --- a/docs/once/all.html +++ b/docs/once/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/once/constant.DATA_LAYOUT.html b/docs/once/constant.DATA_LAYOUT.html index 377e7268a..0f052606c 100644 --- a/docs/once/constant.DATA_LAYOUT.html +++ b/docs/once/constant.DATA_LAYOUT.html @@ -1,4 +1,4 @@ -DATA_LAYOUT in once - Rust +DATA_LAYOUT in once - Rust @@ -23,4 +23,4 @@ }); -

    Constant once::DATA_LAYOUT

    source ·
    pub const DATA_LAYOUT: Layout;
    \ No newline at end of file +

    Constant once::DATA_LAYOUT

    source ·
    pub const DATA_LAYOUT: Layout;
    \ No newline at end of file diff --git a/docs/once/constant.MAX_OUTER_LENGTH.html b/docs/once/constant.MAX_OUTER_LENGTH.html index 4d43a1912..06ee25afc 100644 --- a/docs/once/constant.MAX_OUTER_LENGTH.html +++ b/docs/once/constant.MAX_OUTER_LENGTH.html @@ -1,4 +1,4 @@ -MAX_OUTER_LENGTH in once - Rust +MAX_OUTER_LENGTH in once - Rust @@ -23,6 +23,6 @@ }); -

    Constant once::MAX_OUTER_LENGTH

    source ·
    pub(crate) const MAX_OUTER_LENGTH: usize = 32;
    Expand description

    The maximum length of a OnceVec is 2^{MAX_OUTER_LENGTH} - 1. The performance cost of increasing +

    Constant once::MAX_OUTER_LENGTH

    source ·
    pub(crate) const MAX_OUTER_LENGTH: usize = 32;
    Expand description

    The maximum length of a OnceVec is 2^{MAX_OUTER_LENGTH} - 1. The performance cost of increasing MAX_OUTER_LENGTH is relatively small, so we picked an arbitrary number.

    \ No newline at end of file diff --git a/docs/once/constant.USIZE_LEN.html b/docs/once/constant.USIZE_LEN.html index a2d180b30..a33ffef58 100644 --- a/docs/once/constant.USIZE_LEN.html +++ b/docs/once/constant.USIZE_LEN.html @@ -1,4 +1,4 @@ -USIZE_LEN in once - Rust +USIZE_LEN in once - Rust @@ -23,4 +23,4 @@ }); -

    Constant once::USIZE_LEN

    source ·
    pub(crate) const USIZE_LEN: u32 = _; // 64u32
    \ No newline at end of file +

    Constant once::USIZE_LEN

    source ·
    pub(crate) const USIZE_LEN: u32 = _; // 64u32
    \ No newline at end of file diff --git a/docs/once/fn.inner_index.html b/docs/once/fn.inner_index.html index badebef68..310fde962 100644 --- a/docs/once/fn.inner_index.html +++ b/docs/once/fn.inner_index.html @@ -1,4 +1,4 @@ -inner_index in once - Rust +inner_index in once - Rust @@ -23,4 +23,4 @@ }); -

    Function once::inner_index

    source ·
    pub(crate) const fn inner_index(index: usize) -> (usize, usize)
    \ No newline at end of file +

    Function once::inner_index

    source ·
    pub(crate) const fn inner_index(index: usize) -> (usize, usize)
    \ No newline at end of file diff --git a/docs/once/index.html b/docs/once/index.html index 5180b0443..fcf4cd54c 100644 --- a/docs/once/index.html +++ b/docs/once/index.html @@ -1,4 +1,4 @@ -once - Rust +once - Rust @@ -23,7 +23,7 @@ }); -

    Crate once

    source ·

    Structs

    -
    source

    pub fn last(&self) -> Option<&T>

    source

    pub fn lock(&self) -> MutexGuard<'_, OooTracker>

    Takes a lock on the OnceBiVec. The OnceBiVec cannot be updated while the lock is held. +

    source

    pub fn last(&self) -> Option<&T>

    source

    pub fn lock(&self) -> MutexGuard<'_, OooTracker>

    Takes a lock on the OnceBiVec. The OnceBiVec cannot be updated while the lock is held. This is useful when used in conjuction with OnceBiVec::extend;

    -
    source

    pub fn iter(&self) -> impl Iterator<Item = &T>

    source

    pub fn iter_enum(&self) -> impl Iterator<Item = (i32, &T)>

    source§

    impl<T: Send + Sync> OnceBiVec<T>

    source

    pub fn par_extend(&self, new_max: i32, f: impl Fn(i32) -> T + Send + Sync)

    A parallel version of extend, where the function f is run for different indices -simultaneously using [rayon].

    +
    source

    pub fn iter(&self) -> impl Iterator<Item = &T>

    source

    pub fn iter_enum(&self) -> impl Iterator<Item = (i32, &T)>

    source§

    impl<T: Send + Sync> OnceBiVec<T>

    source

    pub fn maybe_par_extend(&self, new_max: i32, f: impl Fn(i32) -> T + Send + Sync)

    A parallel version of extend. If the concurrent feature is enabled, the function f +will be run for different indices simultaneously using [rayon].

    Example
    let v: OnceBiVec<i32> = OnceBiVec::new(-4);
    -v.par_extend(5, |i| i + 5);
    +v.maybe_par_extend(5, |i| i + 5);
     assert_eq!(v.len(), 6);
     for (i, &n) in v.iter_enum() {
         assert_eq!(n, i + 5);
     }
    -
    source

    pub fn par_iter_enum( +

    source

    pub fn maybe_par_iter_enum( &self -) -> impl ParallelIterator<Item = (i32, &T)> + IndexedParallelIterator

    Trait Implementations§

    source§

    impl<T: Clone> Clone for OnceBiVec<T>

    source§

    fn clone(&self) -> OnceBiVec<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for OnceBiVec<T>

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<T> Index<i32> for OnceBiVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, i: i32) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<i32> for OnceBiVec<T>

    source§

    fn index_mut(&mut self, i: i32) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T: PartialEq> PartialEq<OnceBiVec<T>> for OnceBiVec<T>

    source§

    fn eq(&self, other: &OnceBiVec<T>) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T: Eq> Eq for OnceBiVec<T>

    source§

    impl<T> StructuralEq for OnceBiVec<T>

    source§

    impl<T> StructuralPartialEq for OnceBiVec<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for OnceBiVec<T>where - T: RefUnwindSafe,

    §

    impl<T> Send for OnceBiVec<T>where - T: Send,

    §

    impl<T> Sync for OnceBiVec<T>where - T: Sync,

    §

    impl<T> Unpin for OnceBiVec<T>

    §

    impl<T> UnwindSafe for OnceBiVec<T>where - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +) -> impl MaybeParallelIterator<Item = (i32, &T)> + MaybeIndexedParallelIterator

    Trait Implementations§

    source§

    impl<T: Clone> Clone for OnceBiVec<T>

    source§

    fn clone(&self) -> OnceBiVec<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for OnceBiVec<T>

    source§

    fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<T> Index<i32> for OnceBiVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, i: i32) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<i32> for OnceBiVec<T>

    source§

    fn index_mut(&mut self, i: i32) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T: PartialEq> PartialEq<OnceBiVec<T>> for OnceBiVec<T>

    source§

    fn eq(&self, other: &OnceBiVec<T>) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<T: Eq> Eq for OnceBiVec<T>

    source§

    impl<T> StructuralEq for OnceBiVec<T>

    source§

    impl<T> StructuralPartialEq for OnceBiVec<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for OnceBiVec<T>where + T: RefUnwindSafe,

    §

    impl<T> Send for OnceBiVec<T>where + T: Send,

    §

    impl<T> Sync for OnceBiVec<T>where + T: Sync,

    §

    impl<T> Unpin for OnceBiVec<T>

    §

    impl<T> UnwindSafe for OnceBiVec<T>where + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/once/struct.OnceVec.html b/docs/once/struct.OnceVec.html index 311a00991..b0f637807 100644 --- a/docs/once/struct.OnceVec.html +++ b/docs/once/struct.OnceVec.html @@ -1,4 +1,4 @@ -OnceVec in once - Rust +OnceVec in once - Rust @@ -23,10 +23,10 @@ }); -

    Struct once::OnceVec

    source ·
    pub struct OnceVec<T> {
    -    pub(crate) len: AtomicUsize,
    -    pub(crate) ooo: Mutex<OooTracker>,
    -    pub(crate) data: NonNull<Page<T>>,
    +

    Struct once::OnceVec

    source ·
    pub struct OnceVec<T> {
    +    pub(crate) len: AtomicUsize,
    +    pub(crate) ooo: Mutex<OooTracker>,
    +    pub(crate) data: NonNull<Page<T>>,
     }
    Expand description

    A OnceVec is a push-only vector which is thread-safe. To ensure thread-safety, we need to ensure three things

      @@ -56,11 +56,11 @@

      Safety

      written to the nth page already, then the nth page must have been allocated.

      The other safety invariant we maintain is that we only write to pages when the lock has been taken.

      -

    Fields§

    §len: AtomicUsize§ooo: Mutex<OooTracker>

    BTreeSet of elements that have been added out of order. We also use this mutex to -prevent conflicting concurrent pushes. We use a newtype to wrap the BTreeSet because +

    Fields§

    §len: AtomicUsize§ooo: Mutex<OooTracker>

    BTreeSet of elements that have been added out of order. We also use this mutex to +prevent conflicting concurrent pushes. We use a newtype to wrap the BTreeSet because we want OnceVec::lock to be public, but we don’t want to let people mess with the internals of the tracker.

    -
    §data: NonNull<Page<T>>

    Implementations§

    source§

    impl<T> OnceVec<T>

    source

    pub fn from_vec(vec: Vec<T>) -> Self

    Creates a OnceVec from a Vec.

    +
    §data: NonNull<Page<T>>

    Implementations§

    source§

    impl<T> OnceVec<T>

    source

    pub fn from_vec(vec: Vec<T>) -> Self

    Creates a OnceVec from a Vec.

    Example
    let v = vec![1, 3, 5, 2];
     let w = OnceVec::from_vec(v.clone());
    @@ -68,32 +68,32 @@ 
    Example
    for i in 0 .. 4 { assert_eq!(v[i], w[i]); }
    -
    source

    pub fn new() -> Self

    source

    pub fn ooo_elements(&self) -> Vec<usize>

    Returns a list of out-of-order elements remaining.

    -
    source

    pub fn len(&self) -> usize

    All data up to length self.len() are guaranteed to be fully written after reading +

    source

    pub fn new() -> Self

    source

    pub fn ooo_elements(&self) -> Vec<usize>

    Returns a list of out-of-order elements remaining.

    +
    source

    pub fn len(&self) -> usize

    All data up to length self.len() are guaranteed to be fully written after reading self.len().

    -
    source

    pub fn is_empty(&self) -> bool

    source

    pub fn get(&self, index: usize) -> Option<&T>

    source

    pub fn get_mut(&mut self, index: usize) -> Option<&mut T>

    source

    pub fn last(&self) -> Option<&T>

    source

    pub(crate) unsafe fn entry_ptr(&self, index: usize) -> *mut T

    source

    pub fn is_empty(&self) -> bool

    source

    pub fn get(&self, index: usize) -> Option<&T>

    source

    pub fn get_mut(&mut self, index: usize) -> Option<&mut T>

    source

    pub fn last(&self) -> Option<&T>

    source

    pub(crate) unsafe fn entry_ptr(&self, index: usize) -> *mut T

    Returns

    A *mut T that is guaranteed to be valid for the lifetime of the borrow of self.

    Safety

    If the index has not been written to, then the lock has have been taken, and no unsafe page references should exist.

    -
    source

    pub(crate) fn page_raw(&self, page: usize) -> *mut Page<T>

    source

    pub(crate) fn page_raw(&self, page: usize) -> *mut Page<T>

    Returns

    A raw pointer to the pageth page. This is guaranteed to be valid within the lifetime of the borrow of self.

    Safety

    This function is safe in the sense that creating a raw pointer is always safe. Safety invariants as described in the top-level documentation must be upheld when turning this into a reference.

    -
    source

    pub(crate) fn page(&self, page: usize) -> &Page<T>

    Obtain an immutable reference to the pageth page. This panics if there has not been any +

    source

    pub(crate) fn page(&self, page: usize) -> &Page<T>

    Obtain an immutable reference to the pageth page. This panics if there has not been any elements written to the pageth page, in which case the reference is (potentially) unsafe. Use `page

    -
    source

    pub fn lock(&self) -> MutexGuard<'_, OooTracker>

    Takes a lock on the OnceVec. The OnceVec cannot be updated while the lock is held. +

    source

    pub fn lock(&self) -> MutexGuard<'_, OooTracker>

    Takes a lock on the OnceVec. The OnceVec cannot be updated while the lock is held. This is useful when used in conjuction with OnceVec::extend;

    -
    source

    pub fn push_checked(&self, value: T, index: usize)

    Push an element into the vector and check that it was inserted into the index position.

    +
    source

    pub fn push_checked(&self, value: T, index: usize)

    Push an element into the vector and check that it was inserted into the index position.

    This is useful for situations where pushing into the wrong position can cause unexpected future behaviour.

    Panics

    Panics if the position of the new element is not index.

    -
    source

    pub fn push(&self, value: T) -> usize

    Append an element to the end of the vector.

    +
    source

    pub fn push(&self, value: T) -> usize

    Append an element to the end of the vector.

    Returns the index of the new element.

    Example
    let v = OnceVec::<u32>::new();
    @@ -102,7 +102,7 @@ 
    Example
    let x = &v[1usize]; v.push(3); assert_eq!(*x, 2);
    -
    source

    pub fn push_ooo(&self, value: T, index: usize) -> Range<usize>

    Append an element to an arbitrary position in the OnceVec.

    +
    source

    pub fn push_ooo(&self, value: T, index: usize) -> Range<usize>

    Append an element to an arbitrary position in the OnceVec.

    Whenever an element is pushed out of order, the we revisit the whole OnceVec and update the len to be the largest contiguous initial block that has been written to. The return value indicates the newly valid range. Elements in this range will no longer be consider to @@ -127,12 +127,12 @@

    Example
    assert_eq!(v[2usize], 5); assert_eq!(v[3usize], 3); assert_eq!(v[4usize], 4);
    -
    source

    pub(crate) unsafe fn allocate_for(&self, new_max: usize)

    Allocate enough space to fit new_max many elements in total. No reference to self.data +

    source

    pub(crate) unsafe fn allocate_for(&self, new_max: usize)

    Allocate enough space to fit new_max many elements in total. No reference to self.data data may be alive when this function is called. In particular, the OnceVec ought to be locked.

    Safety

    Lock must be taken and there should be no other unsafe references.

    -
    source

    pub fn extend(&self, new_max: usize, f: impl FnMut(usize) -> T)

    Extend the OnceVec to up to index new_max, filling in the entries with the values of +

    source

    pub fn extend(&self, new_max: usize, f: impl FnMut(usize) -> T)

    Extend the OnceVec to up to index new_max, filling in the entries with the values of f. This takes the lock before calling f, which is useful behaviour if used in conjunction with OnceVec::lock.

    This is thread-safe and guaranteed to be idempotent. f will only be called once per @@ -151,37 +151,41 @@

    Arguments
  • new_max: After calling this function, self[new_max] will be defined.
  • f: We will fill in the vector with f(i) at the ith index.
  • -
    source

    pub fn iter(&self) -> impl Iterator<Item = &T>

    Iterate through the OnceVec.

    +
    source

    pub fn iter(&self) -> impl Iterator<Item = &T>

    Iterate through the OnceVec.

    Example
    let v: OnceVec<usize> = OnceVec::new();
     v.push(1);
     v.push(5);
     v.push(2);
     assert_eq!(v.iter().count(), 3);
    -
    source§

    impl<T: Send + Sync> OnceVec<T>

    source

    pub fn par_extend(&self, new_max: usize, f: impl Fn(usize) -> T + Send + Sync)

    A parallel version of extend, where the function f is run for different indices -simultaneously using [rayon].

    +
    source§

    impl<T: Send + Sync> OnceVec<T>

    source

    pub fn maybe_par_extend( + &self, + new_max: usize, + f: impl Fn(usize) -> T + Send + Sync +)

    A parallel version of extend. If the concurrent feature is enabled, the function f +will be run for different indices simultaneously using [rayon].

    Example
    let v: OnceVec<usize> = OnceVec::new();
    -v.par_extend(5, |i| i + 5);
    +v.maybe_par_extend(5, |i| i + 5);
     assert_eq!(v.len(), 6);
     for (i, &n) in v.iter().enumerate() {
         assert_eq!(n, i + 5);
     }
    -

    Trait Implementations§

    source§

    impl<T: Clone> Clone for OnceVec<T>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for OnceVec<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<T> Default for OnceVec<T>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<T> Drop for OnceVec<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<T> Index<u32> for OnceVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, index: u32) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> Index<usize> for OnceVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, index: usize) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<u32> for OnceVec<T>

    source§

    fn index_mut(&mut self, index: u32) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<usize> for OnceVec<T>

    source§

    fn index_mut(&mut self, index: usize) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T> PartialEq<OnceVec<T>> for OnceVec<T>where - T: PartialEq,

    source§

    fn eq(&self, other: &OnceVec<T>) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Eq for OnceVec<T>where - T: Eq,

    source§

    impl<T: Send> Send for OnceVec<T>

    source§

    impl<T: Sync> Sync for OnceVec<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for OnceVec<T>where - T: RefUnwindSafe,

    §

    impl<T> Unpin for OnceVec<T>

    §

    impl<T> UnwindSafe for OnceVec<T>where - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl<T: Clone> Clone for OnceVec<T>

    source§

    fn clone(&self) -> Self

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<T: Debug> Debug for OnceVec<T>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<T> Default for OnceVec<T>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<T> Drop for OnceVec<T>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<T> Index<u32> for OnceVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, index: u32) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> Index<usize> for OnceVec<T>

    §

    type Output = T

    The returned type after indexing.
    source§

    fn index(&self, index: usize) -> &T

    Performs the indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<u32> for OnceVec<T>

    source§

    fn index_mut(&mut self, index: u32) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T> IndexMut<usize> for OnceVec<T>

    source§

    fn index_mut(&mut self, index: usize) -> &mut T

    Performs the mutable indexing (container[index]) operation. Read more
    source§

    impl<T> PartialEq<OnceVec<T>> for OnceVec<T>where + T: PartialEq,

    source§

    fn eq(&self, other: &OnceVec<T>) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<T> Eq for OnceVec<T>where + T: Eq,

    source§

    impl<T: Send> Send for OnceVec<T>

    source§

    impl<T: Sync> Sync for OnceVec<T>

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for OnceVec<T>where + T: RefUnwindSafe,

    §

    impl<T> Unpin for OnceVec<T>

    §

    impl<T> UnwindSafe for OnceVec<T>where + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/once/struct.OooTracker.html b/docs/once/struct.OooTracker.html index d94c750e4..d0401dbb0 100644 --- a/docs/once/struct.OooTracker.html +++ b/docs/once/struct.OooTracker.html @@ -1,4 +1,4 @@ -OooTracker in once - Rust +OooTracker in once - Rust @@ -23,17 +23,17 @@ }); -

    Struct once::OooTracker

    source ·
    pub struct OooTracker(pub(crate) BTreeSet<usize>);
    Expand description

    This is a wrapper around our out-of-order push tracker. See OnceVec documentation for +

    Struct once::OooTracker

    source ·
    pub struct OooTracker(pub(crate) BTreeSet<usize>);
    Expand description

    This is a wrapper around our out-of-order push tracker. See OnceVec documentation for more details.

    -

    Tuple Fields§

    §0: BTreeSet<usize>

    Trait Implementations§

    source§

    impl Clone for OooTracker

    source§

    fn clone(&self) -> OooTracker

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Default for OooTracker

    source§

    fn default() -> OooTracker

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Tuple Fields§

    §0: BTreeSet<usize>

    Trait Implementations§

    source§

    impl Clone for OooTracker

    source§

    fn clone(&self) -> OooTracker

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Default for OooTracker

    source§

    fn default() -> OooTracker

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/once/struct.Page.html b/docs/once/struct.Page.html index 4a3e131f3..9332a4c54 100644 --- a/docs/once/struct.Page.html +++ b/docs/once/struct.Page.html @@ -1,4 +1,4 @@ -Page in once - Rust +Page in once - Rust @@ -23,23 +23,23 @@ }); -

    Struct once::Page

    source ·
    pub(crate) struct Page<T>(pub(crate) Option<NonNull<T>>);

    Tuple Fields§

    §0: Option<NonNull<T>>

    Implementations§

    source§

    impl<T> Page<T>

    source

    pub(crate) fn layout(page_index: usize) -> Layout

    This always returns a layout of non-zero size.

    -
    source

    pub(crate) fn allocated(&self) -> bool

    source

    pub(crate) fn allocate(&mut self, page_index: usize)

    source

    pub(crate) unsafe fn deallocate(&mut self, len: usize, page_index: usize)

    Safety
    +

    Struct once::Page

    source ·
    pub(crate) struct Page<T>(pub(crate) Option<NonNull<T>>);

    Tuple Fields§

    §0: Option<NonNull<T>>

    Implementations§

    source§

    impl<T> Page<T>

    source

    pub(crate) fn layout(page_index: usize) -> Layout

    This always returns a layout of non-zero size.

    +
    source

    pub(crate) fn allocated(&self) -> bool

    source

    pub(crate) fn allocate(&mut self, page_index: usize)

    source

    pub(crate) unsafe fn deallocate(&mut self, len: usize, page_index: usize)

    Safety

    This has to be the pageth page and len many items has to have been written into the OnceVec owning this page.

    -
    source

    pub(crate) fn ptr(&self) -> *mut T

    source

    pub(crate) unsafe fn as_slice(&self, len: usize, page_index: usize) -> &[T]

    source

    pub(crate) fn ptr(&self) -> *mut T

    source

    pub(crate) unsafe fn as_slice(&self, len: usize, page_index: usize) -> &[T]

    Safety

    This is safe only when this is the page_indexth page of a OnceVec of length at least len.

    -

    Trait Implementations§

    source§

    impl<T> Default for Page<T>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Page<T>where - T: RefUnwindSafe,

    §

    impl<T> !Send for Page<T>

    §

    impl<T> !Sync for Page<T>

    §

    impl<T> Unpin for Page<T>

    §

    impl<T> UnwindSafe for Page<T>where - T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl<T> Default for Page<T>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<T> RefUnwindSafe for Page<T>where + T: RefUnwindSafe,

    §

    impl<T> !Send for Page<T>

    §

    impl<T> !Sync for Page<T>

    §

    impl<T> Unpin for Page<T>

    §

    impl<T> UnwindSafe for Page<T>where + T: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/query/all.html b/docs/query/all.html index 9a0dbe23a..7d3ac902e 100644 --- a/docs/query/all.html +++ b/docs/query/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    Functions

    Constants

    \ No newline at end of file +

    List of all items

    Functions

    Constants

    \ No newline at end of file diff --git a/docs/query/constant.ARGV.html b/docs/query/constant.ARGV.html index 20229e3e1..52cc33b1b 100644 --- a/docs/query/constant.ARGV.html +++ b/docs/query/constant.ARGV.html @@ -1,4 +1,4 @@ -ARGV in query - Rust +ARGV in query - Rust @@ -23,4 +23,4 @@ }); -

    Constant query::ARGV

    source ·
    pub(crate) const ARGV: LocalKey<RefCell<Args>>;
    \ No newline at end of file +

    Constant query::ARGV

    source ·
    pub(crate) const ARGV: LocalKey<RefCell<Args>>;
    \ No newline at end of file diff --git a/docs/query/fn.optional.html b/docs/query/fn.optional.html index c82d62a81..df5a69e3e 100644 --- a/docs/query/fn.optional.html +++ b/docs/query/fn.optional.html @@ -1,4 +1,4 @@ -optional in query - Rust +optional in query - Rust @@ -23,7 +23,7 @@ }); -

    Function query::optional

    source ·
    pub fn optional<S, E: Display>(
    -    prompt: &str,
    -    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
    -) -> Option<S>
    \ No newline at end of file +

    Function query::optional

    source ·
    pub fn optional<S, E: Display>(
    +    prompt: &str,
    +    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
    +) -> Option<S>
    \ No newline at end of file diff --git a/docs/query/fn.raw.html b/docs/query/fn.raw.html index 79dce7208..ef7c6c687 100644 --- a/docs/query/fn.raw.html +++ b/docs/query/fn.raw.html @@ -1,4 +1,4 @@ -raw in query - Rust +raw in query - Rust @@ -23,7 +23,7 @@ }); -

    Function query::raw

    source ·
    pub fn raw<S, E: Display>(
    -    prompt: &str,
    -    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
    +

    Function query::raw

    source ·
    pub fn raw<S, E: Display>(
    +    prompt: &str,
    +    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
     ) -> S
    \ No newline at end of file diff --git a/docs/query/fn.vector.html b/docs/query/fn.vector.html index 7aafd84df..dba166cf5 100644 --- a/docs/query/fn.vector.html +++ b/docs/query/fn.vector.html @@ -1,4 +1,4 @@ -vector in query - Rust +vector in query - Rust @@ -23,4 +23,4 @@ }); -

    Function query::vector

    source ·
    pub fn vector(prompt: &str, len: usize) -> Vec<u32>
    \ No newline at end of file +

    Function query::vector

    source ·
    pub fn vector(prompt: &str, len: usize) -> Vec<u32>
    \ No newline at end of file diff --git a/docs/query/fn.with_default.html b/docs/query/fn.with_default.html index 23e6fc429..627cfebcc 100644 --- a/docs/query/fn.with_default.html +++ b/docs/query/fn.with_default.html @@ -1,4 +1,4 @@ -with_default in query - Rust +with_default in query - Rust @@ -23,8 +23,8 @@ }); -

    Function query::with_default

    source ·
    pub fn with_default<S, E: Display>(
    -    prompt: &str,
    -    default: &str,
    -    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
    +

    Function query::with_default

    source ·
    pub fn with_default<S, E: Display>(
    +    prompt: &str,
    +    default: &str,
    +    parser: impl for<'a> FnMut(&'a str) -> Result<S, E>
     ) -> S
    \ No newline at end of file diff --git a/docs/query/fn.yes_no.html b/docs/query/fn.yes_no.html index 0022ed2a8..cf08e1453 100644 --- a/docs/query/fn.yes_no.html +++ b/docs/query/fn.yes_no.html @@ -1,4 +1,4 @@ -yes_no in query - Rust +yes_no in query - Rust @@ -23,4 +23,4 @@ }); -

    Function query::yes_no

    source ·
    pub fn yes_no(prompt: &str) -> bool
    \ No newline at end of file +

    Function query::yes_no

    source ·
    pub fn yes_no(prompt: &str) -> bool
    \ No newline at end of file diff --git a/docs/query/index.html b/docs/query/index.html index 9caee2cd5..dd7b76fe2 100644 --- a/docs/query/index.html +++ b/docs/query/index.html @@ -1,4 +1,4 @@ -query - Rust +query - Rust @@ -23,7 +23,7 @@ }); -

    Crate query

    source ·
    Expand description

    This library gives various functions that are used to query a user. Each function performs the +

    Crate query

    source ·
    Expand description

    This library gives various functions that are used to query a user. Each function performs the following:

    • diff --git a/docs/resolution_size/all.html b/docs/resolution_size/all.html index 4abdd7325..2b01255db 100644 --- a/docs/resolution_size/all.html +++ b/docs/resolution_size/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/resolution_size/index.html b/docs/resolution_size/index.html index 8e3d34fce..0327c4e6f 100644 --- a/docs/resolution_size/index.html +++ b/docs/resolution_size/index.html @@ -1,4 +1,4 @@ -resolution_size - Rust +resolution_size - Rust @@ -23,4 +23,4 @@ }); -

      Crate resolution_size

      source ·
      \ No newline at end of file +

      Crate resolution_size

      source ·
      \ No newline at end of file diff --git a/docs/resolve/all.html b/docs/resolve/all.html index 63d7c9db2..f7da84704 100644 --- a/docs/resolve/all.html +++ b/docs/resolve/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/resolve/index.html b/docs/resolve/index.html index e2f7ff9ac..679f5dc05 100644 --- a/docs/resolve/index.html +++ b/docs/resolve/index.html @@ -1,4 +1,4 @@ -resolve - Rust +resolve - Rust @@ -23,7 +23,7 @@ }); -

      Crate resolve

      source ·
      Expand description

      Resolves a module up to a fixed $(s, t)$ and prints an ASCII depiction of the Ext groups:

      +

      Crate resolve

      source ·
      Expand description

      Resolves a module up to a fixed $(s, t)$ and prints an ASCII depiction of the Ext groups:

      ·                                     ·
       ·                                   · ·
       ·                                 ·   ·
      diff --git a/docs/resolve_through_stem/all.html b/docs/resolve_through_stem/all.html
      index 68f625251..b160f0c08 100644
      --- a/docs/resolve_through_stem/all.html
      +++ b/docs/resolve_through_stem/all.html
      @@ -1,4 +1,4 @@
      -List of all items in this crate
      +List of all items in this crate
       
       
       
      @@ -23,4 +23,4 @@
           });
       
       
      -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/resolve_through_stem/index.html b/docs/resolve_through_stem/index.html index fe8c20b69..70f40ddb0 100644 --- a/docs/resolve_through_stem/index.html +++ b/docs/resolve_through_stem/index.html @@ -1,4 +1,4 @@ -resolve_through_stem - Rust +resolve_through_stem - Rust @@ -23,7 +23,7 @@ }); -
      Expand description

      Resolves a module up to an $(n, s)$ and prints an ASCII depiction of the Ext groups:

      +
      Expand description

      Resolves a module up to an $(n, s)$ and prints an ASCII depiction of the Ext groups:

      ·
       ·                                                     ·
       ·                                                   · ·     ·
      diff --git a/docs/resolve_unstable/all.html b/docs/resolve_unstable/all.html
      index 7a4c22bad..98407ff5c 100644
      --- a/docs/resolve_unstable/all.html
      +++ b/docs/resolve_unstable/all.html
      @@ -1,4 +1,4 @@
      -List of all items in this crate
      +List of all items in this crate
       
       
       
      @@ -23,4 +23,4 @@
           });
       
       
      -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/resolve_unstable/index.html b/docs/resolve_unstable/index.html index 1728a66a6..62ecb630b 100644 --- a/docs/resolve_unstable/index.html +++ b/docs/resolve_unstable/index.html @@ -1,4 +1,4 @@ -resolve_unstable - Rust +resolve_unstable - Rust @@ -23,5 +23,5 @@ }); -

      Crate resolve_unstable

      source ·
      Expand description

      Resolves an unstable module up to an $(n, s)$ and prints an ASCII depiction of the Ext groups:

      +

      Crate resolve_unstable

      source ·
      Expand description

      Resolves an unstable module up to an $(n, s)$ and prints an ASCII depiction of the Ext groups:

      \ No newline at end of file diff --git a/docs/save_bruner/all.html b/docs/save_bruner/all.html index 8f0389be0..c33803923 100644 --- a/docs/save_bruner/all.html +++ b/docs/save_bruner/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/save_bruner/index.html b/docs/save_bruner/index.html index 38bcd36fe..1c6d914b0 100644 --- a/docs/save_bruner/index.html +++ b/docs/save_bruner/index.html @@ -1,4 +1,4 @@ -save_bruner - Rust +save_bruner - Rust @@ -23,6 +23,6 @@ }); -

      Crate save_bruner

      source ·
      Expand description

      This saves a resolution to Bruner’s format. This saves the resulting files to the current +

      Crate save_bruner

      source ·
      Expand description

      This saves a resolution to Bruner’s format. This saves the resulting files to the current working directory. It is recommended that you run this in a dedicated subdirectory.

      \ No newline at end of file diff --git a/docs/search-index.js b/docs/search-index.js index e51a96c62..82b73259b 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1,22 +1,23 @@ var searchIndex = JSON.parse('{\ -"algebra":{"doc":"Types and traits for working with various algebras and …","t":"NDNIIEINNDINDNIIIDDEEIIAKAKMMKKMMAKKKKKMKKKOMMMMKKAKKKMMMAKAFMMMKKKKKKMMAMKKMKKMMKKKAAMMMDIDNNEKMMMMMMMMMMMMCCCCCCCCCCCCCCCCCAAAAAAAAADIDNNELKLLLLMLMLMLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLMLLLLLLLLLLLLLMMLLLMLFLLLLLLLLLLLLLLLMIIIIKKKKLLKKKLLKLLKLLLLKLLKKKLLKLLLLKLLLLKIKKRDRDRLFLLLLLLLLLLLLLMLLMFLLMLLLLLLLLMMLMMMMLFLLLLLLFDLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLRMDDIDGDGDGDLMLLLMLMLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLMLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLMMLLLLLLLLLLLMLKLMLLLLLLLLLLLLLLLLLLLLLLLMMMMMLLMLLLLMLMMFMLMLLLLLLMLLLLLLLLLLLLLLLLLLLLMLLLLRQGDIKFFLLMLLLKKKLLLLLKMKLLKOLLMLOMIDDKLLLLLLLLKLMLLLLLLLLLLMKKLLLLKLLLLLLMLLLLLLLLLLMLLLLLLLLLLMKKKKKLLLLLLLLLLMNNDENNNNEEILLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLMLLKLLLLLLLLLLLLLLLLLLLRDDFMMFMMMMMMMFFDMMDIDDGDGDMMMMMMMMMMMMKMMMMMMMMMMMMMMQDDGDDIDDDDDCDDGIKMKMMMMMKMAMMMKMAAAMMMMMMMMMAAMMMMMKMKMMMAMMMMMMAMMMAMMMAMAMAMMAKDDLMMMLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLDLLLMLLLMLLLLLLLLLLLLLLLLLLLLLMMLLLLLMLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLMMLLLLMLLLMMLMLLLLLLLLGDDDDGLLLLMMLLLLLLLLLLLLMLLLLLLLLLLLLLMLLLLLLLMMMLMMMLMLLLLLLLLLLLLLLLLLMMMLLMLMMLMLMLLLLLLLLLLLLLLLDLLMLMLLLLLLLLLLLLLLLMLMLLLLGDDDIIDDDQQGILLKLLKMMMMMAAALLAKLMMMLMMMMMLMMLLMMMAMMKMMMMMKMMMMKGDGLLLLLLLLLLLMLLLLLLLLMLLLMLMLLLLMLMLLLLMLMLLLLDLLLLLLLMLLLLLLLLMLLLMMLLMLLLMLMLLLLLDLLLLMLLLLLLLLMLMLLLLDLLLLLLLLLLMLLLMMLLLMLMLMLLLDDLLLLLLLLLLLLLLMMLLLLLLLLMMLLMLLLLLLLLQIDLLLLLLKKKLLLLLLKLLLLLLLLLLKLLLLKLLMLLLLLLMDLLLLMLLLLLLLLLLLLLLMLLLLLLLMLMLLLLDDLLMLLLLLMMFFLLLLLLLLLLLLLLLLLLLLLMMLLMMLLLLLLLLLLLGFALFDLLLLLLLLLLLLLLLLLMLLLLLLLLMLLLLLLDLLLLLMLLLLLLLLLLLMLLLLLMLLLLLLIKQDIKMKKKKMKKMMDMLLLLLLLLLLLLLLLLLLLMLLLLLLLLLNEENNEGGNNNNNNNFFFFLLLLLLFLLLLLLFLLLLLLFLLLLLLFLLLLLLLLLFFFFFFFFLLLLLLLLLLLLL","n":["Adem","AdemAlgebra","AdemAlgebra","AdemAlgebraT","Algebra","AlgebraType","Bialgebra","BorrowAdem","BorrowMilnor","Field","GeneratedAlgebra","Milnor","MilnorAlgebra","MilnorAlgebra","MilnorAlgebraT","MuAlgebra","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","UnstableAlgebra","adem_algebra","adem_algebra","algebra","basis_element_from_string","basis_element_to_index_map","basis_element_to_index_map","basis_element_to_string","basis_table","basis_table","basis_table","combinatorics","compute_basis","compute_generating_set","coproduct","decompose","decompose_basis_element","degree","dimension","dimension_unstable","dimension_unstable","dispatch_algebra","even_basis_table","excess_table","excess_table","ext","exterior_generators_in_degree","exterior_monomials","field","frobenius_on_generator","generating_relations","generators","generic","generic","index_to_monomial","milnor_algebra","milnor_algebra","module","module_gens_from_json","monomial_to_index","multiplication_table","multiplication_table","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","p","p","pair_algebra","poly","polynomial_generators_in_degree","polynomial_monomials","ppart_table","prime","prime","prime","profile","repr_ext_generator","repr_poly_generator","steenrod_algebra","steenrod_evaluator","steenrod_parser","unstable_enabled","unstable_enabled","valid","AdemAlgebra","AdemAlgebraT","AdemBasisElement","Bockstein","P","PorBockstein","adem_algebra","basis_element_to_index_map","basis_table","bocksteins","degree","even_basis_table","excess_table","generic","multiplication_table","p","p_or_sq","ps","unstable_enabled","AdemAlgebra","AdemAlgebraT","Algebra","AlgebraType","Bialgebra","Field","GeneratedAlgebra","MilnorAlgebra","MilnorAlgebraT","MuAlgebra","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","UnstableAlgebra","adem_algebra","algebra_trait","bialgebra_trait","combinatorics","field","milnor_algebra","pair_algebra","polynomial_algebra","steenrod_algebra","AdemAlgebra","AdemAlgebraT","AdemBasisElement","Bockstein","P","PorBockstein","a_multiply","adem_algebra","adem_algebra","basis_element_from_index","basis_element_from_string","basis_element_to_index","basis_element_to_index_map","basis_element_to_string","basis_table","beps_pn","bocksteins","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","coproduct","decompose","decompose_basis_element","decompose_basis_element_2","decompose_basis_element_generic","default_filtration_one_products","degree","deref","deref","deref","deref_mut","deref_mut","deref_mut","dimension","dimension_unstable","dimension_unstable","dimension_unstable","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","eq","equivalent","equivalent","equivalent","even_basis_table","excess","excess_table","finalize_element","fmt","fmt","fmt","fmt","from","from","from","generate_basis2","generate_basis_element_to_index_map","generate_basis_even","generate_basis_generic","generate_excess_table","generate_multiplication_table_2","generate_multiplication_table_2_step","generate_multiplication_table_generic","generate_multiplication_table_generic_step","generating_relations","generator_to_string","generators","generic","generic","get_hash","hash","init","init","init","into","into","into","iter_filtered","magic","make_mono_admissible","make_mono_admissible_2","make_mono_admissible_generic","multiplication_table","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_inner","new","new_pair_element","p","p_or_sq","p_tilde","prefix","prime","ps","q","shift_vec","sigma_multiply_basis","tail_of_basis_element_to_index","to_owned","to_string","to_string","try_basis_element_to_index","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unstable_enabled","Algebra","GeneratedAlgebra","MuAlgebra","UnstableAlgebra","basis_element_from_string","basis_element_to_string","compute_basis","decompose_basis_element","default_filtration_one_products","default_filtration_one_products","dimension","dimension_unstable","dimension_unstable","element_to_string","element_to_string","generating_relations","generator_to_string","generator_to_string","generators","magic","magic","multiply_basis_element_by_element","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element","multiply_element_by_basis_element","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","prefix","prefix","prime","Bialgebra","coproduct","decompose","MAX_XI_TAU","PartitionIterator","TAU_DEGREES","TruncatedPolynomialMonomialBasis","XI_DEGREES","add_gens_and_calculate_parts","adem_relation_coefficient","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","from","from","gen_deg_idx_to_internal_idx","gen_degrees","generators","generators_up_to_degree","gens","inadmissible_pairs","init","init","initial","internal_idx_to_gen_deg","into","into","into_iter","multiunzip","new","new","next","p","partition","parts","parts","parts","parts_by_max","remaining","search","tau_degrees","try_from","try_from","try_into","try_into","type_id","type_id","xi_degrees","Field","basis_element_from_string","basis_element_to_string","borrow","borrow_mut","compute_basis","coproduct","decompose","default_filtration_one_products","deref","deref_mut","dimension","dimension_unstable","drop","element_to_string","fmt","from","init","into","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","new","prime","prime","to_string","try_from","try_into","type_id","ALLOCATION","M","Matrix2D","MilnorAlgebra","MilnorAlgebraT","MilnorBasisElement","MilnorHashMap","MilnorProfile","PPart","PPartAllocation","PPartEntry","PPartMultiplier","a_multiply","ans","basis_element_from_index","basis_element_from_string","basis_element_to_index","basis_element_to_index_map","basis_element_to_string","basis_table","beps_pn","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","clone_into","cols","cols","compute_basis","compute_degree","compute_ppart","coproduct","decompose","decompose_basis_element","decompose_basis_element_ppart","decompose_basis_element_qpart","default","default","default","default","default_filtration_one_products","degree","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","diag_num","diagonal","diagonal","dimension","dimension_unstable","dimension_unstable","dimension_unstable","drop","drop","drop","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","excess","excess_table","finalize_element","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_p","generate_basis_2","generate_basis_generic","generate_excess_table","generating_relations","generator_to_string","generators","generic","generic","get_hash","get_p_part","hash","increment_p_part","index","index_mut","init","init","init","init","init","init","init","inner","into","into","into","into","into","into","into_allocation","into_iter","is_an","is_trivial","is_valid","m","magic","milnor_algebra","milnor_algebra","multiplication_table","multiply","multiply_basis_by_element","multiply_basis_by_element_with_allocation","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_qpart","multiply_with_allocation","new","new_from_allocation","new_pair_element","new_with_profile","next","next_val","p","p","p_part","p_part","p_part","p_tilde","ppart_table","ppart_table","prefix","prime","prime","profile","profile","q","q_part","q_part","q_part_default","r","reset","rows","serialize","sigma_multiply_basis","to_owned","to_string","to_string","to_string","truncated","try_basis_element_to_index","try_beps_pn","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","unstable_enabled","update","with_capacity","with_capacity","with_local","AY_CACHE","Element","HashMap","MilnorPairElement","PairAlgebra","a_multiply","a_y_cached","a_y_inner","borrow","borrow_mut","degree","deref","deref_mut","drop","element_from_bytes","element_is_zero","element_to_bytes","finalize_element","finalize_element","from","init","into","new_pair_element","ones","p_tilde","sigma_multiply","sigma_multiply","sigma_multiply_basis","sub","try_from","try_into","twos","type_id","unsub","ys","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","basis_table","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","compute_basis_step","compute_basis_step","compute_generating_set","default","degree","deref","deref","deref_mut","deref_mut","drop","drop","eq","equivalent","equivalent","equivalent","ext","exterior_generators_in_degree","exterior_monomials","fmt","fmt","frobenius_monomial","frobenius_monomial","frobenius_on_generator","from","from","get_hash","hash","index_to_monomial","index_to_monomial","index_to_monomial","init","init","into","into","max_computed_degree","max_computed_degree","min_degree","min_degree","monomial_to_index","monomial_to_index","monomial_to_index","multiply_monomial_by_polynomial","multiply_monomial_by_polynomial","multiply_monomials","multiply_monomials","multiply_polynomial_by_monomial","multiply_polynomial_by_monomial","multiply_polynomials","multiply_polynomials","new","new","poly","polynomial_generators_in_degree","polynomial_monomials","prime","repr_ext_generator","repr_poly_generator","set_monomial_degree","set_monomial_degree","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","valid","Adem","AdemAlgebra","AlgebraSpec","AlgebraType","BorrowAdem","BorrowMilnor","Milnor","MilnorAlgebra","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","a_multiply","adem_algebra","algebra","basis_element_from_string","basis_element_to_string","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","coproduct","decompose","decompose_basis_element","default_filtration_one_products","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","dimension","dimension_unstable","dimension_unstable","dimension_unstable","dispatch_steenrod","drop","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","element_to_string","eq","equivalent","equivalent","equivalent","finalize_element","fmt","fmt","fmt","fmt","from","from","from","from","from_json","from_str","generating_relations","generator_to_string","generators","init","init","init","init","into","into","into","into","magic","milnor_algebra","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","new_pair_element","p","p_tilde","prefix","prime","profile","sigma_multiply","sigma_multiply_basis","steenrod_algebra","steenrod_algebra","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","MAX_XI_TAU","PartitionIterator","TruncatedPolynomialMonomialBasis","adem_relation_coefficient","gen_degrees","gens","inadmissible_pairs","initial","p","partition","parts","parts","parts_by_max","remaining","tau_degrees","xi_degrees","Field","prime","M","MilnorAlgebra","MilnorAlgebraT","MilnorBasisElement","MilnorProfile","PPart","PPartAllocation","PPartEntry","PPartMultiplier","ans","basis_element_to_index_map","basis_table","cols","degree","diag_num","diagonal","diagonal","excess_table","generic","init","m","milnor_algebra","multiplication_table","p","p","p_part","p_part","p_part","ppart_table","profile","q_part","q_part","r","rows","truncated","unstable_enabled","Algebra","FDModule","FPModule","FreeModule","GeneratorData","HomModule","Module","ModuleFailedRelationError","MuFreeModule","OperationGeneratorPair","QuotientModule","RealProjectiveSpace","SteenrodModule","SuspensionModule","TensorModule","UnstableFreeModule","ZeroModule","act_on_basis","actions","algebra","algebra","algebra","algebra","algebra","basis_element_to_opgen","basis_element_to_string","basis_list","block_structure","block_structures","block_structures","clear_bottom","dimension","end","finite_dimensional_module","finitely_presented_module","free_module","gen_deg","gen_deg_idx_to_internal_idx","gen_names","gen_names","generator_degree","generator_index","generator_to_index","generators","graded_dimension","hom_module","homomorphism","index_table","inner","left","map","max","max_computed_degree","min","min_degree","min_degree","min_degree","module","module_trait","name","name","name","num_gens","operation_degree","operation_index","quotient_module","relation","relations","right","rpn","shift","source","start","steenrod_module","subspaces","suspension_module","target","tensor_module","truncation","value","zero_module","zero_module","BlockStructure","GeneratorBasisEltPair","add_block","basis_element_to_block_idx","basis_index","blocks","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","generator_basis_elt_to_index","generator_degree","generator_index","generator_to_block","index_to_generator_basis_elt","init","init","into","into","new","total_dimension","try_from","try_from","try_into","try_into","type_id","type_id","FiniteDimensionalModule","act_on_basis","action","action_mut","actions","actions_to_json","add_generator","algebra","algebra","allocate_actions","basis_element_to_string","borrow","borrow_mut","check_validity","clone","clone_into","compute_basis","deref","deref_mut","dimension","drop","eq","equivalent","equivalent","equivalent","extend_actions","fmt","from","from","from_json","gen_names","graded_dimension","init","into","max_computed_degree","max_degree","min_degree","name","new","parse_action","set_action","set_basis_element_name","string_to_basis_element","test_equal","to_json","to_owned","to_string","try_from","try_into","type_id","zero_module","FPMIndexTable","FinitelyPresentedModule","act_on_basis","add_generators","add_relations","algebra","basis_element_to_string","borrow","borrow","borrow_mut","borrow_mut","compute_basis","deref","deref","deref_mut","deref_mut","dimension","drop","drop","eq","equivalent","equivalent","equivalent","fmt","fp_idx_to_gen_idx","fp_idx_to_gen_idx","from","from","from_json","gen_idx_to_fp_idx","gen_idx_to_fp_idx","generators","generators","index_table","init","init","into","into","map","max_computed_degree","max_generator_degree","min_degree","min_degree","name","new","relations","to_string","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","FreeModule","GeneratorData","MuFreeModule","OffsetIterator","OperationGeneratorPair","UnstableFreeModule","act","act_on_basis","add_generators","algebra","algebra","basis_element_to_opgen","basis_element_to_string","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","degree","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","dimension","drop","drop","drop","drop","end","extend_by_zero","fmt","fmt","from","from","from","from","gen_deg","gen_deg","gen_deg_idx_to_internal_idx","gen_names","gen_names","generator_degree","generator_index","generator_offset","generator_to_index","index_to_op_gen","init","init","init","init","internal_generator_offset","into","into","into","into","into_iter","iter_gen_offsets","iter_gens","iter_slices","max_computed_degree","max_generator_degree","min_degree","min_degree","module","name","new","next","num_gens","number_of_gens_in_degree","offset","operation_degree","operation_generator_to_index","operation_index","slice_vector","start","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","zero_module","HomModule","act_on_basis","algebra","algebra","basis_element_to_string","block_structures","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","fmt","from","init","into","max_computed_degree","min_degree","new","source","source","target","target","to_string","try_from","try_into","type_id","FreeModuleHomomorphism","FullModuleHomomorphism","GenericZeroHomomorphism","HomPullback","IdentityHomomorphism","ModuleHomomorphism","MuFreeModuleHomomorphism","QuotientHomomorphism","QuotientHomomorphismSource","Source","Target","UnstableFreeModuleHomomorphism","ZeroHomomorphism","apply","apply_quasi_inverse","apply_to_basis_element","auxiliary_data","compute_auxiliary_data_through_degree","degree_shift","degree_shift","degree_shift","degree_shift","f","f","free_module_homomorphism","full_module_homomorphism","generic_zero_homomorphism","get_matrix","get_partial_matrix","hom_pullback","identity_homomorphism","image","images","images","images","kernel","kernels","kernels","kernels","map","matrices","min_degree","min_degree","outputs","prime","quasi_inverse","quasi_inverses","quasi_inverses","quasi_inverses","quotient_homomorphism","s","s","source","source","source","source","source","t","target","target","target","target","target","zero_homomorphism","FreeModuleHomomorphism","MuFreeModuleHomomorphism","UnstableFreeModuleHomomorphism","add_generators_from_big_vector","add_generators_from_matrix_rows","add_generators_from_rows","add_generators_from_rows_ooo","apply_to_basis_element","apply_to_generator","borrow","borrow_mut","compute_auxiliary_data_through_degree","degree_shift","degree_shift","degree_shift","deref","deref_mut","differential_density","drop","extend_by_zero","from","hom_k","image","images","init","into","kernel","kernels","min_degree","min_degree","new","next_degree","ooo_outputs","output","outputs","quasi_inverse","quasi_inverses","set_image","set_kernel","set_quasi_inverse","source","source","target","target","try_from","try_into","type_id","zero_homomorphism","FullModuleHomomorphism","apply_to_basis_element","borrow","borrow_mut","clone","clone_into","compute_auxiliary_data_through_degree","degree_shift","degree_shift","deref","deref_mut","drop","from","from","from_matrices","identity_homomorphism","image","images","init","into","kernel","kernels","matrices","new","quasi_inverse","quasi_inverses","replace_source","replace_target","source","source","target","target","to_owned","try_from","try_into","type_id","zero_homomorphism","GenericZeroHomomorphism","apply_to_basis_element","borrow","borrow_mut","degree_shift","degree_shift","deref","deref_mut","drop","from","init","into","new","source","source","target","target","try_from","try_into","type_id","zero_homomorphism","HomPullback","apply_to_basis_element","borrow","borrow_mut","compute_auxiliary_data_through_degree","degree_shift","deref","deref_mut","drop","from","image","images","init","into","kernel","kernels","map","min_degree","new","quasi_inverse","quasi_inverses","source","source","target","target","try_from","try_into","type_id","QuotientHomomorphism","QuotientHomomorphismSource","apply_to_basis_element","apply_to_basis_element","borrow","borrow","borrow_mut","borrow_mut","degree_shift","degree_shift","deref","deref","deref_mut","deref_mut","drop","drop","f","f","from","from","init","init","into","into","new","new","s","s","source","source","t","target","target","try_from","try_from","try_into","try_into","type_id","type_id","Algebra","Module","ModuleFailedRelationError","act","act","act_by_element","act_by_element","act_by_element_on_basis","act_by_element_on_basis","act_on_basis","algebra","basis_element_to_string","borrow","borrow_mut","compute_basis","compute_basis","deref","deref_mut","dimension","drop","element_to_string","element_to_string","fmt","fmt","from","init","into","is_unit","is_unit","max_computed_degree","max_degree","max_degree","max_generator_degree","max_generator_degree","min_degree","prime","prime","relation","to_string","total_dimension","total_dimension","try_from","try_into","type_id","value","QuotientModule","act_on_basis","act_on_original_basis","algebra","basis_element_to_string","basis_list","borrow","borrow_mut","deref","deref_mut","dimension","drop","flush","fmt","from","init","into","max_computed_degree","max_degree","min_degree","module","new","old_basis_to_new","quotient","quotient_all","quotient_basis_elements","quotient_vectors","reduce","subspaces","to_string","truncation","try_from","try_into","type_id","zero_module","RPSpec","RealProjectiveSpace","act_on_basis","algebra","algebra","basis_element_to_string","borrow","borrow","borrow_mut","borrow_mut","clear_bottom","clear_bottom","coef_adem","coef_milnor","deref","deref","deref_mut","deref_mut","deserialize","dimension","drop","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","from","from_json","init","init","into","into","max","max","max_computed_degree","max_degree","min","min","min_degree","new","to_json","to_string","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","SteenrodModule","from_json","json","zero_module","from_json","SuspensionModule","act","act_by_element","act_by_element_on_basis","act_on_basis","algebra","basis_element_to_string","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","element_to_string","fmt","from","init","inner","into","is_unit","max_computed_degree","max_degree","max_generator_degree","min_degree","new","prime","shift","to_string","total_dimension","try_from","try_into","type_id","zero_module","TensorModule","act","act_helper","act_on_basis","algebra","basis_element_to_string","block_structures","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","fmt","from","init","into","left","max_computed_degree","max_degree","min_degree","new","offset","right","seek_module_num","to_string","try_from","try_into","type_id","zero_module","ZeroModule","zero_module","Element","MilnorPairElement","PairAlgebra","a_multiply","degree","element_from_bytes","element_is_zero","element_to_bytes","new_pair_element","ones","p_tilde","sigma_multiply_basis","twos","ys","SteenrodEvaluator","adem","adem_q","adem_to_milnor","adem_to_milnor_on_basis","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","evaluate_algebra_adem","evaluate_algebra_milnor","evaluate_algebra_node","evaluate_basis_element","evaluate_module_adem","evaluate_p_or_b_list","from","init","into","milnor","milnor_to_adem","milnor_to_adem_on_basis","milnor_to_adem_on_basis_2","milnor_to_adem_on_basis_generic","new","prime","try_from","try_into","type_id","AList","AlgebraBasisElt","AlgebraNode","BasisElt","Bockstein","BocksteinOrSq","IResult","ModuleNode","P","PList","Product","Q","Scalar","Sq","Sum","algebra_expr","algebra_factor","algebra_generator","algebra_term","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","brackets","clone","clone","clone","clone_into","clone_into","clone_into","convert_error","deref","deref","deref","deref_mut","deref_mut","deref_mut","digits","drop","drop","drop","fmt","fmt","fmt","fold_separated","from","from","from","init","init","init","into","into","into","module_expr","module_generator","module_term","p_or_sq","parse_algebra","parse_module","scalar","space","to_adem_basis_elt","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"algebra"],[89,"algebra::adem_algebra"],[108,"algebra::algebra"],[134,"algebra::algebra::adem_algebra"],[263,"algebra::algebra::algebra_trait"],[305,"algebra::algebra::bialgebra_trait"],[308,"algebra::algebra::combinatorics"],[360,"algebra::algebra::field"],[391,"algebra::algebra::milnor_algebra"],[609,"algebra::algebra::pair_algebra"],[644,"algebra::algebra::polynomial_algebra"],[722,"algebra::algebra::steenrod_algebra"],[847,"algebra::combinatorics"],[863,"algebra::field"],[865,"algebra::milnor_algebra"],[901,"algebra::module"],[983,"algebra::module::block_structure"],[1020,"algebra::module::finite_dimensional_module"],[1071,"algebra::module::finitely_presented_module"],[1125,"algebra::module::free_module"],[1225,"algebra::module::hom_module"],[1253,"algebra::module::homomorphism"],[1317,"algebra::module::homomorphism::free_module_homomorphism"],[1365,"algebra::module::homomorphism::full_module_homomorphism"],[1402,"algebra::module::homomorphism::generic_zero_homomorphism"],[1423,"algebra::module::homomorphism::hom_pullback"],[1451,"algebra::module::homomorphism::quotient_homomorphism"],[1490,"algebra::module::module_trait"],[1535,"algebra::module::quotient_module"],[1570,"algebra::module::rpn"],[1622,"algebra::module::steenrod_module"],[1626,"algebra::module::steenrod_module::json"],[1627,"algebra::module::suspension_module"],[1661,"algebra::module::tensor_module"],[1692,"algebra::module::zero_module"],[1694,"algebra::pair_algebra"],[1708,"algebra::steenrod_evaluator"],[1739,"algebra::steenrod_parser"]],"d":["","An Algebra implementing the Steenrod algebra, using the …","","An algebra that can be viewed as an Adem algebra.","A graded algebra over $\\\\mathbb{F}_p$.","","An Algebra equipped with a coproduct operation that makes …","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","An Algebra equipped with a distinguished presentation.","","","","","An algebra that is maybe unstable. Every Algebra …","","","","","","","","The Steenrod algebra using the Adem basis.","","Traits describing algebras, and implementations thereof …","Converts a string to a basis element. This must be a …","degree -> AdemBasisElement -> index","degree -> MilnorBasisElement -> index","Converts a basis element into a string for display.","","degree -> index -> AdemBasisElement","A list of all basis elements of each degree, constructed …","","Computes basis elements up to and including degree.","","Computes a coproduct $\\\\Delta(x)$, expressed as","Decomposes an element of the algebra into a product of …","Decomposes an element into generators.","","Returns the dimension of the algebra in degree degree.","","","","","","","","","","Finite fields over a prime.","","Returns relations that the algebra wants checked to ensure …","Return generators in degree.","","","","","","","","","degree -> first square -> admissible sequence idx -> result","source_deg -> target_deg -> source_op -> target_op","","Computes the product r * s of two basis elements, and adds …","","","Computes the product r * s of a general element r and a …","Computes the product r * s of two general elements, and …","","","This implements the notion of a split pair algebra in the …","","","","This is a list of possible P(R) of each degree, where …","Returns the prime the algebra is over.","","","","","","","","This module includes code for parsing an expression in the …","","","","An Algebra implementing the Steenrod algebra, using the …","An algebra that can be viewed as an Adem algebra.","An Adem basis element for the Steenrod algebra.","","","A Steenrod power $P^i$, or a Bockstein $\\\\beta^\\\\varepsilon$.","","degree -> AdemBasisElement -> index","degree -> index -> AdemBasisElement","A bitset of which $\\\\beta$ Bocksteins are in the element’…","The degree of the element.","","","","degree -> first square -> admissible sequence idx -> result","","Whether to denote the generators as powers $P^i$ or …","A list of which Steenrod powers are in the element’s …","","","","","","","","","","","","","","","","","","","The Steenrod algebra using the Adem basis.","","","","Finite fields over a prime.","","This implements the notion of a split pair algebra in the …","","","An Algebra implementing the Steenrod algebra, using the …","An algebra that can be viewed as an Adem algebra.","An Adem basis element for the Steenrod algebra.","","","A Steenrod power $P^i$, or a Bockstein $\\\\beta^\\\\varepsilon$.","","","","","","","degree -> AdemBasisElement -> index","","degree -> index -> AdemBasisElement","","A bitset of which $\\\\beta$ Bocksteins are in the element’…","","","","","","","","","","","","","","","","The degree of the element.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","This function expresses $Sq^x$ (current) in terms of the …","We return Adem relations $b^2 = 0$, $P^i P^j = \\\\cdots$ for …","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns an iterator over the element’s decomposition.","","","Reduce a Steenrod monomial at the prime 2.","","degree -> first square -> admissible sequence idx -> result","","","","","","","","","","","","Constructs a new AdemAlgebra.","","","Whether to denote the generators as powers $P^i$ or …","","","","A list of which Steenrod powers are in the element’s …","","Shifts a Vec’s elements back by offset.","","","","","","","","","","","","","","","","","A graded algebra over $\\\\mathbb{F}_p$.","An Algebra equipped with a distinguished presentation.","An algebra that is maybe unstable. Every Algebra …","","Converts a string to a basis element. This must be a …","Converts a basis element into a string for display.","Computes basis elements up to and including degree.","Decomposes an element into generators.","Returns a list of filtration-one elements in $Ext(k, k)$.","Returns a list of filtration-one elements in $Ext(k, k)$.","Returns the dimension of the algebra in degree degree.","","","Converts a general element into a string for display.","Converts a general element into a string for display.","Returns relations that the algebra wants checked to ensure …","Returns the name of a generator.","Returns the name of a generator.","Return generators in degree.","A magic constant used to identify the algebra in save …","A magic constant used to identify the algebra in save …","Computes the product r * s of a basis element r and a …","Computes the product r * s of a basis element r and a …","","Computes the product r * s of a basis element r and a …","Computes the product r * s of a basis element r and a …","Computes the product r * s of two basis elements, and adds …","","","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","A name for the algebra to use in serialization operations. …","A name for the algebra to use in serialization operations. …","Returns the prime the algebra is over.","An Algebra equipped with a coproduct operation that makes …","Computes a coproduct $\\\\Delta(x)$, expressed as","Decomposes an element of the algebra into a product of …","","","If p is the nth prime, then TAU_DEGREES[n][i] is the …","","If p is the nth prime, then XI_DEGREES[n][i - 1] is the …","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","index ==> degree","","","degree => (first_index, number_of_gens)","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","degree => max_part => list of partitions with maximum part …","","","","","","","","","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","Returns a new Field over the given prime p.","","","","","","","","","","","","","A version of HashMap<MilnorBasisElement, T> that is more …","","","The parts of a PPartMultiplier that involve heap …","","","","","","","","degree -> MilnorBasisElement -> index","","A list of all basis elements of each degree, constructed …","Return the degree and index of $Q_1^e P(x)$.","","","","","","","","","","","","","","","","","","","Update the degree component to the correct degree","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Assert that elt is in the image of the differential. Drop …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Returns true if the new element is not within the bounds","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the profile is that of A(n). This is relevant …","","Checks whether the profile function is valid","","","","","source_deg -> target_deg -> source_op -> target_op","","","","","","","","","","","","","","","","","","","","","","","This compute the first l > k such that (sum + l) choose l …","","","The profile function for the Q part.","","","","Gives a list of PPart’s in degree t.","This is a list of possible P(R) of each degree, where …","","","","","","","A bitmask indicating which of the Q_k we want to include …","","","","","","","","","","","","If true, unspecified p_part entries will be 0. Otherwise …","","","","","","","","","","","","","","","","","","","","","","We have a matrix of the form | s₁ s₂ s₃ …","","This creates a PPartAllocation with enough capacity to …","","","An element in the cohomological degree zero part of the …","","","A lift of an algebra to a split pair algebra. See module …","Compute $A(r, s)$ and write the result to result.","Compute $A(Sq(R), Y_{k, l})$ where $a = Sq(R)$. This …","Actually computes $A(a, Y_{k, l})$ and returns the result.","","","","","","","","","","Assert that elt is in the image of the differential. Drop …","Assert that elt is in the image of the differential. Drop …","Returns the argument unchanged.","","Calls U::from(self).","Create a new zero element in the given degree.","","The element p is classified by a filtration on element in …","Same as PairAlgebra::sigma_multiply_basis but with …","Same as PairAlgebra::sigma_multiply_basis but with …","Given $r, s \\\\in \\\\pi_0(A)$, compute $\\\\sigma(r) \\\\sigma(s)$ …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","index ==> degree","degree => (first_index, number_of_gens)","","","","","","","degree => max_part => list of partitions with maximum part …","","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","","","","","","","","The parts of a PPartMultiplier that involve heap …","","","","degree -> MilnorBasisElement -> index","A list of all basis elements of each degree, constructed …","","","","","","","","","","","source_deg -> target_deg -> source_op -> target_op","","","The profile function for the Q part.","","","This is a list of possible P(R) of each degree, where …","","A bitmask indicating which of the Q_k we want to include …","","","","If true, unspecified p_part entries will be 0. Otherwise …","","","","","","","Given a module N and a free module M, this is the module …","A bounded below module over an algebra. To accommodate for …","","A free module.","","A quotient of a module truncated below a fix degree.","This is $\\\\mathbb{RP}_{\\\\mathrm{min}}^{\\\\mathrm{max}}$. The …","","","","","","","","The algebra the module is over.","","","","","","The name of a basis element. This is useful for debugging …","For each degree d, basis_list[d] is a list of basis …","","","","","The dimension of a module at the given degree","","","","","","degree -> internal index of first generator in degree","","","","","degree -> internal_gen_idx -> the offset of the generator …","","","","","","","","","","The maximum t for which the module is fully defined at t. …","","The minimum degree of the module, which is required to be …","","","The underlying module","","","","","","","","","","","","","","","","","The subspaces that we quotient out by","","","","Everything above this degree is quotiented out.","","","","A block structure is a structure that makes it efficient …","","Add source vector “source” to the block indicated by …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Convert (generator, basis element) to basis element of the …","","","Find the block corresponding to a given generator.","Find the (generator, basis element) pair corresponding to …","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","This function will panic if you call it with input such …","This function will panic if you call it with input such …","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","This should really by try_from but orphan rules prohibit …","","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","A free module.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","degree -> internal index of first generator in degree","","","","","Given a generator (gen_deg, gen_idx), find the first index …","degree -> internal_gen_idx -> the offset of the generator …","","","","","","Given a generator (gen_deg, gen_idx), find the first index …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Iterate the degrees and offsets of each generator up to …","Iterate the degrees and indices of each generator up to …","Given an element in a degree, iterate through the slices …","","","","","","","","","","","","","","","Given a vector that represents an element in degree degree…","","","","","","","","","","","","","","","","","Given a module N and a free module M, this is the module …","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","A ModuleHomomorphism that simply records the matrix of the …","","Given a map $\\\\mathtt{map}: A \\\\to B$ and hom modules …","","Each ModuleHomomorphism may come with auxiliary data, …","","","","","","","","","Attempt to apply quasi inverse to the input. Returns …","Calling this function when …","Compute the auxiliary data associated to the homomorphism …","","","degree shift, such that ouptut_degree = input_degree - …","","","","","","","","Write the matrix of the homomorphism at input degree degree…","Get the values of the homomorphism on the specified inputs …","","","","","","","","","","","","The matrices of the module homomorphism. Unspecified …","","","","","","","","","","","","","","","","","","","","","","","","","","","","A MatrixSlice will do but there is no applicaiton of this …","","Add the image of a bidegree out of order. See …","","","","","","","","degree shift, such that ouptut_degree = input_degree - …","","","","","","Returns the argument unchanged.","Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, …","","","","Calls U::from(self).","","","","","","","List of outputs that have been added out of order","","","","","","","","","","","","","","","","A ModuleHomomorphism that simply records the matrix of the …","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","Calls U::from(self).","","","The matrices of the module homomorphism. Unspecified …","","","","This function replaces the source of the …","See replace_source","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","Given a map $\\\\mathtt{map}: A \\\\to B$ and hom modules …","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","A bounded below module over an algebra. To accommodate for …","","The length of input need not be equal to the dimension of …","The length of input need not be equal to the dimension of …","","","","","","The algebra the module is over.","The name of a basis element. This is useful for debugging …","","","Compute internal data of the module so that we can query …","Compute internal data of the module so that we can query …","","","The dimension of a module at the given degree","","Gives the name of an element. The default implementation …","Gives the name of an element. The default implementation …","","","Returns the argument unchanged.","","Calls U::from(self).","Whether this is the unit module.","Whether this is the unit module.","The maximum t for which the module is fully defined at t. …","max_degree is the a degree such that if t > max_degree, …","max_degree is the a degree such that if t > max_degree, …","Maximum degree of a generator under the Steenrod action. …","Maximum degree of a generator under the Steenrod action. …","The minimum degree of the module, which is required to be …","The prime the module is over, which should be equal to the …","The prime the module is over, which should be equal to the …","","","","","","","","","A quotient of a module truncated below a fix degree.","","","","","For each degree d, basis_list[d] is a list of basis …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","The underlying module","","","","","","Arguments","","The subspaces that we quotient out by","","Everything above this degree is quotiented out.","","","","","","This is $\\\\mathbb{RP}_{\\\\mathrm{min}}^{\\\\mathrm{max}}$. The …","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","An element in the cohomological degree zero part of the …","","A lift of an algebra to a split pair algebra. See module …","Compute $A(r, s)$ and write the result to result.","","","","","Create a new zero element in the given degree.","","The element p is classified by a filtration on element in …","Given $r, s \\\\in \\\\pi_0(A)$, compute $\\\\sigma(r) \\\\sigma(s)$ …","","","","","Express $Q_{qi}$ in the adem basis.","","Translate from the adem basis to the milnor basis, adding …","","","","","","","","","","","","Returns","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Surround with brackets","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","Pad both ends with whitespace","","","","","","","","","","","","",""],"i":[51,0,50,0,0,0,0,17,17,0,0,51,0,50,0,0,0,0,0,0,0,0,0,0,108,0,59,1,11,59,109,1,11,0,59,109,95,95,61,49,59,110,67,0,1,1,11,49,109,109,0,109,61,61,1,11,7,0,111,0,0,7,1,11,67,59,110,67,67,67,1,11,0,49,109,109,11,59,109,38,11,109,109,112,0,0,1,11,49,0,0,0,25,25,0,108,1,1,18,18,1,1,1,1,1,18,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,25,0,1,108,1,1,1,1,1,1,1,1,18,1,18,25,1,18,25,18,18,1,1,1,1,1,1,1,18,1,18,25,1,18,25,1,1,1,1,1,18,25,1,1,1,18,18,18,18,1,18,1,1,1,18,18,25,1,18,25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,18,18,1,18,25,1,18,25,18,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,18,1,1,1,18,1,0,1,1,18,1,18,1,1,18,25,1,18,25,1,18,25,1,0,0,0,0,59,59,59,61,59,59,59,110,67,59,59,61,61,61,61,59,59,59,59,67,110,110,59,110,67,59,59,67,110,110,59,59,67,110,110,59,59,59,0,95,95,0,0,0,0,0,10,0,10,37,10,37,10,37,10,37,10,37,10,37,10,10,10,10,10,0,10,37,37,10,10,37,37,37,10,37,37,10,37,10,10,37,10,37,37,0,10,37,10,37,10,37,0,0,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,0,46,0,0,0,0,0,0,0,0,0,0,11,46,11,11,11,11,11,11,11,11,46,41,39,42,43,11,46,41,39,42,43,39,39,39,46,42,11,39,11,11,11,11,11,11,41,39,42,43,11,39,11,46,41,39,42,43,11,46,41,39,42,43,41,46,46,43,11,11,11,11,11,46,41,39,42,43,11,11,11,41,39,41,41,41,39,39,39,39,11,11,11,41,39,39,42,42,11,46,41,39,42,43,39,11,11,11,11,11,11,11,11,39,41,39,11,42,42,11,46,41,39,42,43,46,42,11,46,41,39,42,43,46,46,41,41,41,43,11,111,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,46,11,11,46,46,11,46,41,39,43,11,11,11,11,11,46,11,11,11,41,39,0,46,42,46,41,11,39,11,39,42,41,11,11,11,46,41,39,42,43,11,46,41,39,42,43,11,46,41,39,42,43,11,46,42,43,43,0,113,0,0,0,113,0,0,114,114,114,114,114,114,113,113,113,113,113,114,114,114,113,114,113,113,113,113,0,114,114,114,114,0,114,0,0,0,109,49,7,49,7,49,49,109,109,109,7,49,49,7,49,7,49,7,49,49,49,49,49,109,109,49,49,109,109,109,49,7,49,49,109,109,7,49,7,49,7,109,109,109,109,109,109,7,109,109,109,109,109,109,109,109,49,7,49,109,109,109,109,109,109,109,49,49,49,7,49,7,49,7,49,51,50,0,0,17,17,51,50,0,0,0,50,50,52,50,50,17,50,51,52,17,50,51,52,51,51,50,50,50,50,50,17,50,51,52,17,50,51,52,52,50,50,50,50,0,17,50,51,52,50,50,50,50,51,51,51,51,50,50,51,51,52,17,50,51,52,50,51,50,50,50,17,50,51,52,17,50,51,52,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,52,50,50,50,52,50,50,112,50,51,50,51,17,50,51,51,52,17,50,50,50,51,52,17,50,51,52,0,0,0,0,10,10,0,37,10,37,10,37,10,37,0,0,0,38,46,0,0,0,0,0,0,0,0,46,11,11,46,39,46,46,43,11,11,46,43,111,11,11,46,41,39,43,11,11,41,39,46,46,41,11,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,60,63,60,68,90,73,68,63,87,0,73,94,90,63,115,0,0,0,115,68,60,68,69,69,68,65,60,0,0,65,93,94,65,90,63,90,63,65,68,87,0,60,65,68,68,69,69,0,62,65,94,0,93,73,115,0,87,0,73,0,87,62,0,89,0,0,55,55,56,55,56,55,56,55,56,55,56,55,56,55,56,55,56,55,55,56,56,55,55,56,55,56,55,55,55,56,55,56,55,56,55,0,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,0,0,65,65,65,65,65,116,65,116,65,65,116,65,116,65,65,116,65,65,65,65,65,65,65,116,116,65,65,65,116,65,65,65,116,65,116,65,65,65,65,65,65,65,65,65,65,116,65,116,65,116,65,65,0,0,0,0,0,0,68,68,68,68,68,68,68,68,115,72,69,68,115,72,69,69,69,68,72,68,115,72,69,68,115,72,69,68,68,115,72,69,115,68,68,69,68,115,72,69,115,72,68,68,68,69,69,68,68,68,68,115,72,69,68,68,115,72,69,72,68,68,68,68,68,68,68,72,68,68,72,68,68,72,69,68,69,68,115,69,68,68,115,72,69,68,115,72,69,68,115,72,69,68,0,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,0,0,0,0,0,0,0,0,0,81,81,0,0,81,81,81,81,81,81,78,80,82,85,86,0,0,0,81,81,0,117,81,78,80,83,81,78,80,83,83,80,81,78,78,81,81,78,80,83,0,85,86,81,78,80,82,83,85,81,78,80,82,83,118,0,0,0,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,0,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,0,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,0,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,0,0,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,86,85,85,86,85,86,85,86,85,86,63,0,0,63,63,63,63,63,63,63,63,63,62,62,63,63,62,62,63,62,63,63,62,62,62,62,62,63,63,63,63,63,63,63,63,63,63,62,62,63,63,62,62,62,62,0,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,0,0,90,90,90,90,90,91,90,91,90,91,0,0,90,91,90,91,91,90,90,91,90,90,90,90,90,91,90,91,90,90,91,90,91,90,91,90,90,90,91,90,90,90,90,90,91,90,91,90,91,90,0,0,0,92,0,0,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,0,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,0,89,113,0,0,113,114,113,113,113,113,114,113,113,114,114,0,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,98,0,0,97,100,0,0,0,98,98,97,98,97,100,97,0,0,0,0,98,97,100,98,97,100,0,98,97,100,98,97,100,0,98,97,100,98,97,100,0,98,97,100,98,97,100,0,98,97,100,98,97,100,98,97,100,0,0,0,0,0,0,0,0,100,98,97,100,98,97,100,98,97,100,98,97,100],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],0,[2,3],0,0,[[4,5],6],[[],[[8,[7]]]],0,0,0,[4],[4],[[4,5],9],[[4,5],9],[[4,5],9],0,[4,5],[[4,4],5],[[4,4],5],0,0,0,0,0,[4,5],[[],10],0,[[4,5],[[3,[5]]]],[4,[[9,[9]]]],[4,[[9,[5]]]],0,0,0,0,[[],11],0,[12],0,0,0,[[13,14,4,5,4,15,4]],[[13,14,4,5,4,5]],[[13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,15,4]],0,0,0,0,[4,5],[[],10],0,[[],16],[[],16],0,0,[[4,5],6],[[4,5]],[[],17],0,0,0,0,0,0,0,0,0,0,0,[[],1],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,13,14,4,15,4]],[[],1],[1,1],[[1,4,5],18],[[1,2],3],[[1,18],5],0,[[1,4,5],6],0,[[1,14,14]],0,[[]],[[]],[[]],[[]],[[]],[[]],[18,18],[[]],[[1,4]],[[1,4,5],9],[[1,4,5],9],[[1,4,5],9],[[1,4,5],9],[[1,4,5],9],[1,9],0,[5],[5],[5],[5],[5],[5],[[1,4],5],[[4,4],5],[[1,4,4],5],[[4,4],5],[5],[5],[5],[[1,4,19],20],[[],21],[[1,22],20],[[18,18],21],[[],21],[[],21],[[],21],0,[[18,16],14],0,[[]],[[1,23],24],[[18,23],24],[[18,23],24],[[25,23],24],[[]],[[]],[[]],[[1,4]],[[1,4]],[[1,4]],[[1,4]],[[1,4]],[[1,4]],[[1,[27,[[9,[26]]]],4,4,5],26],[[1,4]],[[1,[27,[[9,[26]]]],4,4,5],26],[[1,4],[[9,[9]]]],[[1,4,5],6],[[1,4],[[9,[5]]]],[1,21],0,[[[0,[28,29]],30],31],[[18,32]],[[],5],[[],5],[[],5],[[]],[[]],[[]],[18,33],[1,14],[[1,13,14,18,4]],[[1,13,18,4,4,4,21]],[[1,13,14,18,4,4,4,21]],0,[[13,14,4,5,4,15,4]],[[13,14,4,5,4,15,4]],[[1,13,14,4,5,4,5]],[[13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[1,13,14,4,5,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[1,13,14,4,5,4,5,4]],[[16,21],1],[[1,4]],0,0,[1,5],[1,2],[1,16],0,[1,4],[[9,34]],[[1,14,4,5,4,5]],[[1,18,14,14],5],[[]],[[],6],[[],6],[[1,18],[[3,[5]]]],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[],36],0,0,0,0,0,[2,3],[[4,5],6],[4],[[4,5],9],[[],9],[[],9],[4,5],[[4,4],5],[[4,4],5],[[4,15],6],[[4,15],6],[4,[[9,[9]]]],[[4,5],6],[[4,5],6],[4,[[9,[5]]]],[[],14],[[],14],[[13,14,4,5,4,15]],[[13,14,4,5,4,15]],[[13,14,4,5,4,15,4]],[[13,14,4,5,4,15,4]],[[13,14,4,5,4,15,4]],[[13,14,4,5,4,5]],[[13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[13,14,4,15,4,5]],[[13,14,4,15,4,5]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,15]],[[13,14,4,15,4,15]],[[13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[],2],[[],2],[[],16],0,[[4,5],9],[[4,5],9],0,0,0,0,0,[[10,4,5]],[[16,14,14,14,14,14],14],[[]],[[]],[[]],[[]],[5],[5],[5],[5],[5],[5],[[]],[[]],[[10,4,5],5],0,[[10,4],5],[[10,4],5],0,[[16,21,4],9],[[],5],[[],5],0,[[10,5]],[[]],[[]],[[]],[[]],[16,10],[[4,14,[27,[4]]],37],[37,3],0,0,[[10,4],[[9,[26]]]],0,0,0,0,[37,21],[16,[[27,[4]]]],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[16,[[27,[4]]]],0,[[38,2],3],[[38,4,5],6],[[]],[[]],[[38,4]],[[38,4,5],9],[[38,4,5],9],[38,9],[5],[5],[[38,4],5],[[4,4],5],[5],[[38,4,15],6],[[38,23],24],[[]],[[],5],[[]],[[13,14,4,5,4,15,4]],[[38,13,14,4,5,4,5]],[[13,14,4,5,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,15,4]],[16,38],[38,16],0,[[],6],[[],35],[[],35],[[],36],0,0,0,0,0,0,0,0,0,0,0,0,[[11,13,14,4,15,4]],0,[[11,4,5],39],[[11,2],3],[[11,39],5],0,[[11,4,5],6],0,[[11,14,40]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[39,39],[[]],[[39,39]],0,0,[[11,4]],[[39,16]],[[11,4]],[[11,4,5],9],[[11,4,5],9],[[11,4,5],9],[[11,4,5],9],[[11,4,5],9],[[],41],[[],39],[[],42],[[],43],[11,9],0,[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[44,[[35,[41]]]],0,0,0,[[11,4],5],[[4,4],5],[[4,4],5],[[11,4,4],5],[5],[5],[5],[5],[5],[5],[[11,4,19],20],[[],21],[[11,22],20],[[41,41],21],[[39,39],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[39,16],14],0,[[]],[[11,23],24],[[41,23],24],[[39,23],24],[[39,23],24],[[42,23],24],[[42,23],24],[[]],[[]],[[]],[[]],[[]],[[]],[[45,4],39],[[11,4]],[[11,4]],[[11,4]],[[11,4],[[9,[9]]]],[[11,4,5],6],[[11,4],[[9,[5]]]],[11,21],0,[[[0,[28,29]],30],31],[[41,5],40],[[39,32]],[[45,[27,[40]]],21],[[42,5]],[[42,5]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[46,43],[[]],[[41,21],21],[41,21],[41,21],0,[11,14],[[],11],[11,11],0,[[11,13,14,39,39]],[[11,13,14,39,4,15]],[[11,13,14,39,4,15,43],43],[[11,13,14,4,5,4,15]],[[13,14,4,5,4,15,4]],[[13,14,4,5,4,15,4]],[[11,13,14,4,5,4,5]],[[11,13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,5,4]],[[11,13,14,4,15,4,15]],[[13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[11,39,14],9],[[11,13,14,39,39,4,43],43],[[16,21],11],[[16,45,45,43,14,4],46],[[11,4]],[[16,41,21],11],[46,[[3,[14]]]],[[46,40,40,40],40],0,0,0,0,0,[11,5],[[11,4],[[27,[45]]]],0,[11,2],[11,16],[46,16],[11,41],0,[11,4],0,0,[[],14],0,[[42,5,5]],0,[[41,47],35],[[11,14,4,5,4,5]],[[]],[[],6],[[],6],[[],6],0,[[11,39],[[3,[5]]]],[[11,14,40],3],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[],36],[[],36],[[],36],[[],36],0,[46,21],[[5,5],42],[5,43],[48],0,0,0,0,0,[[13,14,4,15,4]],[[11,39,5,5,48]],[[11,39,5,5],26],[[]],[[]],0,[5],[5],[5],[[4,19],20],[[],21],[22,20],[[]],[[]],[[]],[[],5],[[]],[4],0,[[],5],[[14,4,15,4,15]],[[14,4,15,4,15]],[[14,4,5,4,5]],0,[[],35],[[],35],0,[[],36],0,0,0,0,0,[[],[[8,[7]]]],[[]],[[]],[[]],[[]],[49,49],[[]],[4],[4],[4],[[],7],0,[5],[5],[5],[5],[5],[5],[[49,49],21],[[],21],[[],21],[[],21],0,[4,5],[[],10],[[49,23],24],[[49,23],24],[[26,26]],[[26,26]],[[4,5],[[3,[5]]]],[[]],[[]],[[[0,[28,29]],30],31],[[49,32]],[[4,5],49],[[4,5],49],0,[[],5],[[],5],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[49,5],[49,5],0,[[26,14,49,4,26]],[[26,14,49,4,26]],[[49,49],[[3,[14]]]],[[49,49],[[3,[14]]]],[[26,14,4,26,49]],[[26,14,4,26,49]],[[26,14,4,26,4,26]],[[26,14,4,26,4,26]],[16,49],[[],7],0,[4,5],[[],10],[[],16],[[4,5],6],[[4,5]],[[49,4]],[[49,4]],[[]],[[],6],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],0,0,0,0,0,0,0,0,0,0,0,0,[[50,13,14,4,15,4]],[[],1],0,[[50,2],3],[[50,4,5],6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[51,51],[[]],[[50,4]],[[50,4,5],9],[[50,4,5],9],[[50,4,5],9],[50,9],[5],[5],[5],[5],[5],[5],[5],[5],[44,[[35,[52]]]],[[50,4],5],[[50,4,4],5],[[4,4],5],[[4,4],5],0,[5],[5],[5],[5],[[50,4,19],20],[[],21],[[50,22],20],[[50,4,15],6],[[51,51],21],[[],21],[[],21],[[],21],[[]],[[50,23],24],[[51,23],24],[[51,23],24],[[52,23],24],[[]],[[]],[[]],[[]],[[12,51,21],[[53,[50]]]],[2,[[35,[51]]]],[[50,4],[[9,[9]]]],[[50,4,5],6],[[50,4],[[9,[5]]]],[[],5],[[],5],[[],5],[[],5],[[]],[[]],[[]],[[]],[50,14],[[],11],[[50,13,14,4,5,4,15]],[[13,14,4,5,4,15,4]],[[13,14,4,5,4,15,4]],[[50,13,14,4,5,4,15,4]],[[50,13,14,4,5,4,5]],[[50,13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[13,14,4,5,4,5,4]],[[50,13,14,4,15,4,5]],[[13,14,4,15,4,5,4]],[[13,14,4,15,4,5,4]],[[50,13,14,4,15,4,5,4]],[[50,13,14,4,15,4,15]],[[50,13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[13,14,4,15,4,15,4]],[[50,4]],0,[50,5],[50,2],[50,16],0,[[50,14,4,15,4,15]],[[50,14,4,5,4,5]],[[],17],[50,17],[[]],[[],6],[[],6],[[],35],[[],35],[[],35],[2,[[35,[51]]]],[[],35],[[],35],[50,[[35,[1]]]],[50,[[35,[11]]]],[[],35],[[],35],[[],35],[[],36],[[],36],[[],36],[[],36],0,0,0,[[16,14,14,14,14,14],14],0,0,[[16,21,4],9],0,0,0,0,0,0,0,[16,[[27,[4]]]],[16,[[27,[4]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],11],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[13,14,4,5,4,5]],0,[[],54],0,0,0,0,0,[[4,5],6],0,0,0,0,0,[4,5],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],4],0,[[],4],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[54,4]],0,0,[[55,13,14,4,5,15]],0,0,0,[[]],[[]],[[]],[[]],[5],[5],[5],[5],[5],[5],[[56,23],24],[[55,23],24],[[]],[[]],[[55,4,5,5],5],0,0,[[55,4,5],[[57,[5]]]],[[55,5],56],[[],5],[[],5],[[]],[[]],[[[58,[[9,[5]]]]],55],[55,5],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],0,[[[60,[59]],13,14,4,5,4,5]],[[[60,[59]],4,5,4,5],26],[[[60,[59]],4,5,4,5],26],0,[[[60,[61]]],12],[[[60,[59]],4,6]],[[[60,[59]]],54],0,[[[54,[59]],[58,[5]]],[[58,[[58,[[9,[[9,[26]]]]]]]]]],[[[60,[59]],4,5],6],[[]],[[]],[[[60,[61]],4,4],[[35,[62]]]],[[[60,[59]]],[[60,[59]]]],[[]],[[[60,[59]],4]],[5],[5],[[[60,[59]],4],5],[5],[[[60,[59]],[60,[59]]],21],[[],21],[[],21],[[],21],[[[60,[61]],4,4]],[[[60,[59]],23],24],[[]],[63,60],[[[54,[61]],12],[[53,[[60,[61]]]]]],0,0,[[],5],[[]],[[[60,[59]]],4],[[[60,[59]]],[[3,[4]]]],[[[60,[59]]],4],0,[[[54,[59]],6,[58,[5]]],[[60,[59]]]],[[[60,[61]],64,2,21],53],[[[60,[59]],4,5,4,5,[27,[14]]]],[[[60,[59]],4,5,6]],[[[60,[59]],2],3],[[[60,[59]],[60,[59]]],[[35,[6]]]],[[[60,[61]],12]],[[]],[[],6],[[],35],[[],35],[[],36],[[[54,[59]],4],[[60,[59]]]],0,0,[[[65,[59]],13,14,4,5,4,5]],[[[65,[59]],4,[9,[6]]]],[[[65,[59]],4,[9,[26]]]],[[[65,[59]]],[[54,[59]]]],[[[65,[59]],4,5],6],[[]],[[]],[[]],[[]],[[[65,[59]],4]],[5],[5],[5],[5],[[[65,[59]],4],5],[5],[5],[[[65,[59]],[65,[59]]],21],[[],21],[[],21],[[],21],[[[65,[59]],23],24],[[[65,[59]],4,5],5],0,[[]],[[]],[[[54,[59]],12],[[53,[[65,[59]]]]]],[[[65,[59]],4,5],34],0,[[[65,[59]]],[[54,[[66,[59]]]]]],0,0,[[],5],[[],5],[[]],[[]],0,[[[65,[59]]],4],[[[65,[59]]],[[3,[4]]]],[[[65,[59]]],4],0,0,[[[54,[59]],6,4],[[65,[59]]]],0,[[],6],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[[54,[59]],4],[[65,[59]]]],0,0,0,0,0,0,[[[68,[67]],13,14,4,5,4,15]],[[[68,[67]],13,14,4,5,4,5]],[[[68,[67]],4,5,[3,[[9,[6]]]]]],[[[68,[67]]],[[54,[67]]]],0,0,[[[68,[67]],4,5],6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[69,69],[[]],[[[68,[67]],4]],0,[5],[5],[5],[5],[5],[5],[5],[5],[[[68,[67]],4],5],[5],[5],[5],[5],0,[[[68,[67]],4]],[[[68,[67]],23],24],[[69,23],24],[[]],[[]],[[]],[[]],0,0,0,[[[68,[67]]],[[70,[[9,[6]]]]]],0,0,0,[[[68,[67]],4,4,5],5],0,[[[68,[67]],4,5],69],[[],5],[[],5],[[],5],[[],5],[[[68,[67]],4,5],5],[[]],[[]],[[]],[[]],[[]],[[[68,[67]],[71,[4]]],33],[[[68,[67]],4],33],[[[68,[67]],4,15],33],[[[68,[67]]],4],[[[68,[67]]],[[3,[4]]]],[[[68,[67]]],4],0,0,0,[[[54,[67]],6,4],[[68,[67]]]],[[[72,[67,33]]],3],0,[[[68,[67]],4],5],0,0,[[[68,[67]],4,5,4,5],5],0,[[[68,[67]],4,4,5,15],15],0,[[]],[[],6],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[],36],[[],36],[[[54,[67]],4],[[68,[67]]]],0,[[[73,[63]],13,14,4,5,4,5]],[[[73,[63]]],54],0,[[[73,[63]],4,5],6],0,[[]],[[]],[[[73,[63]],4]],[5],[5],[[[73,[63]],4],5],[5],[[[73,[63]],23],24],[[]],[[],5],[[]],[[[73,[63]]],4],[[[73,[63]]],4],[[[54,[66]],[54,[63]]],[[73,[63]]]],[[[73,[63]]],[[54,[66]]]],0,[[[73,[63]]],[[54,[63]]]],0,[[],6],[[],35],[[],35],[[],36],0,0,0,0,0,0,0,0,0,0,0,0,0,[[13,14,4,15]],[[13,4,15],21],[[13,14,4,5]],[4],[4],[[],4],0,0,0,0,0,0,0,0,[[74,4]],[[4,[27,[5]]],75],0,[54],[4,[[3,[76]]]],0,0,0,[4,[[3,[76]]]],0,0,0,0,0,[[],4],0,0,[[],16],[4,[[3,[77]]]],0,0,0,0,0,0,[[],54],0,0,0,0,0,[[],54],0,0,0,0,[[54,54,4]],0,0,0,[[[78,[63]],4,15]],[[[78,[63]],4,74]],[[[78,[63]],4,[9,[26]]]],[[[78,[63]],4,[9,[26]]],[[57,[4]]]],[[[78,[63]],13,14,4,5]],[[[78,[63]],26,14,4,5]],[[]],[[]],[[[78,[63]],4]],[[[78,[63]]],4],[[[78,[63]]],4],0,[5],[5],[[[78,[63]],4],79],[5],[[[78,[63]],4]],[[]],[[[78,[[68,[67]]]],4],[[9,[[9,[14]]]]]],[[[78,[63]],4],[[3,[76]]]],0,[[],5],[[]],[[[78,[63]],4],[[3,[76]]]],0,[[[78,[63]]],4],0,[[[54,[68]],[54,[63]],4],[[78,[63]]]],[[[78,[63]]],4],[[[78,[63]]],[[9,[4]]]],[[[78,[63]],4,5],26],0,[[[78,[63]],4],[[3,[77]]]],0,[[[78,[63]],4,[3,[76]]]],[[[78,[63]],4,[3,[76]]]],[[[78,[63]],4,[3,[77]]]],[[[78,[63]]],54],0,[[[78,[63]]],54],0,[[],35],[[],35],[[],36],[[[54,[68]],[54,[63]],4],[[78,[63]]]],0,[[[80,[63,63]],13,14,4,5]],[[]],[[]],[[[80,[63,63]]],[[80,[63,63]]]],[[]],[[[80,[63,63]],4]],[[[80,[63,63]]],4],0,[5],[5],[5],[81,[[80,[63,63]]]],[[]],[[[54,[63]],[54,[63]],4,[58,[75]]],[[80,[63,63]]]],[[[54,[63]]],[[80,[63,63]]]],[[[80,[63,63]],4],[[3,[76]]]],0,[[],5],[[]],[[[80,[63,63]],4],[[3,[76]]]],0,0,[[[54,[63]],[54,[63]],4],[[80,[63,63]]]],[[[80,[63,63]],4],[[3,[77]]]],0,[[[80,[63,63]],[54,[63]]],[[80,[63,63]]]],[[[80,[63,63]],[54,[63]]],[[80,[63,63]]]],[[[80,[63,63]]],54],0,[[[80,[63,63]]],54],0,[[]],[[],35],[[],35],[[],36],[[[54,[63]],[54,[63]],4],[[80,[63,63]]]],0,[[[82,[63,63]],13,14,4,5]],[[]],[[]],[[[82,[63,63]]],4],0,[5],[5],[5],[[]],[[],5],[[]],[[[54,[63]],[54,[63]],4],[[82,[63,63]]]],[[[82,[63,63]]],54],0,[[[82,[63,63]]],54],0,[[],35],[[],35],[[],36],[[[54,[63]],[54,[63]],4],[[82,[63,63]]]],0,[[[83,[63]],13,14,4,5]],[[]],[[]],[[[83,[63]],4]],[[[83,[63]]],4],[5],[5],[5],[[]],[[[83,[63]],4],[[3,[76]]]],0,[[],5],[[]],[[[83,[63]],4],[[3,[76]]]],0,0,[[[83,[63]]],4],[[[54,[[73,[63]]]],[54,[[73,[63]]]],[54,[[84,[66]]]]],[[83,[63]]]],[[[83,[63]],4],[[3,[77]]]],0,[[[83,[63]]],54],0,[[[83,[63]]],54],0,[[],35],[[],35],[[],36],0,0,[[[85,[81]],13,14,4,5]],[[[86,[81]],13,14,4,5]],[[]],[[]],[[]],[[]],[[[85,[81]]],4],[[[86,[81]]],4],[5],[5],[5],[5],[5],[5],0,0,[[]],[[]],[[],5],[[],5],[[]],[[]],[[[54,[81]],[54,[87]],[54,[87]]],[[85,[81]]]],[[[54,[81]],[54,[87]]],[[86,[81]]]],0,0,[[[85,[81]]],54],[[[86,[81]]],54],0,[[[85,[81]]],54],[[[86,[81]]],54],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],0,0,0,[[13,14,4,5,4,15]],[[13,14,4,5,4,15]],[[13,14,4,15,4,15]],[[13,14,4,15,4,15]],[[13,14,4,15,4,5]],[[13,14,4,15,4,5]],[[13,14,4,5,4,5]],[[],54],[[4,5],6],[[]],[[]],[4],[4],[5],[5],[4,5],[5],[[4,15],6],[[4,15],6],[[62,23],24],[[62,23],24],[[]],[[],5],[[]],[[],21],[[],21],[[],4],[[],[[3,[4]]]],[[],[[3,[4]]]],[[],[[3,[4]]]],[[],[[3,[4]]]],[[],4],[[],16],[[],16],0,[[],6],[[],5],[[],5],[[],35],[[],35],[[],36],0,0,[[[87,[63]],13,14,4,5,4,5]],[[[87,[63]],13,14,4,5,4,5]],[[[87,[63]]],54],[[[87,[63]],4,5],6],0,[[]],[[]],[5],[5],[[[87,[63]],4],5],[5],[[[87,[63]],4]],[[[87,[63]],23],24],[[]],[[],5],[[]],[[[87,[63]]],4],[[[87,[63]]],[[3,[4]]]],[[[87,[63]]],4],0,[[[54,[63]],4],[[87,[63]]]],[[[87,[63]],4,13,15]],[[[87,[63]],4,15]],[[[87,[63]],4]],[[[87,[63]],4,33]],[[[87,[63]],4,88]],[[[87,[63]],4,13]],0,[[],6],0,[[],35],[[],35],[[],36],[[54,4],[[87,[89]]]],0,0,[[[90,[59]],13,14,4,5,4,5]],[[[90,[59]]],[[54,[59]]]],0,[[[90,[59]],4,5],6],[[]],[[]],[[]],[[]],0,0,[[1,4,5,4],21],[[11,4,5,4],21],[5],[5],[5],[5],[44,[[35,[91]]]],[[[90,[59]],4],5],[5],[5],[[[90,[59]],[90,[59]]],21],[[],21],[[],21],[[],21],[[[90,[59]],23],24],[[91,23],24],[[]],[[]],[[[54,[59]],12],[[53,[[90,[59]]]]]],[[],5],[[],5],[[]],[[]],0,0,[[[90,[59]]],4],[[[90,[59]]],[[3,[4]]]],0,0,[[[90,[59]]],4],[[[54,[59]],4,[3,[4]],21],[[90,[59]]]],[[[90,[59]],12]],[[],6],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[[54,[59]],4],[[90,[59]]]],0,[[[54,[50]],12],[[53,[92]]]],0,[[[54,[50]],4],92],[[[54,[50]],12],[[53,[92]]]],0,[[[93,[63]],13,14,4,5,4,15]],[[[93,[63]],13,14,4,15,4,15]],[[[93,[63]],13,14,4,15,4,5]],[[[93,[63]],13,14,4,5,4,5]],[[[93,[63]]],54],[[[93,[63]],4,5],6],[[]],[[]],[[[93,[63]],4]],[5],[5],[[[93,[63]],4],5],[5],[[[93,[63]],4,15],6],[[[93,[63]],23],24],[[]],[[],5],0,[[]],[[[93,[63]]],21],[[[93,[63]]],4],[[[93,[63]]],[[3,[4]]]],[[[93,[63]]],[[3,[4]]]],[[[93,[63]]],4],[[[54,[63]],4],[[93,[63]]]],[[[93,[63]]],16],0,[[],6],[[[93,[63]]],5],[[],35],[[],35],[[],36],[[54,4],[[93,[89]]]],0,[[[94,[63,63]],13,14,4,5,4,15]],[[[94,[63,63]],13,14,4,5,4,15]],[[[94,[63,63]],13,14,4,5,4,5]],[[[94,[63,63]]],[[54,[[0,[59,95]]]]]],[[[94,[63,63]],4,5],6],0,[[]],[[]],[[[94,[63,63]],4]],[5],[5],[[[94,[63,63]],4],5],[5],[[[94,[63,63]],23],24],[[]],[[],5],[[]],0,[[[94,[63,63]]],4],[[[94,[63,63]]],[[3,[4]]]],[[[94,[63,63]]],4],[[[54,[63]],[54,[63]]],[[94,[63,63]]]],[[[94,[63,63]],4,4],5],0,[[[94,[63,63]],4,5],4],[[],6],[[],35],[[],35],[[],36],[[[54,[[0,[59,95]]]],4],[[94,[[0,[63,89]],[0,[63,89]]]]]],0,[[54,4]],0,0,0,[[13,14,4,15,4]],0,[[4,19],20],[[],21],[22,20],[4],0,[[],5],[[14,4,5,4,5]],0,0,0,0,[[96,26,14,14]],[[96,26,14,4,26]],[[96,26,14,4,5]],[[]],[[]],[[96,4]],[5],[5],[[96,4],5],[5],[[96,2],53],[[96,2],53],[[96,[3,[4]],97],53],[[96,[3,[4]],98],53],[[96,2],[[53,[[99,[6]]]]]],[[96,[27,[100]]]],[[]],[[],5],[[]],0,[[96,26,14,4,26]],[[96,26,14,4,5]],[[96,26,14,4,5]],[[96,26,14,4,5]],[16,96],[96,16],[[],35],[[],35],[[],36],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[2,[[102,[2,97,[101,[2]]]]]],[2,[[102,[2,97,[101,[2]]]]]],[2,[[102,[2,98,[101,[2]]]]]],[2,[[102,[2,97,[101,[2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[[104,[2,[103,[2]]]]],88],[98,98],[97,97],[100,100],[[]],[[]],[[]],[2,48],[5],[5],[5],[5],[5],[5],[2,[[102,[2,[0,[105,106]],[101,[2]]]]]],[5],[5],[5],[[98,23],24],[[97,23],24],[[100,23],24],[[[104,[107]],[104,[107]],88],88],[[]],[[]],[[]],[[],5],[[],5],[[],5],[[]],[[]],[[]],[2,[[102,[2,9,[101,[2]]]]]],[2,[[102,[2,6,[101,[2]]]]]],[2,[[102,[2,9,[101,[2]]]]]],[2,[[102,[2,2,[101,[2]]]]]],[2,[[53,[97]]]],[2,[[53,[9]]]],[2,[[102,[2,4,[101,[2]]]]]],[[[104,[2,[103,[2]]]]],88],[[100,4],18],[[]],[[]],[[]],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],36],[[],36],[[],36]],"c":[],"p":[[3,"AdemAlgebra"],[15,"str"],[4,"Option"],[15,"i32"],[15,"usize"],[3,"String"],[3,"PolynomialAlgebraTableEntry"],[3,"OnceVec"],[3,"Vec"],[3,"TruncatedPolynomialMonomialBasis"],[3,"MilnorAlgebra"],[4,"Value"],[4,"SliceMut"],[15,"u32"],[4,"Slice"],[3,"ValidPrime"],[4,"SteenrodAlgebraBorrow"],[3,"AdemBasisElement"],[8,"Read"],[6,"Result"],[15,"bool"],[8,"Write"],[3,"Formatter"],[6,"Result"],[4,"PorBockstein"],[4,"FpVector"],[15,"slice"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[8,"Hasher"],[8,"Iterator"],[15,"isize"],[4,"Result"],[3,"TypeId"],[3,"PartitionIterator"],[3,"Field"],[3,"MilnorBasisElement"],[6,"PPartEntry"],[3,"MilnorProfile"],[3,"Matrix2D"],[3,"PPartAllocation"],[8,"Deserializer"],[6,"PPart"],[3,"PPartMultiplier"],[8,"Serializer"],[8,"FnOnce"],[3,"PolynomialAlgebraMonomial"],[4,"SteenrodAlgebra"],[4,"AlgebraType"],[3,"AlgebraSpec"],[6,"Result"],[3,"Arc"],[3,"BlockStructure"],[3,"GeneratorBasisEltPair"],[3,"Range"],[3,"BiVec"],[8,"Algebra"],[3,"FiniteDimensionalModule"],[8,"GeneratedAlgebra"],[3,"ModuleFailedRelationError"],[8,"Module"],[8,"Fn"],[3,"FinitelyPresentedModule"],[6,"FreeModule"],[8,"MuAlgebra"],[3,"MuFreeModule"],[3,"OperationGeneratorPair"],[3,"OnceBiVec"],[15,"array"],[3,"OffsetIterator"],[3,"HomModule"],[3,"MatrixSliceMut"],[3,"Matrix"],[3,"Subspace"],[3,"QuasiInverse"],[3,"MuFreeModuleHomomorphism"],[15,"f32"],[3,"FullModuleHomomorphism"],[8,"ModuleHomomorphism"],[3,"GenericZeroHomomorphism"],[3,"HomPullback"],[6,"FreeModuleHomomorphism"],[3,"QuotientHomomorphism"],[3,"QuotientHomomorphismSource"],[3,"QuotientModule"],[8,"FnMut"],[8,"ZeroModule"],[3,"RealProjectiveSpace"],[3,"RPSpec"],[6,"SteenrodModule"],[3,"SuspensionModule"],[3,"TensorModule"],[8,"Bialgebra"],[3,"SteenrodEvaluator"],[4,"AlgebraNode"],[4,"AlgebraBasisElt"],[3,"BTreeMap"],[4,"BocksteinOrSq"],[3,"VerboseError"],[6,"IResult"],[8,"ParseError"],[8,"Parser"],[8,"FromStr"],[8,"Copy"],[8,"Clone"],[8,"AdemAlgebraT"],[8,"PolynomialAlgebra"],[8,"UnstableAlgebra"],[8,"MilnorAlgebraT"],[8,"SteenrodAlgebraT"],[8,"PairAlgebra"],[3,"MilnorPairElement"],[3,"GeneratorData"],[3,"FPMIndexTable"],[8,"IdentityHomomorphism"],[8,"ZeroHomomorphism"]]},\ +"algebra":{"doc":"Types and traits for working with various algebras and …","t":"NDNIIEINNDINDNIIIDDEEIIAKAKMMKKMMAKKKKKMKKKOMMMMKKAKKKMMMAKAFMMMKKKKKKMMAMKKMKKMMKKKAAMMMDIDNNEKMMMMMMMMMMMMCCCCCCCCCCCCCCCCCAAAAAAAAADIDNNELKLLLLMLMLMLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLMLLLLLLLLLLLLLMMLLLMLFLLLLLLLLLLLLLLLMIIIIKKKKLLKKKLLKLLKLLLLKLLKKKLLKLLLLKLLLLKIKKRDRDRLFLLLLLLLLLLLLLMLLMFLLMLLLLLLLLMMLMMMMLFLLLLLLFDLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLRMDDIDGDGDGDLMMLLLMLMLLLLLLLLLLLLLMLLLMMLLLLLLLLLLLLLMLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLMMLLLLLLLLLLLMMLKLMLLLLLLLLLLLLLLLLLLLLLLLMMMMMLLMLLLLMLMMFMLMLLLLLLMLLLLLLLLLLLLLLLLLLLLMLLLLRQGDIKFFLLMLLLKKKLLLMLLKMKLLKOMLLMLOMIDDKLLLLLLLLKLMLLLLLLLLLLMKKLLLLKLLLLLLMLLLLLLLLLLMLLLLLLLLLLMKKKKKLLLLLLLLLLMNNDENNNNEEILLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLMLLKLLLLLLLLLLLLLLLLLLLRDDFMMFMMMMMMMFFDMMDIDDGDGDMMMMMMMMMMMMMMKMMMMMMMMMMMMMMQDDGDDIDDDDDCDDGIKMKMMMMMMMMMKMAMMMKMAAAMMMMMMMMMMMMMMMAAMMMMMKMKMMMMMAMMMMMMMMMMAMMMAMMMAMAMAMMAKDDLMMMLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLDLLLMLLLMLLLLLLLLLLLLLLLLLLLLLMMLLLLLMLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLMMLLLLMLLLMMLMLLLLLLLLGDDDDGLLLLMMMMMMLLLLLLLLLLLLMLLLLLLLLLLLLLMLLLLLLLMMMMMLMMMMMLMMMLLLLLLLLLLLLLLLLLMMMMMMMLLMMMLMMLMLMLLLLLLLLLLLLLLLDLLMLMLLLLLLLLLLLLLLLMLMLLLLGDDDIIDDDQQGILLKLLKMMMMMMMAAALLAKLMMMMMLMMMMMMMLMMMMMMLLMMMMMAMMKMMMMMMMKMMMMMMKGDGLLLLLLLLLLLMMMLLLLLLLLMMMLLLMMMLMMMLLLLMMMLMMMLLLLMMMLMMMLLLLDLLLLLLLMLLLLLLLLMLLLMMLLMLLLMLMLLLLLDLLLLMLLLLLLLLMLMLLLLDLLLLLLLLLLMLLLMMLLLMLMLMLLLDDLLLLLLLLLLLLLLMMLLLLLLLLMMLLMLLLLLLLLQIDLLLLLLKKKLLLLLLKLLLLLLLLLLKLLLLKLLMLLLLLLMDLLLLMLLLLLLLLLLLLLLMLLLLLLLMLMLLLLDDLLMLLLLLMMFFLLLLLLLLLLLLLLLLLLLLLMMLLMMLLLLLLLLLLLGFALFDLLLLLLLLLLLLLLLLLMLLLLLLLLMLLLLLLDLLLLLMLLLLLLLLLLLMLLLLLMLLLLLLIKQDIKMKKKKMKKMMDMLLLLLLLLLLLLLLLLLLLMLLLLLLLLLNEENNENGGNNNNNNNNFFFFLLLLLLFMLLLLLLFLLLLLLFLLLLLLFLLLLLLLLLMFFFFFFFFLLLLLLLLLLLLL","n":["Adem","AdemAlgebra","AdemAlgebra","AdemAlgebraT","Algebra","AlgebraType","Bialgebra","BorrowAdem","BorrowMilnor","Field","GeneratedAlgebra","Milnor","MilnorAlgebra","MilnorAlgebra","MilnorAlgebraT","MuAlgebra","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","UnstableAlgebra","adem_algebra","adem_algebra","algebra","basis_element_from_string","basis_element_to_index_map","basis_element_to_index_map","basis_element_to_string","basis_table","basis_table","basis_table","combinatorics","compute_basis","compute_generating_set","coproduct","decompose","decompose_basis_element","degree","dimension","dimension_unstable","dimension_unstable","dispatch_algebra","even_basis_table","excess_table","excess_table","ext","exterior_generators_in_degree","exterior_monomials","field","frobenius_on_generator","generating_relations","generators","generic","generic","index_to_monomial","milnor_algebra","milnor_algebra","module","module_gens_from_json","monomial_to_index","multiplication_table","multiplication_table","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","p","p","pair_algebra","poly","polynomial_generators_in_degree","polynomial_monomials","ppart_table","prime","prime","prime","profile","repr_ext_generator","repr_poly_generator","steenrod_algebra","steenrod_evaluator","steenrod_parser","unstable_enabled","unstable_enabled","valid","AdemAlgebra","AdemAlgebraT","AdemBasisElement","Bockstein","P","PorBockstein","adem_algebra","basis_element_to_index_map","basis_table","bocksteins","degree","even_basis_table","excess_table","generic","multiplication_table","p","p_or_sq","ps","unstable_enabled","AdemAlgebra","AdemAlgebraT","Algebra","AlgebraType","Bialgebra","Field","GeneratedAlgebra","MilnorAlgebra","MilnorAlgebraT","MuAlgebra","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","UnstableAlgebra","adem_algebra","algebra_trait","bialgebra_trait","combinatorics","field","milnor_algebra","pair_algebra","polynomial_algebra","steenrod_algebra","AdemAlgebra","AdemAlgebraT","AdemBasisElement","Bockstein","P","PorBockstein","a_multiply","adem_algebra","adem_algebra","basis_element_from_index","basis_element_from_string","basis_element_to_index","basis_element_to_index_map","basis_element_to_string","basis_table","beps_pn","bocksteins","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","coproduct","decompose","decompose_basis_element","decompose_basis_element_2","decompose_basis_element_generic","default_filtration_one_products","degree","deref","deref","deref","deref_mut","deref_mut","deref_mut","dimension","dimension_unstable","dimension_unstable","dimension_unstable","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","eq","equivalent","equivalent","equivalent","even_basis_table","excess","excess_table","finalize_element","fmt","fmt","fmt","fmt","from","from","from","generate_basis2","generate_basis_element_to_index_map","generate_basis_even","generate_basis_generic","generate_excess_table","generate_multiplication_table_2","generate_multiplication_table_2_step","generate_multiplication_table_generic","generate_multiplication_table_generic_step","generating_relations","generator_to_string","generators","generic","generic","get_hash","hash","init","init","init","into","into","into","iter_filtered","magic","make_mono_admissible","make_mono_admissible_2","make_mono_admissible_generic","multiplication_table","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_inner","new","new_pair_element","p","p_or_sq","p_tilde","prefix","prime","ps","q","shift_vec","sigma_multiply_basis","tail_of_basis_element_to_index","to_owned","to_string","to_string","try_basis_element_to_index","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unstable_enabled","Algebra","GeneratedAlgebra","MuAlgebra","UnstableAlgebra","basis_element_from_string","basis_element_to_string","compute_basis","decompose_basis_element","default_filtration_one_products","default_filtration_one_products","dimension","dimension_unstable","dimension_unstable","element_to_string","element_to_string","generating_relations","generator_to_string","generator_to_string","generators","magic","magic","multiply_basis_element_by_element","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element","multiply_element_by_basis_element","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","prefix","prefix","prime","Bialgebra","coproduct","decompose","MAX_XI_TAU","PartitionIterator","TAU_DEGREES","TruncatedPolynomialMonomialBasis","XI_DEGREES","add_gens_and_calculate_parts","adem_relation_coefficient","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","from","from","gen_deg_idx_to_internal_idx","gen_degrees","generators","generators_up_to_degree","gens","inadmissible_pairs","init","init","initial","internal_idx_to_gen_deg","into","into","into_iter","multiunzip","new","new","next","p","partition","parts","parts","parts","parts_by_max","remaining","search","tau_degrees","try_from","try_from","try_into","try_into","type_id","type_id","xi_degrees","Field","basis_element_from_string","basis_element_to_string","borrow","borrow_mut","compute_basis","coproduct","decompose","default_filtration_one_products","deref","deref_mut","dimension","dimension_unstable","drop","element_to_string","fmt","from","init","into","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element_unstable","new","prime","prime","to_string","try_from","try_into","type_id","ALLOCATION","M","Matrix2D","MilnorAlgebra","MilnorAlgebraT","MilnorBasisElement","MilnorHashMap","MilnorProfile","PPart","PPartAllocation","PPartEntry","PPartMultiplier","a_multiply","ans","base","basis_element_from_index","basis_element_from_string","basis_element_to_index","basis_element_to_index_map","basis_element_to_string","basis_table","beps_pn","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buf","clone","clone_into","clone_into","cols","cols","compute_basis","compute_degree","compute_ppart","coproduct","decompose","decompose_basis_element","decompose_basis_element_ppart","decompose_basis_element_qpart","default","default","default","default","default_filtration_one_products","degree","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","diag_num","diagonal","diagonal","dimension","dimension_unstable","dimension_unstable","dimension_unstable","drop","drop","drop","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","excess","excess_table","finalize_element","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_p","generate_basis_2","generate_basis_generic","generate_excess_table","generating_relations","generator_to_string","generators","generic","generic","get_hash","get_p_part","hash","increment_p_part","index","index_mut","init","init","init","init","init","init","init","inner","into","into","into","into","into","into","into_allocation","into_iter","is_an","is_trivial","is_valid","len","m","magic","milnor_algebra","milnor_algebra","multiplication_table","multiply","multiply_basis_by_element","multiply_basis_by_element_with_allocation","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_qpart","multiply_with_allocation","new","new_from_allocation","new_pair_element","new_with_profile","next","next_val","p","p","p_part","p_part","p_part","p_tilde","ppart_table","ppart_table","prefix","prime","prime","profile","profile","q","q_part","q_part","q_part_default","r","reset","rows","serialize","sigma_multiply_basis","to_owned","to_string","to_string","to_string","truncated","try_basis_element_to_index","try_beps_pn","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","unstable_enabled","update","with_capacity","with_capacity","with_local","AY_CACHE","Element","HashMap","MilnorPairElement","PairAlgebra","a_multiply","a_y_cached","a_y_inner","borrow","borrow_mut","degree","deref","deref_mut","drop","element_from_bytes","element_is_zero","element_to_bytes","finalize_element","finalize_element","from","hash_builder","init","into","new_pair_element","ones","p_tilde","sigma_multiply","sigma_multiply","sigma_multiply_basis","sub","table","try_from","try_into","twos","type_id","unsub","ys","PolynomialAlgebra","PolynomialAlgebraMonomial","PolynomialAlgebraTableEntry","basis_table","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","compute_basis_step","compute_basis_step","compute_generating_set","default","degree","deref","deref","deref_mut","deref_mut","drop","drop","eq","equivalent","equivalent","equivalent","ext","exterior_generators_in_degree","exterior_monomials","fmt","fmt","frobenius_monomial","frobenius_monomial","frobenius_on_generator","from","from","get_hash","hash","index_to_monomial","index_to_monomial","index_to_monomial","init","init","into","into","max_computed_degree","max_computed_degree","min_degree","min_degree","monomial_to_index","monomial_to_index","monomial_to_index","multiply_monomial_by_polynomial","multiply_monomial_by_polynomial","multiply_monomials","multiply_monomials","multiply_polynomial_by_monomial","multiply_polynomial_by_monomial","multiply_polynomials","multiply_polynomials","new","new","poly","polynomial_generators_in_degree","polynomial_monomials","prime","repr_ext_generator","repr_poly_generator","set_monomial_degree","set_monomial_degree","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","valid","Adem","AdemAlgebra","AlgebraSpec","AlgebraType","BorrowAdem","BorrowMilnor","Milnor","MilnorAlgebra","SteenrodAlgebra","SteenrodAlgebraBorrow","SteenrodAlgebraT","a_multiply","adem_algebra","algebra","basis_element_from_string","basis_element_to_string","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","coproduct","decompose","decompose_basis_element","default_filtration_one_products","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","dimension","dimension_unstable","dimension_unstable","dimension_unstable","dispatch_steenrod","drop","drop","drop","drop","element_from_bytes","element_is_zero","element_to_bytes","element_to_string","eq","equivalent","equivalent","equivalent","finalize_element","fmt","fmt","fmt","fmt","from","from","from","from","from_json","from_str","generating_relations","generator_to_string","generators","init","init","init","init","into","into","into","into","magic","milnor_algebra","multiply_basis_element_by_element","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_element_by_element_unstable","multiply_basis_elements","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_basis_elements_unstable","multiply_element_by_basis_element","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_basis_element_unstable","multiply_element_by_element","multiply_element_by_element_unstable","multiply_element_by_element_unstable","multiply_element_by_element_unstable","new_pair_element","p","p_tilde","prefix","prime","profile","sigma_multiply","sigma_multiply_basis","steenrod_algebra","steenrod_algebra","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","MAX_XI_TAU","PartitionIterator","TruncatedPolynomialMonomialBasis","adem_relation_coefficient","gen_degrees","gens","inadmissible_pairs","initial","p","partition","parts","parts","parts_by_max","remaining","tau_degrees","xi_degrees","Field","prime","M","MilnorAlgebra","MilnorAlgebraT","MilnorBasisElement","MilnorProfile","PPart","PPartAllocation","PPartEntry","PPartMultiplier","ans","basis_element_to_index_map","basis_table","buf","cols","degree","diag_num","diagonal","diagonal","excess_table","generic","init","len","m","milnor_algebra","multiplication_table","p","p","p_part","p_part","p_part","ppart_table","profile","q_part","q_part","r","rows","truncated","unstable_enabled","Algebra","FDModule","FPModule","FreeModule","GeneratorData","HomModule","Module","ModuleFailedRelationError","MuFreeModule","OperationGeneratorPair","QuotientModule","RealProjectiveSpace","SteenrodModule","SuspensionModule","TensorModule","UnstableFreeModule","ZeroModule","act_on_basis","actions","algebra","algebra","algebra","algebra","algebra","algebra","algebra","basis_element_to_opgen","basis_element_to_opgen","basis_element_to_opgen","basis_element_to_string","basis_list","block_structure","block_structures","block_structures","clear_bottom","dimension","end","finite_dimensional_module","finitely_presented_module","free_module","gen_deg","gen_deg_idx_to_internal_idx","gen_deg_idx_to_internal_idx","gen_deg_idx_to_internal_idx","gen_names","gen_names","gen_names","gen_names","generator_degree","generator_index","generator_to_index","generator_to_index","generator_to_index","generators","graded_dimension","hom_module","homomorphism","index_table","inner","left","map","max","max_computed_degree","min","min_degree","min_degree","min_degree","min_degree","min_degree","module","module_trait","name","name","name","name","name","num_gens","num_gens","num_gens","operation_degree","operation_index","quotient_module","relation","relations","right","rpn","shift","source","start","steenrod_module","subspaces","suspension_module","target","tensor_module","truncation","value","zero_module","zero_module","BlockStructure","GeneratorBasisEltPair","add_block","basis_element_to_block_idx","basis_index","blocks","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","generator_basis_elt_to_index","generator_degree","generator_index","generator_to_block","index_to_generator_basis_elt","init","init","into","into","new","total_dimension","try_from","try_from","try_into","try_into","type_id","type_id","FiniteDimensionalModule","act_on_basis","action","action_mut","actions","actions_to_json","add_generator","algebra","algebra","allocate_actions","basis_element_to_string","borrow","borrow_mut","check_validity","clone","clone_into","compute_basis","deref","deref_mut","dimension","drop","eq","equivalent","equivalent","equivalent","extend_actions","fmt","from","from","from_json","gen_names","graded_dimension","init","into","max_computed_degree","max_degree","min_degree","name","new","parse_action","set_action","set_basis_element_name","string_to_basis_element","test_equal","to_json","to_owned","to_string","try_from","try_into","type_id","zero_module","FPMIndexTable","FinitelyPresentedModule","act_on_basis","add_generators","add_relations","algebra","basis_element_to_string","borrow","borrow","borrow_mut","borrow_mut","compute_basis","deref","deref","deref_mut","deref_mut","dimension","drop","drop","eq","equivalent","equivalent","equivalent","fmt","fp_idx_to_gen_idx","fp_idx_to_gen_idx","from","from","from_json","gen_idx_to_fp_idx","gen_idx_to_fp_idx","generators","generators","index_table","init","init","into","into","map","max_computed_degree","max_generator_degree","min_degree","min_degree","name","new","relations","to_string","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","FreeModule","GeneratorData","MuFreeModule","OffsetIterator","OperationGeneratorPair","UnstableFreeModule","act","act_on_basis","add_generators","algebra","algebra","algebra","algebra","basis_element_to_opgen","basis_element_to_opgen","basis_element_to_opgen","basis_element_to_string","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","compute_basis","degree","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","dimension","drop","drop","drop","drop","end","extend_by_zero","fmt","fmt","from","from","from","from","gen_deg","gen_deg","gen_deg_idx_to_internal_idx","gen_deg_idx_to_internal_idx","gen_deg_idx_to_internal_idx","gen_names","gen_names","gen_names","gen_names","generator_degree","generator_index","generator_offset","generator_to_index","generator_to_index","generator_to_index","index_to_op_gen","init","init","init","init","internal_generator_offset","into","into","into","into","into_iter","iter_gen_offsets","iter_gens","iter_slices","max_computed_degree","max_generator_degree","min_degree","min_degree","min_degree","min_degree","module","name","name","name","new","next","num_gens","num_gens","num_gens","number_of_gens_in_degree","offset","operation_degree","operation_generator_to_index","operation_index","slice_vector","start","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","zero_module","HomModule","act_on_basis","algebra","algebra","basis_element_to_string","block_structures","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","fmt","from","init","into","max_computed_degree","min_degree","new","source","source","target","target","to_string","try_from","try_into","type_id","FreeModuleHomomorphism","FullModuleHomomorphism","GenericZeroHomomorphism","HomPullback","IdentityHomomorphism","ModuleHomomorphism","MuFreeModuleHomomorphism","QuotientHomomorphism","QuotientHomomorphismSource","Source","Target","UnstableFreeModuleHomomorphism","ZeroHomomorphism","apply","apply_quasi_inverse","apply_to_basis_element","auxiliary_data","compute_auxiliary_data_through_degree","degree_shift","degree_shift","degree_shift","degree_shift","degree_shift","degree_shift","f","f","free_module_homomorphism","full_module_homomorphism","generic_zero_homomorphism","get_matrix","get_partial_matrix","hom_pullback","identity_homomorphism","image","images","images","images","images","images","kernel","kernels","kernels","kernels","kernels","kernels","map","matrices","min_degree","min_degree","min_degree","min_degree","outputs","outputs","outputs","prime","quasi_inverse","quasi_inverses","quasi_inverses","quasi_inverses","quasi_inverses","quasi_inverses","quotient_homomorphism","s","s","source","source","source","source","source","source","source","t","target","target","target","target","target","target","target","zero_homomorphism","FreeModuleHomomorphism","MuFreeModuleHomomorphism","UnstableFreeModuleHomomorphism","add_generators_from_big_vector","add_generators_from_matrix_rows","add_generators_from_rows","add_generators_from_rows_ooo","apply_to_basis_element","apply_to_generator","borrow","borrow_mut","compute_auxiliary_data_through_degree","degree_shift","degree_shift","degree_shift","degree_shift","degree_shift","deref","deref_mut","differential_density","drop","extend_by_zero","from","hom_k","image","images","images","images","init","into","kernel","kernels","kernels","kernels","min_degree","min_degree","min_degree","min_degree","new","next_degree","ooo_outputs","output","outputs","outputs","outputs","quasi_inverse","quasi_inverses","quasi_inverses","quasi_inverses","set_image","set_kernel","set_quasi_inverse","source","source","source","source","target","target","target","target","try_from","try_into","type_id","zero_homomorphism","FullModuleHomomorphism","apply_to_basis_element","borrow","borrow_mut","clone","clone_into","compute_auxiliary_data_through_degree","degree_shift","degree_shift","deref","deref_mut","drop","from","from","from_matrices","identity_homomorphism","image","images","init","into","kernel","kernels","matrices","new","quasi_inverse","quasi_inverses","replace_source","replace_target","source","source","target","target","to_owned","try_from","try_into","type_id","zero_homomorphism","GenericZeroHomomorphism","apply_to_basis_element","borrow","borrow_mut","degree_shift","degree_shift","deref","deref_mut","drop","from","init","into","new","source","source","target","target","try_from","try_into","type_id","zero_homomorphism","HomPullback","apply_to_basis_element","borrow","borrow_mut","compute_auxiliary_data_through_degree","degree_shift","deref","deref_mut","drop","from","image","images","init","into","kernel","kernels","map","min_degree","new","quasi_inverse","quasi_inverses","source","source","target","target","try_from","try_into","type_id","QuotientHomomorphism","QuotientHomomorphismSource","apply_to_basis_element","apply_to_basis_element","borrow","borrow","borrow_mut","borrow_mut","degree_shift","degree_shift","deref","deref","deref_mut","deref_mut","drop","drop","f","f","from","from","init","init","into","into","new","new","s","s","source","source","t","target","target","try_from","try_from","try_into","try_into","type_id","type_id","Algebra","Module","ModuleFailedRelationError","act","act","act_by_element","act_by_element","act_by_element_on_basis","act_by_element_on_basis","act_on_basis","algebra","basis_element_to_string","borrow","borrow_mut","compute_basis","compute_basis","deref","deref_mut","dimension","drop","element_to_string","element_to_string","fmt","fmt","from","init","into","is_unit","is_unit","max_computed_degree","max_degree","max_degree","max_generator_degree","max_generator_degree","min_degree","prime","prime","relation","to_string","total_dimension","total_dimension","try_from","try_into","type_id","value","QuotientModule","act_on_basis","act_on_original_basis","algebra","basis_element_to_string","basis_list","borrow","borrow_mut","deref","deref_mut","dimension","drop","flush","fmt","from","init","into","max_computed_degree","max_degree","min_degree","module","new","old_basis_to_new","quotient","quotient_all","quotient_basis_elements","quotient_vectors","reduce","subspaces","to_string","truncation","try_from","try_into","type_id","zero_module","RPSpec","RealProjectiveSpace","act_on_basis","algebra","algebra","basis_element_to_string","borrow","borrow","borrow_mut","borrow_mut","clear_bottom","clear_bottom","coef_adem","coef_milnor","deref","deref","deref_mut","deref_mut","deserialize","dimension","drop","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","from","from_json","init","init","into","into","max","max","max_computed_degree","max_degree","min","min","min_degree","new","to_json","to_string","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","SteenrodModule","from_json","json","zero_module","from_json","SuspensionModule","act","act_by_element","act_by_element_on_basis","act_on_basis","algebra","basis_element_to_string","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","element_to_string","fmt","from","init","inner","into","is_unit","max_computed_degree","max_degree","max_generator_degree","min_degree","new","prime","shift","to_string","total_dimension","try_from","try_into","type_id","zero_module","TensorModule","act","act_helper","act_on_basis","algebra","basis_element_to_string","block_structures","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","fmt","from","init","into","left","max_computed_degree","max_degree","min_degree","new","offset","right","seek_module_num","to_string","try_from","try_into","type_id","zero_module","ZeroModule","zero_module","Element","MilnorPairElement","PairAlgebra","a_multiply","degree","element_from_bytes","element_is_zero","element_to_bytes","new_pair_element","ones","p_tilde","sigma_multiply_basis","twos","ys","SteenrodEvaluator","adem","adem_q","adem_to_milnor","adem_to_milnor_on_basis","borrow","borrow_mut","compute_basis","deref","deref_mut","dimension","drop","evaluate_algebra_adem","evaluate_algebra_milnor","evaluate_algebra_node","evaluate_basis_element","evaluate_module_adem","evaluate_p_or_b_list","from","init","into","milnor","milnor_to_adem","milnor_to_adem_on_basis","milnor_to_adem_on_basis_2","milnor_to_adem_on_basis_generic","new","prime","try_from","try_into","type_id","AList","AlgebraBasisElt","AlgebraNode","BasisElt","Bockstein","BocksteinOrSq","Err","IResult","ModuleNode","Ok","P","PList","Product","Q","Scalar","Sq","Sum","algebra_expr","algebra_factor","algebra_generator","algebra_term","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","brackets","buf","clone","clone","clone","clone_into","clone_into","clone_into","convert_error","deref","deref","deref","deref_mut","deref_mut","deref_mut","digits","drop","drop","drop","fmt","fmt","fmt","fold_separated","from","from","from","init","init","init","into","into","into","len","module_expr","module_generator","module_term","p_or_sq","parse_algebra","parse_module","scalar","space","to_adem_basis_elt","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"algebra"],[89,"algebra::adem_algebra"],[108,"algebra::algebra"],[134,"algebra::algebra::adem_algebra"],[263,"algebra::algebra::algebra_trait"],[305,"algebra::algebra::bialgebra_trait"],[308,"algebra::algebra::combinatorics"],[360,"algebra::algebra::field"],[391,"algebra::algebra::milnor_algebra"],[612,"algebra::algebra::pair_algebra"],[649,"algebra::algebra::polynomial_algebra"],[727,"algebra::algebra::steenrod_algebra"],[852,"algebra::combinatorics"],[868,"algebra::field"],[870,"algebra::milnor_algebra"],[908,"algebra::module"],[1006,"algebra::module::block_structure"],[1043,"algebra::module::finite_dimensional_module"],[1094,"algebra::module::finitely_presented_module"],[1148,"algebra::module::free_module"],[1264,"algebra::module::hom_module"],[1292,"algebra::module::homomorphism"],[1372,"algebra::module::homomorphism::free_module_homomorphism"],[1436,"algebra::module::homomorphism::full_module_homomorphism"],[1473,"algebra::module::homomorphism::generic_zero_homomorphism"],[1494,"algebra::module::homomorphism::hom_pullback"],[1522,"algebra::module::homomorphism::quotient_homomorphism"],[1561,"algebra::module::module_trait"],[1606,"algebra::module::quotient_module"],[1641,"algebra::module::rpn"],[1693,"algebra::module::steenrod_module"],[1697,"algebra::module::steenrod_module::json"],[1698,"algebra::module::suspension_module"],[1732,"algebra::module::tensor_module"],[1763,"algebra::module::zero_module"],[1765,"algebra::pair_algebra"],[1779,"algebra::steenrod_evaluator"],[1810,"algebra::steenrod_parser"],[1891,"core::option"],[1892,"alloc::string"],[1893,"once"],[1894,"alloc::vec"],[1895,"serde_json::value"],[1896,"bivec"],[1897,"core::ops::function"],[1898,"fp::vector::vector_generic"],[1899,"fp::vector::vector_generic"],[1900,"std::io::error"],[1901,"std::io"],[1902,"std::io"],[1903,"core::fmt"],[1904,"core::marker"],[1905,"core::hash"],[1906,"core::result"],[1907,"core::any"],[1908,"serde::de"],[1909,"serde::ser"],[1910,"core::ops::function"],[1911,"alloc::sync"],[1912,"core::ops::range"],[1913,"once"],[1914,"fp::matrix::quasi_inverse"],[1915,"fp::matrix::matrix_inner"],[1916,"fp::matrix::matrix_inner"],[1917,"nom::error"],[1918,"nom::internal"],[1919,"nom::error"],[1920,"core::marker"]],"d":["","An Algebra implementing the Steenrod algebra, using the …","","An algebra that can be viewed as an Adem algebra.","A graded algebra over $\\\\mathbb{F}_p$.","","An Algebra equipped with a coproduct operation that makes …","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","An Algebra equipped with a distinguished presentation.","","","","","An algebra that is maybe unstable. Every Algebra …","","","","","","","","The Steenrod algebra using the Adem basis.","","Traits describing algebras, and implementations thereof …","Converts a string to a basis element. This must be a …","degree -> AdemBasisElement -> index","degree -> MilnorBasisElement -> index","Converts a basis element into a string for display.","","degree -> index -> AdemBasisElement","A list of all basis elements of each degree, constructed …","","Computes basis elements up to and including degree.","","Computes a coproduct $\\\\Delta(x)$, expressed as","Decomposes an element of the algebra into a product of …","Decomposes an element into generators.","","Returns the dimension of the algebra in degree degree.","","","","","","","","","","Finite fields over a prime.","","Returns relations that the algebra wants checked to ensure …","Return generators in degree.","","","","","","","","","degree -> first square -> admissible sequence idx -> result","source_deg -> target_deg -> source_op -> target_op","","Computes the product r * s of two basis elements, and adds …","","","Computes the product r * s of a general element r and a …","Computes the product r * s of two general elements, and …","","","This implements the notion of a split pair algebra in the …","","","","This is a list of possible P(R) of each degree, where …","Returns the prime the algebra is over.","","","","","","","","This module includes code for parsing an expression in the …","","","","An Algebra implementing the Steenrod algebra, using the …","An algebra that can be viewed as an Adem algebra.","An Adem basis element for the Steenrod algebra.","","","A Steenrod power $P^i$, or a Bockstein $\\\\beta^\\\\varepsilon$.","","degree -> AdemBasisElement -> index","degree -> index -> AdemBasisElement","A bitset of which $\\\\beta$ Bocksteins are in the element’…","The degree of the element.","","","","degree -> first square -> admissible sequence idx -> result","","Whether to denote the generators as powers $P^i$ or …","A list of which Steenrod powers are in the element’s …","","","","","","","","","","","","","","","","","","","The Steenrod algebra using the Adem basis.","","","","Finite fields over a prime.","","This implements the notion of a split pair algebra in the …","","","An Algebra implementing the Steenrod algebra, using the …","An algebra that can be viewed as an Adem algebra.","An Adem basis element for the Steenrod algebra.","","","A Steenrod power $P^i$, or a Bockstein $\\\\beta^\\\\varepsilon$.","","","","","","","degree -> AdemBasisElement -> index","","degree -> index -> AdemBasisElement","","A bitset of which $\\\\beta$ Bocksteins are in the element’…","","","","","","","","","","","","","","","","The degree of the element.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","This function expresses $Sq^x$ (current) in terms of the …","We return Adem relations $b^2 = 0$, $P^i P^j = \\\\cdots$ for …","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns an iterator over the element’s decomposition.","","","Reduce a Steenrod monomial at the prime 2.","","degree -> first square -> admissible sequence idx -> result","","","","","","","","","","","","Constructs a new AdemAlgebra.","","","Whether to denote the generators as powers $P^i$ or …","","","","A list of which Steenrod powers are in the element’s …","","Shifts a Vec’s elements back by offset.","","","","","","","","","","","","","","","","","A graded algebra over $\\\\mathbb{F}_p$.","An Algebra equipped with a distinguished presentation.","An algebra that is maybe unstable. Every Algebra …","","Converts a string to a basis element. This must be a …","Converts a basis element into a string for display.","Computes basis elements up to and including degree.","Decomposes an element into generators.","Returns a list of filtration-one elements in $Ext(k, k)$.","Returns a list of filtration-one elements in $Ext(k, k)$.","Returns the dimension of the algebra in degree degree.","","","Converts a general element into a string for display.","Converts a general element into a string for display.","Returns relations that the algebra wants checked to ensure …","Returns the name of a generator.","Returns the name of a generator.","Return generators in degree.","A magic constant used to identify the algebra in save …","A magic constant used to identify the algebra in save …","Computes the product r * s of a basis element r and a …","Computes the product r * s of a basis element r and a …","","Computes the product r * s of a basis element r and a …","Computes the product r * s of a basis element r and a …","Computes the product r * s of two basis elements, and adds …","","","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of a general element r and a …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","Computes the product r * s of two general elements, and …","A name for the algebra to use in serialization operations. …","A name for the algebra to use in serialization operations. …","Returns the prime the algebra is over.","An Algebra equipped with a coproduct operation that makes …","Computes a coproduct $\\\\Delta(x)$, expressed as","Decomposes an element of the algebra into a product of …","","","If p is the nth prime, then TAU_DEGREES[n][i] is the …","","If p is the nth prime, then XI_DEGREES[n][i - 1] is the …","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","index ==> degree","","","degree => (first_index, number_of_gens)","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","degree => max_part => list of partitions with maximum part …","","","","","","","","","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","Returns a new Field over the given prime p.","","","","","","","","","","","","","A version of HashMap<MilnorBasisElement, T> that is more …","","","The parts of a PPartMultiplier that involve heap …","","","","","","","","","degree -> MilnorBasisElement -> index","","A list of all basis elements of each degree, constructed …","Return the degree and index of $Q_1^e P(x)$.","","","","","","","","","","","","","","","","","","","","Update the degree component to the correct degree","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Assert that elt is in the image of the differential. Drop …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","Returns true if the new element is not within the bounds","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the profile is that of A(n). This is relevant …","","Checks whether the profile function is valid","","","","","","source_deg -> target_deg -> source_op -> target_op","","","","","","","","","","","","","","","","","","","","","","","This compute the first l > k such that (sum + l) choose l …","","","The profile function for the Q part.","","","","Gives a list of PPart’s in degree t.","This is a list of possible P(R) of each degree, where …","","","","","","","A bitmask indicating which of the Q_k we want to include …","","","","","","","","","","","","If true, unspecified p_part entries will be 0. Otherwise …","","","","","","","","","","","","","","","","","","","","","","We have a matrix of the form | s₁ s₂ s₃ …","","This creates a PPartAllocation with enough capacity to …","","","An element in the cohomological degree zero part of the …","","","A lift of an algebra to a split pair algebra. See module …","Compute $A(r, s)$ and write the result to result.","Compute $A(Sq(R), Y_{k, l})$ where $a = Sq(R)$. This …","Actually computes $A(a, Y_{k, l})$ and returns the result.","","","","","","","","","","Assert that elt is in the image of the differential. Drop …","Assert that elt is in the image of the differential. Drop …","Returns the argument unchanged.","","","Calls U::from(self).","Create a new zero element in the given degree.","","The element p is classified by a filtration on element in …","Same as PairAlgebra::sigma_multiply_basis but with …","Same as PairAlgebra::sigma_multiply_basis but with …","Given $r, s \\\\in \\\\pi_0(A)$, compute $\\\\sigma(r) \\\\sigma(s)$ …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","index ==> degree","degree => (first_index, number_of_gens)","","","","","","","degree => max_part => list of partitions with maximum part …","","","","$\\\\mathbb{F}_p$, viewed as an Algebra over itself.","","","","","","","","The parts of a PPartMultiplier that involve heap …","","","","degree -> MilnorBasisElement -> index","A list of all basis elements of each degree, constructed …","","","","","","","","","","","","","source_deg -> target_deg -> source_op -> target_op","","","The profile function for the Q part.","","","This is a list of possible P(R) of each degree, where …","","A bitmask indicating which of the Q_k we want to include …","","","","If true, unspecified p_part entries will be 0. Otherwise …","","","","","","","Given a module N and a free module M, this is the module …","A bounded below module over an algebra. To accommodate for …","","A free module.","","A quotient of a module truncated below a fix degree.","This is $\\\\mathbb{RP}_{\\\\mathrm{min}}^{\\\\mathrm{max}}$. The …","","","","","","","","The algebra the module is over.","","","","","","","","","","The name of a basis element. This is useful for debugging …","For each degree d, basis_list[d] is a list of basis …","","","","","The dimension of a module at the given degree","","","","","","degree -> internal index of first generator in degree","degree -> internal index of first generator in degree","degree -> internal index of first generator in degree","","","","","","","degree -> internal_gen_idx -> the offset of the generator …","degree -> internal_gen_idx -> the offset of the generator …","degree -> internal_gen_idx -> the offset of the generator …","","","","","","","","","","The maximum t for which the module is fully defined at t. …","","The minimum degree of the module, which is required to be …","","","","","The underlying module","","","","","","","","","","","","","","","","","","","","","The subspaces that we quotient out by","","","","Everything above this degree is quotiented out.","","","","A block structure is a structure that makes it efficient …","","Add source vector “source” to the block indicated by …","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Convert (generator, basis element) to basis element of the …","","","Find the block corresponding to a given generator.","Find the (generator, basis element) pair corresponding to …","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","This function will panic if you call it with input such …","This function will panic if you call it with input such …","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","This should really by try_from but orphan rules prohibit …","","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","A free module.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","degree -> internal index of first generator in degree","degree -> internal index of first generator in degree","degree -> internal index of first generator in degree","","","","","","","Given a generator (gen_deg, gen_idx), find the first index …","degree -> internal_gen_idx -> the offset of the generator …","degree -> internal_gen_idx -> the offset of the generator …","degree -> internal_gen_idx -> the offset of the generator …","","","","","","Given a generator (gen_deg, gen_idx), find the first index …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Iterate the degrees and offsets of each generator up to …","Iterate the degrees and indices of each generator up to …","Given an element in a degree, iterate through the slices …","","","","","","","","","","","","","","","","","","","","","Given a vector that represents an element in degree degree…","","","","","","","","","","","","","","","","","Given a module N and a free module M, this is the module …","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","A ModuleHomomorphism that simply records the matrix of the …","","Given a map $\\\\mathtt{map}: A \\\\to B$ and hom modules …","","Each ModuleHomomorphism may come with auxiliary data, …","","","","","","","","","Attempt to apply quasi inverse to the input. Returns …","Calling this function when …","Compute the auxiliary data associated to the homomorphism …","","","degree shift, such that ouptut_degree = input_degree - …","degree shift, such that ouptut_degree = input_degree - …","degree shift, such that ouptut_degree = input_degree - …","","","","","","","","Write the matrix of the homomorphism at input degree degree…","Get the values of the homomorphism on the specified inputs …","","","","","","","","","","","","","","","","The matrices of the module homomorphism. Unspecified …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A MatrixSlice will do but there is no applicaiton of this …","","Add the image of a bidegree out of order. See …","","","","","","","","degree shift, such that ouptut_degree = input_degree - …","degree shift, such that ouptut_degree = input_degree - …","degree shift, such that ouptut_degree = input_degree - …","","","","","","Returns the argument unchanged.","Given f: M -> N, compute the dual f*: Hom(N, k) -> Hom(M, …","","","","","","Calls U::from(self).","","","","","","","","","","","List of outputs that have been added out of order","","","","","","","","","","","","","","","","","","","","","","","","A ModuleHomomorphism that simply records the matrix of the …","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","Calls U::from(self).","","","The matrices of the module homomorphism. Unspecified …","","","","This function replaces the source of the …","See replace_source","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","Given a map $\\\\mathtt{map}: A \\\\to B$ and hom modules …","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","A bounded below module over an algebra. To accommodate for …","","The length of input need not be equal to the dimension of …","The length of input need not be equal to the dimension of …","","","","","","The algebra the module is over.","The name of a basis element. This is useful for debugging …","","","Compute internal data of the module so that we can query …","Compute internal data of the module so that we can query …","","","The dimension of a module at the given degree","","Gives the name of an element. The default implementation …","Gives the name of an element. The default implementation …","","","Returns the argument unchanged.","","Calls U::from(self).","Whether this is the unit module.","Whether this is the unit module.","The maximum t for which the module is fully defined at t. …","max_degree is the a degree such that if t > max_degree, …","max_degree is the a degree such that if t > max_degree, …","Maximum degree of a generator under the Steenrod action. …","Maximum degree of a generator under the Steenrod action. …","The minimum degree of the module, which is required to be …","The prime the module is over, which should be equal to the …","The prime the module is over, which should be equal to the …","","","","","","","","","A quotient of a module truncated below a fix degree.","","","","","For each degree d, basis_list[d] is a list of basis …","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","The underlying module","","","","","","Arguments","","The subspaces that we quotient out by","","Everything above this degree is quotiented out.","","","","","","This is $\\\\mathbb{RP}_{\\\\mathrm{min}}^{\\\\mathrm{max}}$. The …","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","An element in the cohomological degree zero part of the …","","A lift of an algebra to a split pair algebra. See module …","Compute $A(r, s)$ and write the result to result.","","","","","Create a new zero element in the given degree.","","The element p is classified by a filtration on element in …","Given $r, s \\\\in \\\\pi_0(A)$, compute $\\\\sigma(r) \\\\sigma(s)$ …","","","","","Express $Q_{qi}$ in the adem basis.","","Translate from the adem basis to the milnor basis, adding …","","","","","","","","","","","","Returns","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","Contains the error value","","","Contains the success value","","","","","","","","","","","","","","","","","","Surround with brackets","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","Pad both ends with whitespace","","","","","","","","","","","","",""],"i":[54,0,53,0,0,0,0,20,20,0,0,54,0,53,0,0,0,0,0,0,0,0,0,0,109,0,62,1,13,62,110,1,13,0,62,110,96,96,63,52,62,111,69,0,1,1,13,52,110,110,0,110,63,63,1,13,8,0,112,0,0,8,1,13,69,62,111,69,69,69,1,13,0,52,110,110,13,62,110,41,13,110,110,113,0,0,1,13,52,0,0,0,28,28,0,109,1,1,21,21,1,1,1,1,1,21,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,28,0,1,109,1,1,1,1,1,1,1,1,21,1,21,28,1,21,28,21,21,1,1,1,1,1,1,1,21,1,21,28,1,21,28,1,1,1,1,1,21,28,1,1,1,21,21,21,21,1,21,1,1,1,21,21,28,1,21,28,1,1,1,1,1,1,1,1,1,1,1,1,1,1,21,21,1,21,28,1,21,28,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,21,1,1,1,21,1,0,1,1,21,1,21,1,1,21,28,1,21,28,1,21,28,1,0,0,0,0,62,62,62,63,62,62,62,111,69,62,62,63,63,63,63,62,62,62,62,69,111,111,62,111,69,62,62,69,111,111,62,62,69,111,111,62,62,62,0,96,96,0,0,0,0,0,12,0,12,40,12,40,12,40,12,40,12,40,12,40,12,12,12,12,12,0,12,40,40,12,12,40,40,40,12,40,40,12,40,12,12,40,12,40,40,0,12,40,12,40,12,40,0,0,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,49,0,0,0,0,0,0,0,0,0,0,13,49,114,13,13,13,13,13,13,13,13,49,44,42,45,46,13,49,44,42,45,46,48,42,42,42,49,45,13,42,13,13,13,13,13,13,44,42,45,46,13,42,13,49,44,42,45,46,13,49,44,42,45,46,44,49,49,46,13,13,13,13,13,49,44,42,45,46,13,13,13,44,42,44,44,44,42,42,42,42,13,13,13,44,42,42,45,45,13,49,44,42,45,46,42,13,13,13,13,13,13,13,13,42,44,42,13,45,45,13,49,44,42,45,46,49,45,13,49,44,42,45,46,49,49,44,44,44,48,46,13,112,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,49,13,13,49,49,13,49,44,42,46,13,13,13,13,13,49,13,13,13,44,42,0,49,45,49,44,13,42,13,42,45,44,13,13,13,49,44,42,45,46,13,49,44,42,45,46,13,49,44,42,45,46,13,49,45,46,46,0,115,0,0,0,115,0,0,116,116,116,116,116,116,115,115,115,115,115,116,117,116,116,115,116,115,115,115,115,0,117,116,116,116,116,0,116,0,0,0,110,52,8,52,8,52,52,110,110,110,8,52,52,8,52,8,52,8,52,52,52,52,52,110,110,52,52,110,110,110,52,8,52,52,110,110,8,52,8,52,8,110,110,110,110,110,110,8,110,110,110,110,110,110,110,110,52,8,52,110,110,110,110,110,110,110,52,52,52,8,52,8,52,8,52,54,53,0,0,20,20,54,53,0,0,0,53,53,55,53,53,20,53,54,55,20,53,54,55,54,54,53,53,53,53,53,20,53,54,55,20,53,54,55,55,53,53,53,53,0,20,53,54,55,53,53,53,53,54,54,54,54,53,53,54,54,55,20,53,54,55,53,54,53,53,53,20,53,54,55,20,53,54,55,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,55,53,53,53,55,53,53,113,53,54,53,54,20,53,54,54,55,20,53,53,53,54,55,20,53,54,55,0,0,0,0,12,12,0,40,12,40,12,40,12,40,0,0,0,41,49,0,0,0,0,0,0,0,0,49,13,13,48,49,42,49,49,46,13,13,49,48,46,112,13,13,49,44,42,46,13,13,44,42,49,49,44,13,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,61,65,61,67,118,68,91,74,67,118,68,65,88,0,74,95,91,65,119,0,0,0,119,67,118,68,61,67,118,68,70,70,67,118,68,66,61,0,0,66,94,95,66,91,65,91,65,66,67,118,68,88,0,61,66,67,118,68,67,118,68,70,70,0,64,66,95,0,94,74,119,0,88,0,74,0,88,64,0,90,0,0,58,58,59,58,59,58,59,58,59,58,59,58,59,58,59,58,59,58,58,59,59,58,58,59,58,59,58,58,58,59,58,59,58,59,58,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,0,0,66,66,66,66,66,120,66,120,66,66,120,66,120,66,66,120,66,66,66,66,66,66,66,120,120,66,66,66,120,66,66,66,120,66,120,66,66,66,66,66,66,66,66,66,66,120,66,120,66,120,66,66,0,0,0,0,0,0,68,68,68,68,67,118,68,67,118,68,68,68,119,73,70,68,119,73,70,70,70,68,73,68,119,73,70,68,119,73,70,68,68,119,73,70,119,68,68,70,68,119,73,70,119,73,67,118,68,68,67,118,68,70,70,68,67,118,68,68,68,119,73,70,68,68,119,73,70,73,68,68,68,68,68,68,67,118,68,73,67,118,68,68,73,67,118,68,68,73,70,68,70,68,119,70,68,68,119,73,70,68,119,73,70,68,119,73,70,68,0,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,0,0,0,0,0,0,0,0,0,82,82,0,0,82,82,82,82,82,82,85,121,79,81,83,86,87,0,0,0,82,82,0,122,82,85,121,79,81,84,82,85,121,79,81,84,84,81,82,85,121,79,85,121,79,82,82,85,121,79,81,84,0,86,87,82,85,121,79,81,83,84,86,82,85,121,79,81,83,84,123,0,0,0,79,79,79,79,79,79,79,79,79,79,79,85,121,79,79,79,79,79,79,79,79,79,85,121,79,79,79,79,85,121,79,79,85,121,79,79,79,79,79,85,121,79,79,85,121,79,79,79,79,79,85,121,79,79,85,121,79,79,79,79,79,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,0,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,0,0,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,86,87,86,87,86,87,86,87,65,0,0,65,65,65,65,65,65,65,65,65,64,64,65,65,64,64,65,64,65,65,64,64,64,64,64,65,65,65,65,65,65,65,65,65,65,64,64,65,65,64,64,64,64,0,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,0,0,91,91,91,91,91,92,91,92,91,92,0,0,91,92,91,92,92,91,91,92,91,91,91,91,91,92,91,92,91,91,92,91,92,91,92,91,91,91,92,91,91,91,91,91,92,91,92,91,92,91,0,0,0,93,0,0,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,0,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,0,90,115,0,0,115,116,115,115,115,115,116,115,115,116,116,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,99,0,0,98,101,0,124,0,0,124,99,99,98,99,98,101,98,0,0,0,0,99,98,101,99,98,101,0,125,99,98,101,99,98,101,0,99,98,101,99,98,101,0,99,98,101,99,98,101,0,99,98,101,99,98,101,99,98,101,125,0,0,0,0,0,0,0,0,101,99,98,101,99,98,101,99,98,101,99,98,101],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,1,[]],0,[[-1,2],[[6,[[5,[3,4]]]]],[]],0,0,[[-1,3,4],7,[]],[-1,[[9,[8]]],[]],0,0,0,[[-1,3],5,[]],[[-1,3],5,[]],[[-1,3,4],[[10,[[5,[3,4,3,4]]]]],[]],[[-1,3,4],[[10,[[5,[3,4]]]]],[]],[[-1,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]],[]],0,[[-1,3],4,[]],[[-1,3,3],4,[]],[[-1,3,3],4,[]],0,0,0,0,0,[[-1,3],4,[]],[-1,12,[]],0,[[-1,3,4],[[6,[4]]],[]],[[-1,3],[[10,[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]]],[]],[[-1,3],[[10,[4]]],[]],0,0,0,0,[-1,13,[]],0,[14,[[5,[[15,[4]],[15,[[10,[7]]]],[0,[16]]]]]],0,0,0,[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,4],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],0,0,0,0,[[-1,3],4,[]],[-1,12,[]],0,[-1,19,[]],[-1,19,[]],0,0,[[-1,3,4],7,[]],[[-1,3,4],[[5,[7,11]]],[]],[-1,20,[]],0,0,0,0,0,0,0,0,0,0,0,[-1,1,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,17,11,3,18,3],5],[-1,1,[]],[1,1],[[1,3,4],21],[[1,2],[[6,[[5,[3,4]]]]]],[[1,21],4],0,[[1,3,4],7],0,[[1,11,11],[[5,[3,4]]]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[21,21],[[-1,-2],5,[],[]],[[1,3],5],[[1,3,4],[[10,[[5,[3,4,3,4]]]]]],[[1,3,4],[[10,[[5,[3,4]]]]]],[[1,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[[1,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[[1,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[1,[[10,[[5,[7,3,4]]]]]],0,[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[[1,3],4],[[1,3,3],4],[[-1,3,3],4,[]],[[-1,3,3],4,[]],[4,5],[4,5],[4,5],[[1,3,-1],22,23],[[],24],[[1,-1],[[22,[5]]],25],[[21,21],24],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],0,[[21,19],11],0,[[],5],[[1,26],27],[[21,26],27],[[21,26],27],[[28,26],27],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[1,3],5],[[1,3],5],[[1,3],5],[[1,3],5],[[1,3],5],[[1,3],5],[[1,[30,[[10,[29]]]],3,3,4],29],[[1,3],5],[[1,[30,[[10,[29]]]],3,3,4],29],[[1,3],[[10,[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]]]],[[1,3,4],7],[[1,3],[[10,[4]]]],[1,24],0,[[-1,-2],31,[32,33],34],[[21,-1],5,35],[[],4],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[21,[[0,[36]]]],[1,11],[[1,17,11,21,3],5],[[1,17,21,3,3,3,24],5],[[1,17,11,21,3,3,3,24],5],0,[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[1,17,11,3,4,3,4],5],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[1,17,11,3,4,3,4,3],5],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[[1,17,11,3,4,3,4,3],5],[[19,24],1],[[1,3]],0,0,[1,4],[1,2],[1,19],0,[1,3],[[[10,[-1]],37],5,[]],[[1,11,3,4,3,4],5],[[1,21,11,11],4],[-1,-2,[],[]],[-1,7,[]],[-1,7,[]],[[1,21],[[6,[4]]]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],0,0,0,0,0,[[-1,2],[[6,[[5,[3,4]]]]],[]],[[-1,3,4],7,[]],[[-1,3],5,[]],[[-1,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]],[]],[-1,[[10,[[5,[7,3,4]]]]],[]],[-1,[[10,[[5,[7,3,4]]]]],[]],[[-1,3],4,[]],[[-1,3,3],4,[]],[[-1,3,3],4,[]],[[-1,3,18],7,[]],[[-1,3,18],7,[]],[[-1,3],[[10,[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]]],[]],[[-1,3,4],7,[]],[[-1,3,4],7,[]],[[-1,3],[[10,[4]]],[]],[-1,11,[]],[-1,11,[]],[[-1,17,11,3,4,3,18],5,[]],[[-1,17,11,3,4,3,18],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,4],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,18,3,4],5,[]],[[-1,17,11,3,18,3,4],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,18],5,[]],[[-1,17,11,3,18,3,18],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[-1,2,[]],[-1,2,[]],[-1,19,[]],0,[[-1,3,4],[[10,[[5,[3,4,3,4]]]]],[]],[[-1,3,4],[[10,[[5,[3,4]]]]],[]],0,0,0,0,0,[[12,3,4],5],[[19,11,11,11,11,11],11],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,5],[4,5],[-1,-1,[]],[-1,-1,[]],[[12,3,4],4],0,[[12,3],4],[[12,3],4],0,[[19,24,3],[[10,[[5,[11,11,11]]]]]],[[],4],[[],4],0,[[12,4],[[5,[3,4]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[5,[-2,-3]]],[],[],[]],[19,12],[[3,11,[30,[3]]],40],[40,6],0,0,[[12,3],[[10,[29]]]],0,0,0,0,[40,24],[19,[[30,[3]]]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[19,[[30,[3]]]],0,[[41,2],[[6,[[5,[3,4]]]]]],[[41,3,4],7],[-1,-2,[],[]],[-1,-2,[],[]],[[41,3],5],[[41,3,4],[[10,[[5,[3,4,3,4]]]]]],[[41,3,4],[[10,[[5,[3,4]]]]]],[41,[[10,[[5,[7,3,4]]]]]],[4,-1,[]],[4,-1,[]],[[41,3],4],[[-1,3,3],4,[]],[4,5],[[41,3,18],7],[[41,26],27],[-1,-1,[]],[[],4],[-1,-2,[],[]],[[-1,17,11,3,4,3,18,3],5,[]],[[41,17,11,3,4,3,4],5],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[19,41],[41,19],0,[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],0,0,0,0,0,0,0,0,0,0,0,0,[[13,17,11,3,18,3],5],0,0,[[13,3,4],42],[[13,2],[[6,[[5,[3,4]]]]]],[[13,42],4],0,[[13,3,4],7],0,[[13,11,43],[[5,[3,4]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[42,42],[[-1,-2],5,[],[]],[[42,42],5],0,0,[[13,3],5],[[42,19],5],[[13,3],5],[[13,3,4],[[10,[[5,[3,4,3,4]]]]]],[[13,3,4],[[10,[[5,[3,4]]]]]],[[13,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[[13,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[[13,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[[],44],[[],42],[[],45],[[],46],[13,[[10,[[5,[7,3,4]]]]]],0,[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[-1,[[38,[44]]],47],0,0,0,[[13,3],4],[[13,3,3],4],[[-1,3,3],4,[]],[[-1,3,3],4,[]],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[[13,3,-1],22,23],[[],24],[[13,-1],[[22,[5]]],25],[[44,44],24],[[42,42],24],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[42,19],11],0,[[],5],[[13,26],27],[[44,26],27],[[42,26],27],[[42,26],27],[[45,26],27],[[45,26],27],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[48,3],42],[[13,3],5],[[13,3],5],[[13,3],5],[[13,3],[[10,[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]]]],[[13,3,4],7],[[13,3],[[10,[4]]]],[13,24],0,[[-1,-2],31,[32,33],34],[[44,4],43],[[42,-1],5,35],[[48,[30,[43]]],24],[[45,4]],[[45,4]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[49,46],[-1,-2,[],[]],[[44,24],24],[44,24],[44,24],0,0,[13,11],[-1,13,[]],[13,13],0,[[13,17,11,42,42],5],[[13,17,11,42,3,18],5],[[13,17,11,42,3,18,46],46],[[13,17,11,3,4,3,18],5],[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[13,17,11,3,4,3,4],5],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[13,17,11,3,4,3,4,3],5],[[-1,17,11,3,18,3,4,3],5,[]],[[-1,17,11,3,18,3,4,3],5,[]],[[13,17,11,3,18,3,18],5],[[-1,17,11,3,18,3,18,3],5,[]],[[-1,17,11,3,18,3,18,3],5,[]],[[13,42,11],[[10,[[5,[11,42]]]]]],[[13,17,11,42,42,3,46],46],[[19,24],13],[[19,48,48,46,11,3],49],[[13,3]],[[19,44,24],13],[49,[[6,[11]]]],[[49,43,43,43],43],0,0,0,0,0,[13,4],[[13,3],[[30,[48]]]],0,[13,2],[13,19],[49,19],[13,44],0,[13,3],0,0,[[],11],0,[[45,4,4],5],0,[[44,-1],38,50],[[13,11,3,4,3,4],5],[-1,-2,[],[]],[-1,7,[]],[-1,7,[]],[-1,7,[]],0,[[13,42],[[6,[4]]]],[[13,11,43],[[6,[[5,[3,4]]]]]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],0,[49,24],[[4,4],45],[4,46],[-1,5,51],0,0,0,0,0,[[-1,17,11,3,18,3],5,[]],[[13,42,4,4,-1],5,51],[[13,42,4,4],29],[-1,-2,[],[]],[-1,-2,[],[]],0,[4,-1,[]],[4,-1,[]],[4,5],[[-1,3,-2],22,[],23],[[],24],[[-1,-2],[[22,[5]]],[],25],[[],5],[[],5],[-1,-1,[]],0,[[],4],[-1,-2,[],[]],[[-1,3],[],[]],0,[-1,4,[]],[[-1,11,3,18,3,18],5,[]],[[-1,11,3,18,3,18],5,[]],[[-1,11,3,4,3,4],5,[]],0,0,[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],0,[-1,39,[]],0,0,0,0,0,[-1,[[9,[8]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[52,52],[[-1,-2],5,[],[]],[[-1,3],5,[]],[[-1,3],5,[]],[[-1,3],5,[]],[[],8],0,[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,5],[4,5],[[52,52],24],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],0,[[-1,3],4,[]],[-1,12,[]],[[52,26],27],[[52,26],27],[[-1,29,29],5,[]],[[-1,29,29],5,[]],[[-1,3,4],[[6,[4]]],[]],[-1,-1,[]],[-1,-1,[]],[[-1,-2],31,[32,33],34],[[52,-1],5,35],[[-1,3,4],52,[]],[[-1,3,4],52,[]],0,[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,3,[]],[-1,3,[]],[-1,3,[]],[-1,3,[]],[[-1,52],4,[]],[[-1,52],4,[]],0,[[-1,29,11,52,3,29],5,[]],[[-1,29,11,52,3,29],5,[]],[[-1,52,52],[[6,[11]]],[]],[[-1,52,52],[[6,[11]]],[]],[[-1,29,11,3,29,52],5,[]],[[-1,29,11,3,29,52],5,[]],[[-1,29,11,3,29,3,29],5,[]],[[-1,29,11,3,29,3,29],5,[]],[19,52],[[],8],0,[[-1,3],4,[]],[-1,12,[]],[-1,19,[]],[[-1,3,4],7,[]],[[-1,3,4],[[5,[7,11]]],[]],[[-1,52,3],5,[]],[[-1,52,3],5,[]],[-1,-2,[],[]],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],0,0,0,0,0,0,0,0,0,0,0,0,[[53,17,11,3,18,3],5],[-1,1,[]],0,[[53,2],[[6,[[5,[3,4]]]]]],[[53,3,4],7],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[54,54],[[-1,-2],5,[],[]],[[53,3],5],[[53,3,4],[[10,[[5,[3,4,3,4]]]]]],[[53,3,4],[[10,[[5,[3,4]]]]]],[[53,3,4],[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]],[53,[[10,[[5,[7,3,4]]]]]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[-1,[[38,[55]]],47],[[53,3],4],[[53,3,3],4],[[-1,3,3],4,[]],[[-1,3,3],4,[]],0,[4,5],[4,5],[4,5],[4,5],[[53,3,-1],22,23],[[],24],[[53,-1],[[22,[5]]],25],[[53,3,18],7],[[54,54],24],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[],5],[[53,26],27],[[54,26],27],[[54,26],27],[[55,26],27],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[14,54,24],[[56,[53]]]],[2,[[38,[54]]]],[[53,3],[[10,[[10,[[5,[11,[5,[3,4]],[5,[3,4]]]]]]]]]],[[53,3,4],7],[[53,3],[[10,[4]]]],[[],4],[[],4],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[53,11],[-1,13,[]],[[53,17,11,3,4,3,18],5],[[53,17,11,3,4,3,18,3],5],[[-1,17,11,3,4,3,18,3],5,[]],[[-1,17,11,3,4,3,18,3],5,[]],[[53,17,11,3,4,3,4],5],[[-1,17,11,3,4,3,4,3],5,[]],[[-1,17,11,3,4,3,4,3],5,[]],[[53,17,11,3,4,3,4,3],5],[[53,17,11,3,18,3,4],5],[[-1,17,11,3,18,3,4,3],5,[]],[[53,17,11,3,18,3,4,3],5],[[-1,17,11,3,18,3,4,3],5,[]],[[53,17,11,3,18,3,18],5],[[-1,17,11,3,18,3,18,3],5,[]],[[53,17,11,3,18,3,18,3],5],[[-1,17,11,3,18,3,18,3],5,[]],[[53,3]],0,[53,4],[53,2],[53,19],0,[[53,11,3,18,3,18],5],[[53,11,3,4,3,4],5],[-1,20,[]],[53,20],[-1,-2,[],[]],[-1,7,[]],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[2,[[38,[54]]]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[53,[[38,[13]]]],[-1,[[38,[-2]]],[],[]],[53,[[38,[1]]]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],0,0,0,[[19,11,11,11,11,11],11],0,0,[[19,24,3],[[10,[[5,[11,11,11]]]]]],0,0,0,0,0,0,0,[19,[[30,[3]]]],[19,[[30,[3]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,13,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,17,11,3,4,3,4],5,[]],0,[-1,57,[]],0,0,0,0,0,0,0,0,0,[[-1,3,4],7,[]],0,0,0,0,0,[[-1,3],4,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,3,[]],0,[-1,3,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[57,3],-1,[]],0,0,[[58,17,11,3,4,18],5],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,5],[4,5],[[59,26],27],[[58,26],27],[-1,-1,[]],[-1,-1,[]],[[58,3,4,4],4],0,0,[[58,3,4],[[60,[4]]]],[[58,4],59],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[[[15,[[10,[4]]]]],58],[58,4],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],0,[[[61,[-1]],17,11,3,4,3,4],5,62],[[[61,[-1]],3,4,3,4],29,62],[[[61,[-1]],3,4,3,4],29,62],0,[[[61,[-1]]],14,63],[[[61,[-1]],3,7],5,62],[[[61,[-1]]],57,62],0,[[[57,[-1]],[15,[4]]],[[15,[[15,[[10,[[10,[29]]]]]]]]],62],[[[61,[-1]],3,4],7,62],[-1,-2,[],[]],[-1,-2,[],[]],[[[61,[-1]],3,3],[[38,[5,64]]],63],[[[61,[-1]]],[[61,[-1]]],62],[[-1,-2],5,[],[]],[[[61,[-1]],3],5,62],[4,-1,[]],[4,-1,[]],[[[61,[-1]],3],4,62],[4,5],[[[61,[-1]],[61,[-1]]],24,62],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[[61,[-1]],3,3],5,63],[[[61,[-1]],26],27,62],[-1,-1,[]],[-1,61,65],[[[57,[-1]],14],[[56,[[61,[-1]]]]],63],0,0,[[],4],[-1,-2,[],[]],[[[61,[-1]]],3,62],[[[61,[-1]]],[[6,[3]]],62],[[[61,[-1]]],3,62],0,[[[57,[-1]],7,[15,[4]]],[[61,[-1]]],62],[[[61,[-1]],-2,2,24],[[56,[5]]],63,16],[[[61,[-1]],3,4,3,4,[30,[11]]],5,62],[[[61,[-1]],3,4,7],5,62],[[[61,[-1]],2],[[6,[[5,[3,4]]]]],62],[[[61,[-1]],[61,[-1]]],[[38,[5,7]]],62],[[[61,[-1]],14],5,63],[-1,-2,[],[]],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[[57,[-1]],3],[[61,[-1]]],62],0,0,[[[66,[-1]],17,11,3,4,3,4],5,62],[[[66,[-1]],3,[10,[7]]],5,62],[[[66,[-1]],3,[10,[29]]],5,62],[[[66,[-1]]],[[57,[-1]]],62],[[[66,[-1]],3,4],7,62],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[66,[-1]],3],5,62],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[[[66,[-1]],3],4,62],[4,5],[4,5],[[[66,[-1]],[66,[-1]]],24,62],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[[66,[-1]],26],27,62],[[[66,[-1]],3,4],4,62],0,[-1,-1,[]],[-1,-1,[]],[[[57,[-1]],14],[[56,[[66,[-1]]]]],62],[[[66,[-1]],3,4],37,62],0,[[[66,[-1]]],[[57,[[67,[-1]]]]],62],0,0,[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],0,[[[66,[-1]]],3,62],[[[66,[-1]]],[[6,[3]]],62],[[[66,[-1]]],3,62],0,0,[[[57,[-1]],7,3],[[66,[-1]]],62],0,[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[[[57,[-1]],3],[[66,[-1]]],62],0,0,0,0,0,0,[[[68,[-1]],17,11,3,4,3,18],5,69],[[[68,[-1]],17,11,3,4,3,4],5,69],[[[68,[-1]],3,4,[6,[[10,[7]]]]],5,69],[[[68,[-1]]],[[57,[-1]]],69],0,0,0,0,0,0,[[[68,[-1]],3,4],7,69],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[70,70],[[-1,-2],5,[],[]],[[[68,[-1]],3],5,69],0,[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[[[68,[-1]],3],4,69],[4,5],[4,5],[4,5],[4,5],0,[[[68,[-1]],3],5,69],[[[68,[-1]],26],27,69],[[70,26],27],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],0,0,0,0,0,[[[68,[-1]]],[[71,[[10,[7]]]]],69],0,0,0,0,0,[[[68,[-1]],3,3,4],4,69],0,0,0,[[[68,[-1]],3,4],70,69],[[],4],[[],4],[[],4],[[],4],[[[68,[-1]],3,4],4,69],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[68,[-1]],[72,[3]]],[[0,[36]]],69],[[[68,[-1]],3],[[0,[36]]],69],[[[68,[-1]],3,18],[[0,[36]]],69],[[[68,[-1]]],3,69],[[[68,[-1]]],[[6,[3]]],69],[[[68,[-1]]],3,69],0,0,0,0,0,0,0,[[[57,[-1]],7,3],[[68,[-1]]],69],[[[73,[-1,-2]]],6,69,36],0,0,0,[[[68,[-1]],3],4,69],0,0,[[[68,[-1]],3,4,3,4],4,69],0,[[[68,[-1]],3,3,4,18],18,69],0,[-1,-2,[],[]],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[-1,39,[]],[[[57,[-1]],3],[[68,[-1]]],69],0,[[[74,[-1]],17,11,3,4,3,4],5,65],[[[74,[-1]]],57,65],0,[[[74,[-1]],3,4],7,65],0,[-1,-2,[],[]],[-1,-2,[],[]],[[[74,[-1]],3],5,65],[4,-1,[]],[4,-1,[]],[[[74,[-1]],3],4,65],[4,5],[[[74,[-1]],26],27,65],[-1,-1,[]],[[],4],[-1,-2,[],[]],[[[74,[-1]]],3,65],[[[74,[-1]]],3,65],[[[57,[67]],[57,[-1]]],[[74,[-1]]],65],[[[74,[-1]]],[[57,[67]]],65],0,[[[74,[-1]]],[[57,[-1]]],65],0,[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[-1,17,11,3,18],5,[]],[[-1,17,3,18],24,[]],[[-1,17,11,3,4],5,[]],[[-1,3],[[5,[75,75,76]]],[]],[[-1,3],5,[]],[-1,3,[]],0,0,0,0,0,0,0,0,0,0,[[-1,77,3],5,[]],[[-1,3,[30,[4]]],78,[]],0,[[[57,[-1]]],-2,[],[]],[[-1,3],[[6,[75]]],[]],0,0,0,0,0,[[-1,3],[[6,[75]]],[]],0,0,0,0,0,0,0,[-1,3,[]],0,0,0,0,0,0,[-1,19,[]],[[-1,3],[[6,[76]]],[]],0,0,0,0,0,0,0,0,[-1,57,[]],0,0,0,0,0,0,0,[-1,57,[]],0,0,0,0,0,0,[[[57,[-1]],[57,[-2]],3],-3,[],[],[]],0,0,0,[[[79,[-1]],3,18],5,65],[[[79,[-1]],3,77],5,65],[[[79,[-1]],3,[10,[29]]],5,65],[[[79,[-1]],3,[10,[29]]],[[60,[3]]],65],[[[79,[-1]],17,11,3,4],5,65],[[[79,[-1]],29,11,3,4],5,65],[-1,-2,[],[]],[-1,-2,[],[]],[[[79,[-1]],3],5,65],[[[79,[-1]]],3,65],[[[79,[-1]]],3,65],0,0,0,[4,-1,[]],[4,-1,[]],[[[79,[-1]],3],80,65],[4,5],[[[79,[-1]],3],5,65],[-1,-1,[]],[[[79,[[68,[-1]]]],3],[[10,[[10,[11]]]]],69],[[[79,[-1]],3],[[6,[75]]],65],0,0,0,[[],4],[-1,-2,[],[]],[[[79,[-1]],3],[[6,[75]]],65],0,0,0,[[[79,[-1]]],3,65],0,0,0,[[[57,[68]],[57,[-1]],3],[[79,[-1]]],65],[[[79,[-1]]],3,65],[[[79,[-1]]],[[10,[3]]],65],[[[79,[-1]],3,4],29,65],0,0,0,[[[79,[-1]],3],[[6,[76]]],65],0,0,0,[[[79,[-1]],3,[6,[75]]],5,65],[[[79,[-1]],3,[6,[75]]],5,65],[[[79,[-1]],3,[6,[76]]],5,65],[[[79,[-1]]],57,65],0,0,0,[[[79,[-1]]],57,65],0,0,0,[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[[57,[68]],[57,[-1]],3],[[79,[-1]]],65],0,[[[81,[-1,-2]],17,11,3,4],5,65,65],[-1,-2,[],[]],[-1,-2,[],[]],[[[81,[-1,-2]]],[[81,[-1,-2]]],65,65],[[-1,-2],5,[],[]],[[[81,[-1,-2]],3],5,65,65],[[[81,[-1,-2]]],3,65,65],0,[4,-1,[]],[4,-1,[]],[4,5],[-1,[[81,[-2,-3]]],82,65,65],[-1,-1,[]],[[[57,[-1]],[57,[-2]],3,[15,[78]]],[[81,[-1,-2]]],65,65],[[[57,[-1]]],[[81,[-1,-1]]],65],[[[81,[-1,-2]],3],[[6,[75]]],65,65],0,[[],4],[-1,-2,[],[]],[[[81,[-1,-2]],3],[[6,[75]]],65,65],0,0,[[[57,[-1]],[57,[-2]],3],[[81,[-1,-2]]],65,65],[[[81,[-1,-2]],3],[[6,[76]]],65,65],0,[[[81,[-1,-2]],[57,[-3]]],[[81,[-3,-2]]],65,65,65],[[[81,[-1,-2]],[57,[-3]]],[[81,[-1,-3]]],65,65,65],[[[81,[-1,-2]]],57,65,65],0,[[[81,[-1,-2]]],57,65,65],0,[-1,-2,[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[[57,[-1]],[57,[-2]],3],[[81,[-1,-2]]],65,65],0,[[[83,[-1,-2]],17,11,3,4],5,65,65],[-1,-2,[],[]],[-1,-2,[],[]],[[[83,[-1,-2]]],3,65,65],0,[4,-1,[]],[4,-1,[]],[4,5],[-1,-1,[]],[[],4],[-1,-2,[],[]],[[[57,[-1]],[57,[-2]],3],[[83,[-1,-2]]],65,65],[[[83,[-1,-2]]],57,65,65],0,[[[83,[-1,-2]]],57,65,65],0,[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[[57,[-1]],[57,[-2]],3],[[83,[-1,-2]]],65,65],0,[[[84,[-1]],17,11,3,4],5,65],[-1,-2,[],[]],[-1,-2,[],[]],[[[84,[-1]],3],5,65],[[[84,[-1]]],3,65],[4,-1,[]],[4,-1,[]],[4,5],[-1,-1,[]],[[[84,[-1]],3],[[6,[75]]],65],0,[[],4],[-1,-2,[],[]],[[[84,[-1]],3],[[6,[75]]],65],0,0,[[[84,[-1]]],3,65],[[[57,[[74,[-1]]]],[57,[[74,[-1]]]],[57,[[85,[67]]]]],[[84,[-1]]],65],[[[84,[-1]],3],[[6,[76]]],65],0,[[[84,[-1]]],57,65],0,[[[84,[-1]]],57,65],0,[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],0,0,[[[86,[-1]],17,11,3,4],5,82],[[[87,[-1]],17,11,3,4],5,82],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[86,[-1]]],3,82],[[[87,[-1]]],3,82],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,5],[4,5],0,0,[-1,-1,[]],[-1,-1,[]],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[[[57,[-1]],[57,[88]],[57,[88]]],[[86,[-1]]],82],[[[57,[-1]],[57,[88]]],[[87,[-1]]],82],0,0,[[[86,[-1]]],57,82],[[[87,[-1]]],57,82],0,[[[86,[-1]]],57,82],[[[87,[-1]]],57,82],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],0,0,0,[[-1,17,11,3,4,3,18],5,[]],[[-1,17,11,3,4,3,18],5,[]],[[-1,17,11,3,18,3,18],5,[]],[[-1,17,11,3,18,3,18],5,[]],[[-1,17,11,3,18,3,4],5,[]],[[-1,17,11,3,18,3,4],5,[]],[[-1,17,11,3,4,3,4],5,[]],[-1,57,[]],[[-1,3,4],7,[]],[-1,-2,[],[]],[-1,-2,[],[]],[[-1,3],5,[]],[[-1,3],5,[]],[4,-1,[]],[4,-1,[]],[[-1,3],4,[]],[4,5],[[-1,3,18],7,[]],[[-1,3,18],7,[]],[[64,26],27],[[64,26],27],[-1,-1,[]],[[],4],[-1,-2,[],[]],[-1,24,[]],[-1,24,[]],[-1,3,[]],[-1,[[6,[3]]],[]],[-1,[[6,[3]]],[]],[-1,[[6,[3]]],[]],[-1,[[6,[3]]],[]],[-1,3,[]],[-1,19,[]],[-1,19,[]],0,[-1,7,[]],[-1,4,[]],[-1,4,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],0,0,[[[88,[-1]],17,11,3,4,3,4],5,65],[[[88,[-1]],17,11,3,4,3,4],5,65],[[[88,[-1]]],57,65],[[[88,[-1]],3,4],7,65],0,[-1,-2,[],[]],[-1,-2,[],[]],[4,-1,[]],[4,-1,[]],[[[88,[-1]],3],4,65],[4,5],[[[88,[-1]],3],5,65],[[[88,[-1]],26],27,65],[-1,-1,[]],[[],4],[-1,-2,[],[]],[[[88,[-1]]],3,65],[[[88,[-1]]],[[6,[3]]],65],[[[88,[-1]]],3,65],0,[[[57,[-1]],3],[[88,[-1]]],65],[[[88,[-1]],3,17,18],5,65],[[[88,[-1]],3,18],5,65],[[[88,[-1]],3],5,65],[[[88,[-1]],3,-2],5,65,36],[[[88,[-1]],3,-2],5,65,89],[[[88,[-1]],3,17],5,65],0,[-1,7,[]],0,[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[57,3],[[88,[-1]]],90],0,0,[[[91,[-1]],17,11,3,4,3,4],5,62],[[[91,[-1]]],[[57,[-1]]],62],0,[[[91,[-1]],3,4],7,62],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[1,3,4,3],24],[[13,3,4,3],24],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[-1,[[38,[92]]],47],[[[91,[-1]],3],4,62],[4,5],[4,5],[[[91,[-1]],[91,[-1]]],24,62],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[-1,-2],24,[],[]],[[[91,[-1]],26],27,62],[[92,26],27],[-1,-1,[]],[-1,-1,[]],[[[57,[-1]],14],[[56,[[91,[-1]]]]],62],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[[91,[-1]]],3,62],[[[91,[-1]]],[[6,[3]]],62],0,0,[[[91,[-1]]],3,62],[[[57,[-1]],3,[6,[3]],24],[[91,[-1]]],62],[[[91,[-1]],14],5,62],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[[[57,[-1]],3],[[91,[-1]]],62],0,[[[57,[53]],14],[[56,[93]]]],0,[[[57,[53]],3],93],[[[57,[53]],14],[[56,[93]]]],0,[[[94,[-1]],17,11,3,4,3,18],5,65],[[[94,[-1]],17,11,3,18,3,18],5,65],[[[94,[-1]],17,11,3,18,3,4],5,65],[[[94,[-1]],17,11,3,4,3,4],5,65],[[[94,[-1]]],57,65],[[[94,[-1]],3,4],7,65],[-1,-2,[],[]],[-1,-2,[],[]],[[[94,[-1]],3],5,65],[4,-1,[]],[4,-1,[]],[[[94,[-1]],3],4,65],[4,5],[[[94,[-1]],3,18],7,65],[[[94,[-1]],26],27,65],[-1,-1,[]],[[],4],0,[-1,-2,[],[]],[[[94,[-1]]],24,65],[[[94,[-1]]],3,65],[[[94,[-1]]],[[6,[3]]],65],[[[94,[-1]]],[[6,[3]]],65],[[[94,[-1]]],3,65],[[[57,[-1]],3],[[94,[-1]]],65],[[[94,[-1]]],19,65],0,[-1,7,[]],[[[94,[-1]]],4,65],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[57,3],[[94,[-1]]],90],0,[[[95,[-1,-2]],17,11,3,4,3,18],5,65,65],[[[95,[-1,-2]],17,11,3,4,3,18],5,65,65],[[[95,[-1,-2]],17,11,3,4,3,4],5,65,65],[[[95,[-1,-2]]],[[57,[-3]]],65,65,[62,96]],[[[95,[-1,-2]],3,4],7,65,65],0,[-1,-2,[],[]],[-1,-2,[],[]],[[[95,[-1,-2]],3],5,65,65],[4,-1,[]],[4,-1,[]],[[[95,[-1,-2]],3],4,65,65],[4,5],[[[95,[-1,-2]],26],27,65,65],[-1,-1,[]],[[],4],[-1,-2,[],[]],0,[[[95,[-1,-2]]],3,65,65],[[[95,[-1,-2]]],[[6,[3]]],65,65],[[[95,[-1,-2]]],3,65,65],[[[57,[-1]],[57,[-2]]],[[95,[-1,-2]]],65,65],[[[95,[-1,-2]],3,3],4,65,65],0,[[[95,[-1,-2]],3,4],3,65,65],[-1,7,[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[[[57,[-1]],3],[[95,[-2,-3]]],[62,96],[65,90],[65,90]],0,[[57,3],-1,[]],0,0,0,[[-1,17,11,3,18,3],5,[]],0,[[-1,3,-2],22,[],23],[[],24],[[-1,-2],[[22,[5]]],[],25],[[-1,3],[],[]],0,[-1,4,[]],[[-1,11,3,4,3,4],5,[]],0,0,0,0,[[97,29,11,11],5],[[97,29,11,3,29],5],[[97,29,11,3,4],5],[-1,-2,[],[]],[-1,-2,[],[]],[[97,3],5],[4,-1,[]],[4,-1,[]],[[97,3],4],[4,5],[[97,2],[[56,[[5,[3,29]]]]]],[[97,2],[[56,[[5,[3,29]]]]]],[[97,[6,[3]],98],[[56,[[5,[3,29]]]]]],[[97,[6,[3]],99],[[56,[[5,[3,29]]]]]],[[97,2],[[56,[[100,[7,[5,[3,29]]]]]]]],[[97,[30,[101]]],[[5,[3,29]]]],[-1,-1,[]],[[],4],[-1,-2,[],[]],0,[[97,29,11,3,29],5],[[97,29,11,3,4],5],[[97,29,11,3,4],5],[[97,29,11,3,4],5],[19,97],[97,19],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[2,[[103,[2,98,[102,[2]]]]]],[2,[[103,[2,98,[102,[2]]]]]],[2,[[103,[2,99,[102,[2]]]]]],[2,[[103,[2,98,[102,[2]]]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-3,[[0,[89]]],[],[[104,[2]]],[[105,[2,-1,-2]]]],0,[99,99],[98,98],[101,101],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[2,[[0,[51]]]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[2,[[103,[2,-1,[102,[2]]]]],[106,107]],[4,5],[4,5],[4,5],[[99,26],27],[[98,26],27],[[101,26],27],[[-4,-6,-7],[[0,[89]]],108,[],[],[[105,[-1,-2,-3]]],[],[[105,[-1,-5,-3]]],89],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[],4],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[2,[[103,[2,[10,[[5,[98,7]]]],[102,[2]]]]]],[2,[[103,[2,7,[102,[2]]]]]],[2,[[103,[2,[10,[[5,[98,7]]]],[102,[2]]]]]],[2,[[103,[2,2,[102,[2]]]]]],[2,[[56,[98]]]],[2,[[56,[[10,[[5,[98,7]]]]]]]],[2,[[103,[2,3,[102,[2]]]]]],[-3,[[0,[89]]],[],[[104,[2]]],[[105,[2,-1,-2]]]],[[101,3],21],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,[[38,[-2]]],[],[]],[-1,39,[]],[-1,39,[]],[-1,39,[]]],"c":[],"p":[[3,"AdemAlgebra",134],[15,"str"],[15,"i32"],[15,"usize"],[15,"tuple"],[4,"Option",1891],[3,"String",1892],[3,"PolynomialAlgebraTableEntry",649],[3,"OnceVec",1893],[3,"Vec",1894],[15,"u32"],[3,"TruncatedPolynomialMonomialBasis",308],[3,"MilnorAlgebra",391],[4,"Value",1895],[3,"BiVec",1896],[8,"Fn",1897],[4,"SliceMut",1898],[4,"Slice",1898],[3,"ValidPrime",1899],[4,"SteenrodAlgebraBorrow",727],[3,"AdemBasisElement",134],[6,"Result",1900],[8,"Read",1901],[15,"bool"],[8,"Write",1901],[3,"Formatter",1902],[6,"Result",1902],[4,"PorBockstein",134],[4,"FpVector",1898],[15,"slice"],[15,"u64"],[8,"Hash",1903],[8,"Sized",1904],[8,"BuildHasher",1903],[8,"Hasher",1903],[8,"Iterator",1905],[15,"isize"],[4,"Result",1906],[3,"TypeId",1907],[3,"PartitionIterator",308],[3,"Field",360],[3,"MilnorBasisElement",391],[6,"PPartEntry",391],[3,"MilnorProfile",391],[3,"Matrix2D",391],[3,"PPartAllocation",391],[8,"Deserializer",1908],[6,"PPart",391],[3,"PPartMultiplier",391],[8,"Serializer",1909],[8,"FnOnce",1897],[3,"PolynomialAlgebraMonomial",649],[4,"SteenrodAlgebra",727],[4,"AlgebraType",727],[3,"AlgebraSpec",727],[6,"Result",1910],[3,"Arc",1911],[3,"BlockStructure",1006],[3,"GeneratorBasisEltPair",1006],[3,"Range",1912],[3,"FiniteDimensionalModule",1043],[8,"Algebra",263],[8,"GeneratedAlgebra",263],[3,"ModuleFailedRelationError",1561],[8,"Module",1561],[3,"FinitelyPresentedModule",1094],[6,"FreeModule",1148],[3,"MuFreeModule",1148],[8,"MuAlgebra",263],[3,"OperationGeneratorPair",1148],[3,"OnceBiVec",1893],[15,"array"],[3,"OffsetIterator",1148],[3,"HomModule",1264],[3,"Subspace",1913],[3,"QuasiInverse",1914],[3,"MatrixSliceMut",1915],[3,"Matrix",1915],[3,"MuFreeModuleHomomorphism",1372],[15,"f32"],[3,"FullModuleHomomorphism",1436],[8,"ModuleHomomorphism",1292],[3,"GenericZeroHomomorphism",1473],[3,"HomPullback",1494],[6,"FreeModuleHomomorphism",1372],[3,"QuotientHomomorphism",1522],[3,"QuotientHomomorphismSource",1522],[3,"QuotientModule",1606],[8,"FnMut",1897],[8,"ZeroModule",1763],[3,"RealProjectiveSpace",1641],[3,"RPSpec",1641],[6,"SteenrodModule",1693],[3,"SuspensionModule",1698],[3,"TensorModule",1732],[8,"Bialgebra",305],[3,"SteenrodEvaluator",1779],[4,"AlgebraNode",1810],[4,"AlgebraBasisElt",1810],[3,"BTreeMap",1916],[4,"BocksteinOrSq",1810],[3,"VerboseError",1917],[6,"IResult",1918],[8,"ParseError",1917],[8,"Parser",1918],[8,"FromStr",1919],[8,"Copy",1904],[8,"Clone",1920],[8,"AdemAlgebraT",134],[8,"PolynomialAlgebra",649],[8,"UnstableAlgebra",263],[8,"MilnorAlgebraT",391],[8,"SteenrodAlgebraT",727],[6,"MilnorHashMap",391],[8,"PairAlgebra",612],[3,"MilnorPairElement",612],[6,"HashMap",612],[6,"UnstableFreeModule",1148],[3,"GeneratorData",1148],[3,"FPMIndexTable",1094],[6,"UnstableFreeModuleHomomorphism",1372],[8,"IdentityHomomorphism",1292],[8,"ZeroHomomorphism",1292],[6,"IResult",1810],[6,"ModuleNode",1810]]},\ "algebra_dim":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"bivec":{"doc":"","t":"DLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLL","n":["BiVec","borrow","borrow_mut","clone","clone_into","data","default","deserialize","eq","equivalent","extend","extend_negative","extend_with","fmt","from","from_vec","get","get_max","index","index_mut","into","into_iter","into_iter","into_iter","into_iter_enum","into_vec","is_empty","iter","iter_enum","iter_mut","iter_mut_enum","last","len","max_degree","min_degree","min_degree","new","push","range","reserve","serialize","split_borrow_mut","to_owned","try_from","try_into","type_id","with_capacity"],"q":[[0,"bivec"]],"d":["A BiVec is like a Vec, except we allow indices to be …","","","","","","","","","","","If min_degree < self.min_degree, set self.min_degree to …","Extends the bivec such that max_degree() is at least max. …","","Returns the argument unchanged.","","","Get the idxth element if it exists; the last element …","","","Calls U::from(self).","","","","","","","","","","","","This returns the “length” of the bivector, defined to …","This returns the largest degree in the bivector. This is …","","","","","","","","Mutably borrows i and j. Panic if i != j.","","","","",""],"i":[0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],"f":[0,[[]],[[]],[[[2,[1]]],[[2,[1]]]],[[]],0,[[],2],[3,[[5,[[2,[4]]]]]],[[[2,[6]],[2,[6]]],7],[[],7],[[2,8]],[[[2,[1]],9,1]],[[2,9,10]],[[[2,[11]],12],13],[[]],[[9,14],2],[[2,9],15],[[2,9]],[[2,9]],[[2,9]],[[]],[2],[2],[2],[2,16],[2,14],[2,7],[2,17],[2,16],[2,18],[2,16],[2,15],[2,9],[2,9],[2,9],0,[9,2],[2],[2,[[19,[9]]]],[[2,20]],[[[2,[21]],22],5],[[2,9,9]],[[]],[[],5],[[],5],[[],23],[[9,9],2]],"c":[],"p":[[8,"Clone"],[3,"BiVec"],[8,"Deserializer"],[8,"Deserialize"],[4,"Result"],[8,"PartialEq"],[15,"bool"],[8,"IntoIterator"],[15,"i32"],[8,"FnMut"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"Vec"],[4,"Option"],[8,"DoubleEndedIterator"],[3,"Iter"],[3,"IterMut"],[3,"Range"],[15,"usize"],[8,"Serialize"],[8,"Serializer"],[3,"TypeId"]]},\ +"bivec":{"doc":"","t":"DLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLL","n":["BiVec","borrow","borrow_mut","clone","clone_into","data","default","deserialize","eq","equivalent","extend","extend_negative","extend_with","fmt","from","from_vec","get","get_max","index","index_mut","into","into_iter","into_iter","into_iter","into_iter_enum","into_vec","is_empty","iter","iter_enum","iter_mut","iter_mut_enum","last","len","max_degree","min_degree","min_degree","new","push","range","reserve","serialize","split_borrow_mut","to_owned","try_from","try_into","type_id","with_capacity"],"q":[[0,"bivec"],[47,"core::clone"],[48,"core::result"],[49,"serde::de"],[50,"serde::de"],[51,"core::iter::traits::collect"],[52,"core::ops::function"],[53,"core::fmt"],[54,"core::fmt"],[55,"core::option"],[56,"core::iter::traits::double_ended"],[57,"core::slice::iter"],[58,"core::slice::iter"],[59,"serde::ser"],[60,"serde::ser"]],"d":["A BiVec is like a Vec, except we allow indices to be …","","","","","","","","","","","If min_degree < self.min_degree, set self.min_degree to …","Extends the bivec such that max_degree() is at least max. …","","Returns the argument unchanged.","","","Get the idxth element if it exists; the last element …","","","Calls U::from(self).","","","","","","","","","","","","This returns the “length” of the bivector, defined to …","This returns the largest degree in the bivector. This is …","","","","","","","","Mutably borrows i and j. Panic if i != j.","","","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[0,[-1,-2,[],[]],[-1,-2,[],[]],[[[1,[-1]]],[[1,[-1]]],2],[[-1,-2],3,[],[]],0,[[],[[1,[-1]]],[]],[-1,[[4,[[1,[-2]]]]],5,6],[[[1,[-1]],[1,[-1]]],7,8],[[-1,-2],7,[],[]],[[[1,[-1]],-2],3,[],9],[[[1,[-1]],10,-1],3,2],[[[1,[-1]],10,-2],3,[],11],[[[1,[-1]],12],13,14],[-1,-1,[]],[[10,[15,[-1]]],[[1,[-1]]],[]],[[[1,[-1]],10],[[16,[-1]]],[]],[[[1,[-1]],10],-1,[]],[[[1,[-1]],10],-1,[]],[[[1,[-1]],10],-1,[]],[-1,-2,[],[]],[[[1,[-1]]],[],[]],[[[1,[-1]]],[],[]],[[[1,[-1]]],[],[]],[[[1,[-1]]],[[0,[17]]],[]],[[[1,[-1]]],[[15,[-1]]],[]],[[[1,[-1]]],7,[]],[[[1,[-1]]],[[18,[-1]]],[]],[[[1,[-1]]],[[0,[17]]],[]],[[[1,[-1]]],[[19,[-1]]],[]],[[[1,[-1]]],[[0,[17]]],[]],[[[1,[-1]]],[[16,[-1]]],[]],[[[1,[-1]]],10,[]],[[[1,[-1]]],10,[]],[[[1,[-1]]],10,[]],0,[10,[[1,[-1]]],[]],[[[1,[-1]],-1],3,[]],[[[1,[-1]]],[[20,[10]]],[]],[[[1,[-1]],21],3,[]],[[[1,[-1]],-2],4,22,23],[[[1,[-1]],10,10],[[3,[-1,-1]]],[]],[-1,-2,[],[]],[-1,[[4,[-2]]],[],[]],[-1,[[4,[-2]]],[],[]],[-1,24,[]],[[10,10],[[1,[-1]]],[]]],"c":[],"p":[[3,"BiVec",0],[8,"Clone",47],[15,"tuple"],[4,"Result",48],[8,"Deserializer",49],[8,"Deserialize",49],[15,"bool"],[8,"PartialEq",50],[8,"IntoIterator",51],[15,"i32"],[8,"FnMut",52],[3,"Formatter",53],[6,"Result",53],[8,"Debug",53],[3,"Vec",54],[4,"Option",55],[8,"DoubleEndedIterator",56],[3,"Iter",57],[3,"IterMut",57],[3,"Range",58],[15,"usize"],[8,"Serialize",59],[8,"Serializer",59],[3,"TypeId",60]]},\ "bruner":{"doc":"This script converts between our basis and Bruner’s …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"chart":{"doc":"","t":"NINSQSSNSERNSDDLLLLLLLLLLLLLKLLLLLLLKLLMMMMLLKLLMMMMKLLLKLLLLLLLLLLL","n":["Above","Backend","Below","EXT","Error","GRID_WIDTH","HEADER","Left","MARGIN","Orientation","PATTERNS","Right","STYLES","SvgBackend","TikzBackend","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","drop","drop","from","from","from","get_coords","get_coords","header","header","header","init","into","into","into","legend","line","line","line","max_x","max_x","max_y","max_y","new","new","node","node","node","num_nodes","num_nodes","out","out","structline","structline","structline","structline_matrix","text","text","text","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"chart"]],"d":["","","","If the backend writes to a file, this is the extension …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns r, x, y","Returns r, x, y","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Print the legend for node patterns","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[13,0,13,15,15,2,3,13,2,0,0,13,2,0,0,13,2,3,13,2,3,2,3,13,2,3,2,3,15,2,3,15,13,2,3,2,15,2,3,2,3,2,3,2,3,15,2,3,2,3,2,3,15,2,3,15,15,2,3,13,2,3,13,2,3,13,2,3],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]]]],[[[3,[1]]]],[[]],[[]],[[]],[[[2,[1]],4,4,5]],[[[3,[1]],4,4,5]],[[4,4],6],[[[2,[1]],4,4],6],[[[3,[1]],4,4],6],[[4,4],6],[[]],[[]],[[]],[1,7],[[4,4,4,4,8],6],[[[2,[1]],4,4,4,4,8],6],[[[3,[1]],4,4,4,4,8],6],0,0,0,0,[1,[[2,[1]]]],[1,[[3,[1]]]],[[4,4,5],6],[[[2,[1]],4,4,5],6],[[[3,[1]],4,4,5],6],0,0,0,0,[[[9,[8]]],6],[[[2,[1]],[9,[8]]],6],[[[3,[1]],[9,[8]]],6],[[[11,[[11,[10]]]],[9,[8]]],6],[[4,4,12,13],6],[[[2,[1]],4,4,12,13],6],[[[3,[1]],4,4,12,13],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],14],[[],14],[[],14]],"c":[],"p":[[8,"Write"],[3,"SvgBackend"],[3,"TikzBackend"],[15,"i32"],[15,"usize"],[4,"Result"],[6,"Result"],[15,"str"],[4,"Option"],[15,"u32"],[3,"Vec"],[8,"Display"],[4,"Orientation"],[3,"TypeId"],[8,"Backend"]]},\ +"chart":{"doc":"","t":"NINSQSSNSERNSDDLLLLLLLLLLLLLKLLLLLLLKLLMMMMLLKLLMMMMKLLLKLLLLLLLLLLL","n":["Above","Backend","Below","EXT","Error","GRID_WIDTH","HEADER","Left","MARGIN","Orientation","PATTERNS","Right","STYLES","SvgBackend","TikzBackend","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","drop","drop","from","from","from","get_coords","get_coords","header","header","header","init","into","into","into","legend","line","line","line","max_x","max_x","max_y","max_y","new","new","node","node","node","num_nodes","num_nodes","out","out","structline","structline","structline","structline_matrix","text","text","text","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"chart"],[68,"std::io"],[69,"core::result"],[70,"std::io::error"],[71,"core::option"],[72,"alloc::vec"],[73,"core::fmt"],[74,"core::any"]],"d":["","","","If the backend writes to a file, this is the extension …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns r, x, y","Returns r, x, y","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Print the legend for node patterns","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[14,0,14,17,17,1,4,14,1,0,0,14,1,0,0,14,1,4,14,1,4,1,4,14,1,4,1,4,17,1,4,17,14,1,4,1,17,1,4,1,4,1,4,1,4,17,1,4,1,4,1,4,17,1,4,17,17,1,4,14,1,4,14,1,4,14,1,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[1,[-1]]],2,3],[[[4,[-1]]],2,3],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[1,[-1]],5,5,6],[[2,[7,7,7]]],3],[[[4,[-1]],5,5,6],[[2,[7,7,7]]],3],[[-1,5,5],[[8,[2]]],[]],[[[1,[-1]],5,5],[[8,[2]]],3],[[[4,[-1]],5,5],[[8,[2]]],3],[[-1,5,5],[[8,[2]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[9,[2]]],3],[[-1,5,5,5,5,10],[[8,[2]]],[]],[[[1,[-1]],5,5,5,5,10],[[8,[2]]],3],[[[4,[-1]],5,5,5,5,10],[[8,[2]]],3],0,0,0,0,[-1,[[1,[-1]]],3],[-1,[[4,[-1]]],3],[[-1,5,5,6],[[8,[2]]],[]],[[[1,[-1]],5,5,6],[[8,[2]]],3],[[[4,[-1]],5,5,6],[[8,[2]]],3],0,0,0,0,[[-1,[2,[5,5,6]],[2,[5,5,6]],[11,[10]]],[[8,[2]]],[]],[[[1,[-1]],[2,[5,5,6]],[2,[5,5,6]],[11,[10]]],[[8,[2]]],3],[[[4,[-1]],[2,[5,5,6]],[2,[5,5,6]],[11,[10]]],[[8,[2]]],3],[[-1,[2,[5,5]],[2,[5,5]],[13,[[13,[12]]]],[11,[10]]],[[8,[2]]],[]],[[-1,5,5,-2,14],[[8,[2]]],[],15],[[[1,[-1]],5,5,-2,14],[[8,[2]]],3,15],[[[4,[-1]],5,5,-2,14],[[8,[2]]],3,15],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],[-1,16,[]]],"c":[],"p":[[3,"SvgBackend",0],[15,"tuple"],[8,"Write",68],[3,"TikzBackend",0],[15,"i32"],[15,"usize"],[15,"f32"],[4,"Result",69],[6,"Result",70],[15,"str"],[4,"Option",71],[15,"u32"],[3,"Vec",72],[4,"Orientation",0],[8,"Display",73],[3,"TypeId",74],[8,"Backend",0]]},\ "d2_charts":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"define_module":{"doc":"","t":"FFFF","n":["gens_to_json","get_gens","interactive_module_define_fdmodule","interactive_module_define_fpmodule"],"q":[[0,"define_module"]],"d":["","","",""],"i":[0,0,0,0],"f":[[[[3,[[2,[1]]]]],4],[[],[[5,[[3,[[2,[1]]]]]]]],[[4,6],5],[[4,6],5]],"c":[],"p":[[3,"String"],[3,"Vec"],[3,"BiVec"],[4,"Value"],[6,"Result"],[3,"ValidPrime"]]},\ +"define_module":{"doc":"","t":"FFFF","n":["gens_to_json","get_gens","interactive_module_define_fdmodule","interactive_module_define_fpmodule"],"q":[[0,"define_module"],[4,"alloc::string"],[5,"alloc::vec"],[6,"bivec"],[7,"serde_json::value"],[8,"anyhow"],[9,"fp::prime"]],"d":["","","",""],"i":[0,0,0,0],"f":[[[[3,[[2,[1]]]]],4],[[],[[5,[[3,[[2,[1]]]]]]]],[[4,6],[[5,[7]]]],[[4,6],[[5,[7]]]]],"c":[],"p":[[3,"String",4],[3,"Vec",5],[3,"BiVec",6],[4,"Value",7],[6,"Result",8],[3,"ValidPrime",9],[15,"tuple"]]},\ "differentials":{"doc":"This prints all the differentials in the resolution.","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"ext":{"doc":"ext-rs is a collection of libraries for doing homological …","t":"GAAAAAAAAQIIIECDQNDDINQQDQKLLLLLLLMMAKMMLKMLLLLLLKMLLLLLLALLLLKLLLLLLLLKMKKMLKLLMLLKMLLLLLLLLLLKMDDLLLLLLLMLLMLLLLLLLLMLLLLLLLLLLLLLLLLLLLMLLLLLMLLLLLLLLMNNSREDDDNDDLLMLLLLLLLLLLLLLMLLLLMMMLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLMLMLLLLLLLLLLLMLMLMLMLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLMLRDGDGLLMLLLLLMMLLLLLLLLLMLLLLLLLLLLLMMMLLMLMLMLLLMLMLMLLLLLLLLLMDGGLLLLLLLLLLLLLLLLLLLLMLMLLLMMMMLLLNNNDDNNNNNDENNNMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLMLLLLLFLFMLLMLLLLLLLLLLLLLLLLLLLMQGSDDIDQHQQLLLLKLLLLLLLLKLLMMLLLKLLLMLLLLLLLLLLLLLLLLLMKLMMLLLLLKLMLLLKLLLLLKLKLMKLMKLMMLLLLLLLLLLKLMDDGRDMLLMLLFFFLLLLLLLLLFLLFAMFFFFFFMLLLLLLLFMDDLLLLMLLLLLLLLLLLLLLLLLMLLLLLLLMRGFFFFFFFFF","n":["CCC","chain_complex","nassau","resolution","resolution_homomorphism","save","secondary","utils","yoneda","Algebra","AugmentedChainComplex","BoundedChainComplex","ChainComplex","ChainComplexGrading","ChainHomotopy","ChainMap","ChainMap","Cohomological","FiniteAugmentedChainComplex","FiniteChainComplex","FreeChainComplex","Homological","Homomorphism","Module","StemIterator","TargetComplex","algebra","apply_quasi_inverse","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cc","cc","chain_homotopy","chain_map","chain_maps","chain_maps","cocycle_string","compute_through_bidegree","current","deref","deref","deref","deref_mut","deref_mut","deref_mut","differential","differentials","drop","drop","drop","euler_characteristic","filtration_one_product","filtration_one_products","finite_chain_complex","from","from","from","graded_dimension_string","has_computed_bidegree","init","init","init","into","into","into","into_iter","iter_stem","max_s","max_s","min_degree","module","modules","next","next_homological_degree","number_of_gens_in_bidegree","prime","s_shift","save_dir","save_file","target","target_cc","to_sseq","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","zero_module","zero_module","FiniteAugmentedChainComplex","FiniteChainComplex","algebra","algebra","augment","borrow","borrow","borrow_mut","borrow_mut","cc","ccdz","chain_map","chain_maps","compute_through_bidegree","compute_through_bidegree","deref","deref","deref_mut","deref_mut","differential","differential","differentials","drop","drop","from","from","from","has_computed_bidegree","has_computed_bidegree","init","init","into","into","map","map","max_s","max_s","min_degree","min_degree","module","module","modules","new","next_homological_degree","next_homological_degree","pop","target","target_cc","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","zero_module","zero_module","End","Fix","INFINITY","MAX_NEW_GENS","Magic","MilnorSubalgebra","Resolution","SenderData","Signature","SignatureIterator","SubalgebraIterator","algebra","apply_quasi_inverse","b","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_map","chain_maps","clone","clone_into","compute_through_bidegree","compute_through_stem","current","current","degree","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","differential","differentials","drop","drop","drop","drop","drop","drop","extend_through_degree","fmt","from","from","from","from","from","from","from_bytes","has_computed_bidegree","has_signature","init","init","init","init","init","init","into","into","into","into","into","into","into_iter","into_iter","iter_signatures","lock","max_degree","min_degree","module","modules","name","name","new","new","new","new","new_with_save","next","next","next_homological_degree","optimal_for","par_bridge","prime","profile","save_dir","save_dir","send","sender","set_name","signature_degree","signature_from_bytes","signature_mask","signature_matrix","signature_to_bytes","step0","step1","step_resolution","step_resolution_with_result","step_resolution_with_subalgebra","subalgebra","target","target","to_bytes","to_owned","to_string","top_degree","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","write_differential","write_qi","zero_algebra","zero_module","zero_module","zero_signature","MAX_NEW_GENS","MuResolution","Resolution","SenderData","UnstableResolution","algebra","apply_quasi_inverse","b","borrow","borrow","borrow_mut","borrow_mut","chain_map","chain_maps","complex","compute_through_bidegree","compute_through_bidegree_with_callback","compute_through_stem","compute_through_stem_with_callback","deref","deref","deref_mut","deref_mut","differential","differentials","drop","drop","extend_through_degree","from","from","get_kernel","has_computed_bidegree","init","init","into","into","kernels","load_quasi_inverse","lock","min_degree","module","modules","name","name","new","new","new_with_save","next_homological_degree","save_dir","save_dir","send","sender","set_name","should_save","step_resolution","target","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","zero_module","MuResolutionHomomorphism","ResolutionHomomorphism","UnstableResolutionHomomorphism","act","algebra","borrow","borrow_mut","deref","deref_mut","drop","extend","extend_all","extend_profile","extend_step","extend_step_raw","extend_through_stem","from","from_class","from_module_homomorphism","get_map","get_map_ensure_length","init","into","maps","name","name","new","next_homological_degree","save_dir","save_dir","shift","source","target","try_from","try_into","type_id","AugmentationQi","ChainHomotopy","ChainMap","ChecksumReader","ChecksumWriter","Differential","Kernel","NassauDifferential","NassauQi","ResQi","SaveFile","SaveKind","SecondaryComposite","SecondaryHomotopy","SecondaryIntermediate","adler","adler","algebra","b","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","create_dir","create_file","delete_file","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","eq","equivalent","equivalent","equivalent","exists","flush","fmt","from","from","from","from","get_save_path","idx","init","init","init","init","into","into","into","into","kind","magic","name","nassau_data","new","new","open_file","open_file","open_files","path","read","read_exact","reader","resolution_data","secondary_data","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","validate_header","write","write_all","write_header","writer","Algebra","CompositeData","HIT_GENERATOR","SecondaryComposite","SecondaryHomotopy","SecondaryLift","SecondaryResolution","Source","TAU_BIDEGREE","Target","Underlying","act","act","add_composite","add_composite","algebra","algebra","algebra","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","composite","composite","composite","composite","composites","compute_composites","compute_homotopies","compute_homotopy_step","compute_intermediate","compute_intermediate","compute_intermediates","compute_partial","degree","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","e3_page","extend_all","finalize","from","from","from","from_bytes","get_intermediate","hit_generator","homotopies","homotopies","homotopies","homotopies","homotopy","init","init","init","initialize_homotopies","intermediates","intermediates","intermediates","into","into","into","max","max","new","new","new","prime","save_dir","save_dir","shift","shift","shift_t","source","source","source","target","target","target","target","to_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","underlying","underlying","underlying","Config","LogWriter","QueryModuleResolution","STATIC_MODULES_PATH","Timer","algebra","borrow","borrow_mut","bytes","clone","clone_into","construct","construct_nassau","construct_standard","deref","deref_mut","drop","eq","equivalent","equivalent","equivalent","fmt","from","get_unit","init","into","load_module_json","logging","module","parse_module_name","query_module","query_module_only","query_unstable_module","query_unstable_module_only","secondary_job","timer","to_owned","try_from","try_from","try_from","try_from","try_into","type_id","unicode_num","writer","LogWriter","Timer","borrow","borrow","borrow_mut","borrow_mut","bytes","deref","deref","deref_mut","deref_mut","drop","drop","end","finalize","flush","from","from","init","init","into","into","new","start","timer","try_from","try_from","try_into","try_into","type_id","type_id","write","writer","PENALTY_UNIT","Yoneda","compute_kernel_image","operation_drop","rate_adem_operation","rate_milnor_operation","rate_operation","split_mut_borrow","yoneda_representative","yoneda_representative_element","yoneda_representative_with_strategy"],"q":[[0,"ext"],[9,"ext::chain_complex"],[97,"ext::chain_complex::finite_chain_complex"],[154,"ext::nassau"],[300,"ext::resolution"],[364,"ext::resolution_homomorphism"],[400,"ext::save"],[500,"ext::secondary"],[601,"ext::utils"],[646,"ext::utils::logging"],[679,"ext::yoneda"]],"d":["","","This module implements Nassau’s algorithm. The main …","This module exports the Resolution object, which is a …","This module defines MuResolutionHomomorphism, which is a …","","","A module containing various utility functions related to …","","","An augmented chain complex is a map of chain complexes C …","A bounded chain complex is a chain complex C for which C_s …","A chain complex is defined to start in degree 0. The …","","","chain_maps is required to be non-empty","","","","","","","","","An iterator returned by ChainComplex::iter_stem","","","Apply the quasi-inverse of the (s, t)th differential to …","","","","","","","","","","","","","","Ensure all bidegrees less than or equal to (s, t) have …","","","","","","","","This returns the differential starting from the sth module.","","","","","","Computes the filtration one product.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","If the complex has been computed at bidegree (s, t). This …","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Iterate through all defined bidegrees in increasing order …","","","","","","","The first s such that self.module(s) is not defined.","","","","A directory used to save information about the chain …","Get the save file of a bidegree","","","","","","","","","","","","","","","","","","","","","","","","","","This currently crashes if s is greater than the s degree …","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","This should be used when you want an entry of the profile …","","Some magic constants used in the save file","A Milnor subalgebra to be used in Nassau’s algorithm. …","A resolution of S_2 using Nassau’s algorithm. This aims …","See resolution::SenderData. This differs by not having the …","","See MilnorSubalgebra::iter_signatures.","An iterator that iterates through a sequence of …","","","","","","","","","","","","","","","","","","","","","This function resolves up till a fixed stem instead of a …","","","","","","","","","","","","","","","","","","","","","","","","This function prepares the Resolution object to perform …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Computes the signature of an element","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Iterate through all signatures of this algebra that …","","","","","","","","","","","","","","","","","","","","","","","","","","","Give a list of basis elements in degree degree that has …","Get the matrix of a free module homomorphism when …","","Step resolution for s = 0","Step resolution for s = 1","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The algebra with trivial profile, corresponding to the …","","","","This is the maximum number of new generators we expect in …","A minimal resolution of a chain complex. The functions …","","In MuResolution::compute_through_stem and …","","","","","","","","","","","","","","This function resolves up till a fixed stem instead of a …","","","","","","","","","","This function prepares the Resolution object to perform …","Returns the argument unchanged.","Returns the argument unchanged.","Gets the kernel of the differential starting at $(s, t)$. …","","","","Calls U::from(self).","Calls U::from(self).","For each internal degree, store the kernel of the most …","Whether we should keep the quasi-inverses of the …","","","","","","","","Whether this bidegree was newly calculated or have already …","","","","","","The sender object used to send the SenderData. We put this …","","Whether we should save newly computed data to the disk. …","Call our resolution $X$, and the chain complex to resolve …","","","","","","","","","","A chain complex homomorphims from a FreeChainComplex. This …","","","Given a chain map $f: C \\\\to C’$ between free chain …","","","","","","","Extend the resolution homomorphism such that it is defined …","Extend the resolution homomorphism as far as possible, as …","Extends the resolution homomorphism up to a given range. …","Extend the MuResolutionHomomorphism to be defined on …","Extend the MuResolutionHomomorphism to be defined on …","Extend the resolution homomorphism such that it is defined …","Returns the argument unchanged.","","Construct a chain map that lifts a given module …","Returns the chain map on the sth source module.","","","Calls U::from(self).","","","","","","","","","","","","","","The quasi-inverse of the augmentation map","A chain homotopy","A chain map","","In addition to checking the checksum, we also keep track …","The differential and augmentation map in a resolution","The kernel of a resolution differential","The differential with Nassau’s algorithm. This does not …","The quasi-inverse data in Nassau’s algorithm","The quasi-inverse of the resolution differential","","","Secondary composite","A secondary homotopy","Intermediate data used by secondary code","","","","","","","","","","","","","","","","Arguments","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","This panics if there is no save dir","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","Open the file pointed to by path as a Box<dyn Read>. If …","","A DashSet> of files that are currently opened and being …","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether the composite can hit generators. This is true for …","A homotopy of a map A -> M of pair modules. We assume this …","","When lifting a thing to its secondary version, often what …","","","","","","","Compute the image of an element in the source under the …","","Add composites up to and including the specified degree","","","","","","","","","","","","","The component of the map on the R_B portion. gen_deg -> …","gen_deg -> gen_idx -> composite","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","gen_deg -> gen_idx -> homotopy","s -> t -> idx -> homotopy","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","output_t = input_t - shift_t","","","","","","","","","","","","","","","","","","","","","A config object is an object that specifies how a Steenrod …","","The type returned by query_module. The value of this type …","","If the logging feature is enabled, this can be used to …","The basis for the Steenrod algebra","","","","","","This constructs a resolution resolving a module according …","See construct","See construct","","","","","","","","","Returns the argument unchanged.","Given a resolution, return a resolution of the unit, …","","Calls U::from(self).","Given the name of a module file (without the .json …","","The json specification of the module","Given a module specification string, load a json …","Query the user for a module and a bidegree, and return a …","Query the user for a module and its save directory. See …","","","The value of the SECONDARY_JOB environment variable. This …","","","","","","","","","Given an n: usize, return a UTF-8 character that best …","","","If the logging feature is enabled, this can be used to …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","This function does the following computation:","","","","","","This function produces a quasi-isomorphic quotient of cc …","",""],"i":[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,65,102,0,0,0,102,15,15,0,65,15,15,102,14,99,102,14,99,28,14,0,65,28,99,60,15,14,102,14,99,102,14,99,15,27,102,14,99,103,60,60,0,102,14,99,60,15,102,14,99,102,14,99,14,15,103,14,15,15,27,14,15,60,15,99,15,15,65,28,60,102,14,99,102,14,99,102,14,99,15,27,0,0,27,28,27,27,28,27,28,28,27,28,28,27,28,27,28,27,28,27,28,27,27,28,27,27,28,27,28,27,28,27,28,27,28,27,28,27,28,27,28,27,27,27,28,27,28,28,27,28,27,28,27,28,27,28,27,104,104,34,0,0,0,0,0,104,0,0,33,33,48,48,42,43,104,33,34,48,42,43,104,33,34,33,33,34,34,33,33,42,43,43,48,42,43,104,33,34,48,42,43,104,33,34,33,33,48,42,43,104,33,34,33,34,48,42,43,104,33,34,34,33,34,48,42,43,104,33,34,48,42,43,104,33,34,42,43,34,33,33,33,33,33,33,33,42,43,33,34,33,42,43,33,34,42,33,34,33,33,48,48,33,43,34,34,34,34,33,33,33,33,33,43,33,33,34,34,34,34,48,42,43,104,33,34,48,42,43,104,33,34,48,42,43,104,33,34,33,33,34,33,33,34,0,0,0,0,0,57,57,59,59,57,59,57,57,57,57,57,57,57,57,59,57,59,57,57,57,59,57,57,59,57,57,57,59,57,59,57,57,57,57,57,57,57,57,57,57,59,57,57,57,57,59,59,57,57,57,57,59,57,59,57,59,57,57,57,0,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,19,19,19,0,0,19,19,19,19,19,0,0,19,19,19,69,70,20,20,69,70,20,19,69,70,20,19,19,19,19,20,20,69,70,20,19,69,70,20,19,69,69,70,70,20,19,19,19,19,19,20,69,19,69,70,20,19,20,20,69,70,20,19,69,70,20,19,20,19,19,19,69,70,0,20,0,69,70,70,70,19,19,19,69,70,20,19,69,70,20,19,69,70,20,19,20,69,69,20,69,105,0,105,0,0,0,0,105,0,105,105,76,79,76,79,105,76,81,76,79,81,76,79,81,105,79,81,76,79,105,105,105,105,81,105,105,76,76,79,81,76,79,81,76,79,81,81,105,76,76,79,81,76,105,79,105,81,79,81,81,76,79,81,105,105,81,81,76,79,81,105,81,76,79,81,105,105,81,105,81,79,105,81,79,105,81,76,79,76,76,79,81,76,79,81,76,79,81,105,81,81,0,0,0,0,0,84,84,84,96,84,84,0,0,0,84,84,84,84,84,84,84,84,84,0,84,84,0,0,84,0,0,0,0,0,0,96,84,84,84,84,84,84,84,0,96,0,0,94,96,94,96,96,94,96,94,96,94,96,94,96,96,94,96,94,96,94,96,96,94,96,94,96,94,96,94,96,96,96,0,0,0,0,0,0,0,0,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[2,3,2],4],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[5,1],0,0,[[6,4],7],[3],0,[8],[8],[8],[8],[8],[8],[5,1],0,[8],[8],[8],[9,10],[[9,8,3],[[12,[[11,[[11,[5]]]]]]]],[[9,8],13],0,[[]],[[]],[[]],[[],7],[3,4],[[],8],[[],8],[[],8],[[]],[[]],[[]],[[]],[[],14],[[],5],0,[[],9],[5,1],0,[[[14,[[0,[15,16]]]]],12],[[],5],[3,8],[[],17],0,[[],[[12,[18]]]],[[19,3],20],[[],1],0,[[],[[22,[21]]]],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],1],0,0,0,[[[27,[25,26]]],1],[[[28,[25,26,26,15]]],1],[[[27,[25,26]],[1,[15]],[11,[[1,[26]]]]],[[28,[25,26,26,15]]]],[[]],[[]],[[]],[[]],0,[[[1,[[0,[25,29]]]]],[[27,[[0,[25,29]],[0,[26,[30,[[0,[25,29]],[0,[25,29]]]]]]]]]],[[[28,[25,26,26,15]],5],1],0,[[[27,[25,26]],3]],[[[28,[25,26,26,15]],3]],[8],[8],[8],[8],[[[27,[25,26]],5],1],[[[28,[25,26,26,15]],5],1],0,[8],[8],[[[28,[25,26,26,15]]],[[27,[25,26]]]],[[]],[[]],[[[27,[25,26]],3],4],[[[28,[25,26,26,15]],3],4],[[],8],[[],8],[[]],[[]],[[[27,[25,[31,[25]]]],32],[[27,[25,[31,[25]]]]]],[[[28,[25,[31,[25]],[31,[25]],15]],32],[[28,[25,[31,[25]],[31,[25]],15]]]],[[[27,[25,26]]],5],[[[28,[25,26,26,15]]],5],[[[27,[25,26]]],9],[[[28,[25,26,26,15]]],9],[[[27,[25,26]],5],1],[[[28,[25,26,26,15]],5],1],0,[[[11,[[1,[[0,[25,29]]]]]],[11,[[1,[[0,[26,[30,[[0,[25,29]],[0,[25,29]]]]]]]]]]],[[27,[[0,[25,29]],[0,[26,[30,[[0,[25,29]],[0,[25,29]]]]]]]]]],[[[27,[25,26]]],5],[[[28,[25,26,26,15]]],5],[[[27,[25,[0,[26,[30,[25,25]]]]]]]],[[[28,[25,26,26,15]]],1],0,[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[[27,[25,26]]],1],[[[28,[25,26,26,15]]],1],0,0,0,0,0,0,0,0,0,0,0,0,[[[33,[29]]],1],[[[33,[29]],2,3,2],4],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[33,[29]],5],1],0,[34,34],[[]],[[[33,[29]],3]],[[[33,[29]],3]],0,0,0,[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[[[33,[29]],5],1],0,[8],[8],[8],[8],[8],[8],[[[33,[29]],5]],[[34,35],[[23,[36]]]],[[]],[[]],[[]],[[]],[[]],[[]],[37,[[38,[34]]]],[[[33,[29]],3],4],[[34,[2,[39]],[2,[39]]],4],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[34,9],40],0,0,[[[33,[29]]],9],[[[33,[29]],5],1],0,[[[33,[29]]],41],0,[[],42],[[34,9],43],[[[1,[29]]],[[33,[29]]]],[[[11,[44]]],34],[[[1,[29]],[12,[45]]],[[46,[[33,[29]]]]]],[42,12],[43,12],[[[33,[29]]],5],[3,34],[[],47],[[[33,[29]]],17],0,[[[33,[29]]],[[12,[18]]]],0,[[3,[49,[48]]]],0,[[[33,[29]],7]],0,[[34,37],[[38,[[11,[39]]]]]],[[34,50,[51,[50]],9,[2,[39]]],40],[[34,[52,[[51,[50]]]],9,[2,[39]]],53],[[[2,[39]],54],38],[[[33,[29]],9]],[[[33,[29]],9],46],[[[33,[29]],3]],[[[33,[29]],3],46],[[[33,[29]],3,34],46],0,[[[33,[29]]],1],0,[[34,54],38],[[]],[[],7],[34,9],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[[33,[29]],3,8,8],46],[[[12,[54]],3,34,55,[2,[39]],[2,[8]],53,56],38],[[],34],[[[33,[29]]],1],0,[34,[[11,[39]]]],0,0,0,0,0,[[[57,[15]]],1],[[[57,[15]],2,3,2],4],0,[[]],[[]],[[]],[[]],[[[57,[15]],5],1],0,0,[[[57,[15]],3]],[[[57,[15]],3,32]],[[[57,[15]],3]],[[[57,[15]],3,32]],[8],[8],[8],[8],[[[57,[15]],5],1],0,[8],[8],[[[57,[15]],5]],[[]],[[]],[[[57,[15]],3],58],[[[57,[15]],3],4],[[],8],[[],8],[[]],[[]],0,0,0,[[[57,[15]]],9],[[[57,[15]],5],1],0,[[[57,[15]]],41],0,[[[1,[15]]],[[57,[15]]]],0,[[[1,[15]],[12,[45]]],[[46,[[57,[15]]]]]],[[[57,[15]]],5],[[[57,[15]]],[[12,[18]]]],0,[[3,4,[49,[59]]]],0,[[[57,[15]],7]],0,[[[57,[15]],3]],[[[57,[15]]],1],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[[57,[15]]],1],0,0,0,0,[[[61,[60,60]],62,5,6]],[[[61,[60,15]]],1],[[]],[[]],[8],[8],[8],[[[61,[60,15]],3]],[[[61,[60,15]]]],[[[61,[60,15]],[64,[63]]]],[[[61,[60,65]],3,[12,[53]]],[[66,[9]]]],[[[61,[60,15]],3,[12,[[11,[55]]]]],[[66,[9]]]],[[[61,[60,15]],3]],[[]],[[7,[1,[60]],[1,[65]],3,[2,[5]]],[[61,[60,65]]]],[[7,[1,[[0,[65,60]]]],[1,[65]],26],[[61,[[0,[65,60]],65]]]],[[[61,[60,15]],5],[[1,[67]]]],[[[61,[60,15]],5],67],[[],8],[[]],0,[[[61,[60,15]]],41],0,[[7,[1,[60]],[1,[15]],3],[[61,[60,15]]]],[[[61,[60,15]]],9],[[[61,[60,15]]],[[12,[18]]]],0,0,0,0,[[],23],[[],23],[[],24],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[19,19],[[]],[[19,18],46],[[[20,[68]],45,4],54],[[[20,[68]],45],38],[8],[8],[8],[8],[8],[8],[8],[8],[8],[[[69,[54]]]],[8],[[[70,[37]]]],[8],[8],[[19,19],4],[[],4],[[],4],[[],4],[[[20,[68]],45],4],[[[69,[54]]],38],[[19,35],71],[[]],[[]],[[]],[[]],[[[20,[68]],45],45],0,[[],8],[[],8],[[],8],[[],8],[[]],[[]],[[]],[[]],0,[19,5],[19,41],[[],40],[[45,54],[[69,[54]]]],[37,[[70,[37]]]],[45,[[12,[[72,[37]]]]]],[[[20,[68]],45],[[12,[[72,[37]]]]]],[[],[[74,[[73,[45]]]]]],0,[[[70,[37]],[2,[44]]],[[38,[8]]]],[[[70,[37]],[2,[44]]],38],0,[[],40],[[],40],[[]],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],24],[[[20,[68]],37],38],[[[69,[54]],[2,[44]]],[[38,[8]]]],[[[69,[54]],[2,[44]]],38],[[[20,[68]],54],38],0,0,0,0,0,0,0,0,0,0,0,0,[[[76,[75]],62,5,9,77]],[[[79,[[0,[75,78,63]]]],62,5,9,77,4]],[[[76,[75]],5,9,8,[52,[[51,[75]]]],[52,[[51,[75]]]]]],[[[79,[[0,[75,78,63]]]],5,9,[80,[[0,[75,78,63]]]],[12,[18]]]],[[],1],[[[76,[75]]],[[1,[75]]]],[[[81,[60]]],1],[[]],[[]],[[]],[[]],[[]],[[]],[5,80],[[[79,[[0,[75,78,63]]]],9,8],[[76,[[0,[75,78,63]]]]]],[[[81,[60]],5],80],0,0,[[]],[[]],[3,[[66,[9]]]],[6,55],[[[81,[60]],6],55],[[]],[5],0,[8],[8],[8],[8],[8],[8],[8],[8],[8],[[[81,[60]]],[[22,[21]]]],[[]],[[[76,[75]]]],[[]],[[]],[[]],[[[1,[[51,[75]]]],9,4,37],[[38,[[76,[75]]]]]],[6,55],0,[[],[[82,[79]]]],[[[81,[60]]],[[82,[79]]]],0,0,[[[81,[60]],5],79],[[],8],[[],8],[[],8],[[]],[[],[[83,[6,55]]]],[[[81,[60]]],[[83,[6,55]]]],0,[[]],[[]],[[]],[[],64],[[[81,[60]]],[[64,[[81,[60]]]]]],[[[1,[[51,[75]]]],9,4],[[76,[75]]]],[[[1,[[51,[[0,[75,78,63]]]]]],[1,[[51,[[0,[75,78,63]]]]]],9,4],[[79,[[0,[75,78,63]]]]]],[[[1,[60]]],[[81,[60]]]],[[],17],[[],[[12,[18]]]],[[[81,[60]]],[[12,[18]]]],[[],3],[[[81,[60]]],3],0,[[],1],[[[81,[60]]],1],0,[[],1],[[[81,[60]]],1],0,0,[[[76,[75]],54],38],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],1],[[[81,[60]]],[[1,[60]]]],0,0,0,0,0,0,0,[[]],[[]],0,[84,84],[[]],[[[85,[84]],[12,[45]]],[[46,[86]]]],[[[85,[84]],[12,[45]]],[[46,[[33,[[87,[50]]]]]]]],[[[85,[84]],[12,[45]]],[[46,[[57,[88]]]]]],[8],[8],[8],[[84,84],4],[[],4],[[],4],[[],4],[[84,35],71],[[]],[[[1,[86]]],46],[[],8],[[]],[41,[[46,[89]]]],0,0,[41,[[46,[89]]]],[[[12,[90]],4],[[46,[86]]]],[[41,[12,[90]],4],[[46,[86]]]],[4,[[46,[[91,[88]]]]]],[[],[[46,[92]]]],[[],[[12,[5]]]],0,[[]],[[],[[23,[84]]]],[[],23],[[],[[23,[84]]]],[41,[[23,[84]]]],[[],23],[[],24],[8,93],0,0,0,[[]],[[]],[[]],[[]],0,[8],[8],[8],[8],[8],[8],[[94,95]],[[[96,[54]],95]],[[[96,[54]]],38],[[]],[[]],[[],8],[[],8],[[]],[[]],[[],96],[[],94],0,[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[[96,[54]],[2,[44]]],[[38,[8]]]],0,0,0,[[[97,[25]],[12,[26]],[12,[26]],[12,[58]],9]],[[98,9,8],9],[[98,9,8],9],[[50,9,8],9],[[[1,[68]],9,8],9],[[2,8,8]],[[[1,[[0,[60,65]]]],[99,[[52,[25]]]]],[[100,[[0,[60,65]]]]]],[[[1,[[0,[60,65]]]],3,[2,[5]]],[[100,[[0,[60,65]]]]]],[[[1,[[0,[60,65]]]],[99,[[52,[25]]]],101],[[100,[[0,[60,65]]]]]]],"c":[],"p":[[3,"Arc"],[15,"slice"],[3,"Bidegree"],[15,"bool"],[15,"u32"],[3,"BidegreeGenerator"],[3,"String"],[15,"usize"],[15,"i32"],[15,"isize"],[3,"Vec"],[4,"Option"],[3,"Product"],[3,"StemIterator"],[8,"ChainComplex"],[8,"Sized"],[3,"ValidPrime"],[3,"Path"],[4,"SaveKind"],[3,"SaveFile"],[3,"Adams"],[3,"Sseq"],[4,"Result"],[3,"TypeId"],[8,"Module"],[8,"ModuleHomomorphism"],[3,"FiniteChainComplex"],[3,"FiniteAugmentedChainComplex"],[8,"ZeroModule"],[8,"ZeroHomomorphism"],[3,"FullModuleHomomorphism"],[8,"FnMut"],[3,"Resolution"],[3,"MilnorSubalgebra"],[3,"Formatter"],[3,"Error"],[8,"Read"],[6,"Result"],[6,"PPartEntry"],[8,"Iterator"],[15,"str"],[3,"SubalgebraIterator"],[3,"SignatureIterator"],[15,"u8"],[3,"PathBuf"],[6,"Result"],[3,"IterBridge"],[3,"SenderData"],[3,"Sender"],[3,"MilnorAlgebra"],[6,"FreeModule"],[6,"FreeModuleHomomorphism"],[3,"Matrix"],[8,"Write"],[4,"FpVector"],[3,"AugmentedMatrix"],[3,"MuResolution"],[3,"Subspace"],[3,"SenderData"],[8,"FreeChainComplex"],[3,"MuResolutionHomomorphism"],[4,"SliceMut"],[8,"Sync"],[3,"BidegreeRange"],[8,"AugmentedChainComplex"],[3,"Range"],[3,"MuFreeModuleHomomorphism"],[8,"Algebra"],[3,"ChecksumWriter"],[3,"ChecksumReader"],[6,"Result"],[3,"Box"],[3,"HashSet"],[3,"Mutex"],[8,"PairAlgebra"],[3,"SecondaryComposite"],[4,"Slice"],[8,"Send"],[3,"SecondaryHomotopy"],[6,"CompositeData"],[3,"SecondaryResolution"],[3,"OnceBiVec"],[3,"DashMap"],[3,"Config"],[8,"TryInto"],[6,"QueryModuleResolution"],[3,"FiniteDimensionalModule"],[6,"CCC"],[4,"Value"],[4,"AlgebraType"],[6,"UnstableResolution"],[6,"SteenrodModule"],[15,"char"],[3,"Timer"],[3,"Arguments"],[3,"LogWriter"],[3,"QuotientModule"],[3,"AdemAlgebra"],[3,"ChainMap"],[6,"Yoneda"],[8,"Fn"],[4,"ChainComplexGrading"],[8,"BoundedChainComplex"],[4,"Magic"],[8,"SecondaryLift"]]},\ +"ext":{"doc":"ext-rs is a collection of libraries for doing homological …","t":"GAMMAAAAAAAMQIIIECDQNDDINQQDQKLLLLLLLMMAKMMLKMLLLLLLKMLLLLLLALLLLKLLLLLLLLKMKKMLKLLMLLKMLLLLLLLLLLKMDDLLLLLLLMLLMLLLLLLLLMLLLLLLLLLLLLLLLLLLLMLLLLLMLLLLLLLLMNNSREDDDNDDLLMLLLLLLLLLLLLLMLLLLMMMLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLMLMLLLLLLLLLLLMLMLMLMLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLMLRDGDGLLMLLLLLMMMMMMLLLLLLLLLMMMLLLLLLLLLLLMMMMMMMMMLLMMMLMMMLMLLLMMMLMLMMMLLLLLLLLLMMMDGGLLLLLLLLLLLLLLLLLLLLMMMLMMMLLLMMMMMMMMMMMMLLLNNNDDNNNNNDENNNMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLMLLLLLFLFMLLMLLLLLLLLLLLLLLLLLLLMQGSDDIDQHQQLLLLKLLLLLLLLMKLLMMLLLKLLLMLLLLLLLLLLLLLLLLLMKLMMLLLLLKLMLLLMKLLLLLKLKLMKLMKLMMLLLLLLLLLLKLMDDGRDMLLMMLLFFFLLMLLLLLLLFLLFMAMMMMFFFFFMFMMLLLLLLLFMMDDLLLLMLLLLLLLLLLLLLLLLLMLLLLLLLMRGMMFFFFFFMFFF","n":["CCC","chain_complex","differentials","modules","nassau","resolution","resolution_homomorphism","save","secondary","utils","yoneda","zero_module","Algebra","AugmentedChainComplex","BoundedChainComplex","ChainComplex","ChainComplexGrading","ChainHomotopy","ChainMap","ChainMap","Cohomological","FiniteAugmentedChainComplex","FiniteChainComplex","FreeChainComplex","Homological","Homomorphism","Module","StemIterator","TargetComplex","algebra","apply_quasi_inverse","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cc","cc","chain_homotopy","chain_map","chain_maps","chain_maps","cocycle_string","compute_through_bidegree","current","deref","deref","deref","deref_mut","deref_mut","deref_mut","differential","differentials","drop","drop","drop","euler_characteristic","filtration_one_product","filtration_one_products","finite_chain_complex","from","from","from","graded_dimension_string","has_computed_bidegree","init","init","init","into","into","into","into_iter","iter_stem","max_s","max_s","min_degree","module","modules","next","next_homological_degree","number_of_gens_in_bidegree","prime","s_shift","save_dir","save_file","target","target_cc","to_sseq","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","zero_module","zero_module","FiniteAugmentedChainComplex","FiniteChainComplex","algebra","algebra","augment","borrow","borrow","borrow_mut","borrow_mut","cc","ccdz","chain_map","chain_maps","compute_through_bidegree","compute_through_bidegree","deref","deref","deref_mut","deref_mut","differential","differential","differentials","drop","drop","from","from","from","has_computed_bidegree","has_computed_bidegree","init","init","into","into","map","map","max_s","max_s","min_degree","min_degree","module","module","modules","new","next_homological_degree","next_homological_degree","pop","target","target_cc","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","zero_module","zero_module","End","Fix","INFINITY","MAX_NEW_GENS","Magic","MilnorSubalgebra","Resolution","SenderData","Signature","SignatureIterator","SubalgebraIterator","algebra","apply_quasi_inverse","b","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_map","chain_maps","clone","clone_into","compute_through_bidegree","compute_through_stem","current","current","degree","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","differential","differentials","drop","drop","drop","drop","drop","drop","extend_through_degree","fmt","from","from","from","from","from","from","from_bytes","has_computed_bidegree","has_signature","init","init","init","init","init","init","into","into","into","into","into","into","into_iter","into_iter","iter_signatures","lock","max_degree","min_degree","module","modules","name","name","new","new","new","new","new_with_save","next","next","next_homological_degree","optimal_for","par_bridge","prime","profile","save_dir","save_dir","send","sender","set_name","signature_degree","signature_from_bytes","signature_mask","signature_matrix","signature_to_bytes","step0","step1","step_resolution","step_resolution_with_result","step_resolution_with_subalgebra","subalgebra","target","target","to_bytes","to_owned","to_string","top_degree","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","write_differential","write_qi","zero_algebra","zero_module","zero_module","zero_signature","MAX_NEW_GENS","MuResolution","Resolution","SenderData","UnstableResolution","algebra","apply_quasi_inverse","b","borrow","borrow","borrow_mut","borrow_mut","chain_map","chain_maps","chain_maps","chain_maps","complex","complex","complex","compute_through_bidegree","compute_through_bidegree_with_callback","compute_through_stem","compute_through_stem_with_callback","deref","deref","deref_mut","deref_mut","differential","differentials","differentials","differentials","drop","drop","extend_through_degree","from","from","get_kernel","has_computed_bidegree","init","init","into","into","kernels","kernels","kernels","load_quasi_inverse","load_quasi_inverse","load_quasi_inverse","lock","lock","lock","min_degree","module","modules","modules","modules","name","name","name","name","new","new","new_with_save","next_homological_degree","save_dir","save_dir","save_dir","save_dir","send","sender","set_name","should_save","should_save","should_save","step_resolution","target","try_from","try_from","try_into","try_into","type_id","type_id","zero_module","zero_module","zero_module","zero_module","MuResolutionHomomorphism","ResolutionHomomorphism","UnstableResolutionHomomorphism","act","algebra","borrow","borrow_mut","deref","deref_mut","drop","extend","extend_all","extend_profile","extend_step","extend_step_raw","extend_through_stem","from","from_class","from_module_homomorphism","get_map","get_map_ensure_length","init","into","maps","maps","maps","name","name","name","name","new","next_homological_degree","save_dir","save_dir","save_dir","save_dir","shift","shift","shift","source","source","source","target","target","target","try_from","try_into","type_id","AugmentationQi","ChainHomotopy","ChainMap","ChecksumReader","ChecksumWriter","Differential","Kernel","NassauDifferential","NassauQi","ResQi","SaveFile","SaveKind","SecondaryComposite","SecondaryHomotopy","SecondaryIntermediate","adler","adler","algebra","b","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","create_dir","create_file","delete_file","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","eq","equivalent","equivalent","equivalent","exists","flush","fmt","from","from","from","from","get_save_path","idx","init","init","init","init","into","into","into","into","kind","magic","name","nassau_data","new","new","open_file","open_file","open_files","path","read","read_exact","reader","resolution_data","secondary_data","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","validate_header","write","write_all","write_header","writer","Algebra","CompositeData","HIT_GENERATOR","SecondaryComposite","SecondaryHomotopy","SecondaryLift","SecondaryResolution","Source","TAU_BIDEGREE","Target","Underlying","act","act","add_composite","add_composite","algebra","algebra","algebra","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","buf","composite","composite","composite","composite","composites","compute_composites","compute_homotopies","compute_homotopy_step","compute_intermediate","compute_intermediate","compute_intermediates","compute_partial","degree","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","e3_page","extend_all","finalize","from","from","from","from_bytes","get_intermediate","hit_generator","homotopies","homotopies","homotopies","homotopies","homotopy","init","init","init","initialize_homotopies","intermediates","intermediates","intermediates","into","into","into","len","max","max","new","new","new","prime","save_dir","save_dir","shift","shift","shift_t","source","source","source","target","target","target","target","to_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","underlying","underlying","underlying","Config","LogWriter","QueryModuleResolution","STATIC_MODULES_PATH","Timer","algebra","borrow","borrow_mut","bytes","chain_maps","clone","clone_into","construct","construct_nassau","construct_standard","deref","deref_mut","differentials","drop","eq","equivalent","equivalent","equivalent","fmt","from","get_unit","init","into","load_module_json","lock","logging","max_degree","module","modules","name","parse_module_name","query_module","query_module_only","query_unstable_module","query_unstable_module_only","save_dir","secondary_job","target","timer","to_owned","try_from","try_from","try_from","try_from","try_into","type_id","unicode_num","writer","zero_module","LogWriter","Timer","borrow","borrow","borrow_mut","borrow_mut","bytes","deref","deref","deref_mut","deref_mut","drop","drop","end","finalize","flush","from","from","init","init","into","into","new","start","timer","try_from","try_from","try_into","try_into","type_id","type_id","write","writer","PENALTY_UNIT","Yoneda","cc","chain_maps","compute_kernel_image","operation_drop","rate_adem_operation","rate_milnor_operation","rate_operation","split_mut_borrow","target_cc","yoneda_representative","yoneda_representative_element","yoneda_representative_with_strategy"],"q":[[0,"ext"],[12,"ext::chain_complex"],[100,"ext::chain_complex::finite_chain_complex"],[157,"ext::nassau"],[303,"ext::resolution"],[389,"ext::resolution_homomorphism"],[437,"ext::save"],[537,"ext::secondary"],[640,"ext::utils"],[694,"ext::utils::logging"],[727,"ext::yoneda"],[741,"alloc::sync"],[742,"sseq::coordinates::bidegree"],[743,"sseq::coordinates::generator"],[744,"alloc::string"],[745,"alloc::vec"],[746,"core::option"],[747,"sseq::sseq"],[748,"core::marker"],[749,"fp::prime"],[750,"std::path"],[751,"sseq::sseq"],[752,"core::any"],[753,"algebra::module::module_trait"],[754,"algebra::module::homomorphism"],[755,"algebra::module::zero_module"],[756,"algebra::module::homomorphism"],[757,"core::ops::function"],[758,"core::fmt"],[759,"core::fmt"],[760,"std::io"],[761,"algebra::algebra::milnor_algebra"],[762,"core::iter::traits::iterator"],[763,"std::path"],[764,"rayon::iter::par_bridge"],[765,"std::sync::mpsc"],[766,"algebra::algebra::milnor_algebra"],[767,"algebra::module::homomorphism::free_module_homomorphism"],[768,"fp::matrix::matrix_inner"],[769,"std::io"],[770,"fp::matrix::matrix_inner"],[771,"fp::vector::vector_generic"],[772,"core::marker"],[773,"algebra::module::homomorphism::free_module_homomorphism"],[774,"core::fmt"],[775,"std::collections::hash::set"],[776,"std::sync::mutex"],[777,"fp::vector::vector_generic"],[778,"core::marker"],[779,"dashmap"],[780,"core::convert"],[781,"algebra::module::finite_dimensional_module"],[782,"serde_json::value"],[783,"algebra::algebra::steenrod_algebra"],[784,"algebra::module::steenrod_module"],[785,"core::fmt"],[786,"algebra::algebra::adem_algebra"],[787,"core::ops::function"]],"d":["","","","","This module implements Nassau’s algorithm. The main …","This module exports the Resolution object, which is a …","This module defines MuResolutionHomomorphism, which is a …","","","A module containing various utility functions related to …","","","","An augmented chain complex is a map of chain complexes C …","A bounded chain complex is a chain complex C for which C_s …","A chain complex is defined to start in degree 0. The …","","","chain_maps is required to be non-empty","","","","","","","","","An iterator returned by ChainComplex::iter_stem","","","Apply the quasi-inverse of the (s, t)th differential to …","","","","","","","","","","","","","","Ensure all bidegrees less than or equal to (s, t) have …","","","","","","","","This returns the differential starting from the sth module.","","","","","","Computes the filtration one product.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","If the complex has been computed at bidegree (s, t). This …","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Iterate through all defined bidegrees in increasing order …","","","","","","","The first s such that self.module(s) is not defined.","","","","A directory used to save information about the chain …","Get the save file of a bidegree","","","","","","","","","","","","","","","","","","","","","","","","","","This currently crashes if s is greater than the s degree …","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","This should be used when you want an entry of the profile …","","Some magic constants used in the save file","A Milnor subalgebra to be used in Nassau’s algorithm. …","A resolution of S_2 using Nassau’s algorithm. This aims …","See resolution::SenderData. This differs by not having the …","","See MilnorSubalgebra::iter_signatures.","An iterator that iterates through a sequence of …","","","","","","","","","","","","","","","","","","","","","This function resolves up till a fixed stem instead of a …","","","","","","","","","","","","","","","","","","","","","","","","This function prepares the Resolution object to perform …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Computes the signature of an element","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Iterate through all signatures of this algebra that …","","","","","","","","","","","","","","","","","","","","","","","","","","","Give a list of basis elements in degree degree that has …","Get the matrix of a free module homomorphism when …","","Step resolution for s = 0","Step resolution for s = 1","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The algebra with trivial profile, corresponding to the …","","","","This is the maximum number of new generators we expect in …","A minimal resolution of a chain complex. The functions …","","In MuResolution::compute_through_stem and …","","","","","","","","","","","","","","","","","","This function resolves up till a fixed stem instead of a …","","","","","","","","","","","","This function prepares the Resolution object to perform …","Returns the argument unchanged.","Returns the argument unchanged.","Gets the kernel of the differential starting at $(s, t)$. …","","","","Calls U::from(self).","Calls U::from(self).","For each internal degree, store the kernel of the most …","For each internal degree, store the kernel of the most …","For each internal degree, store the kernel of the most …","Whether we should keep the quasi-inverses of the …","Whether we should keep the quasi-inverses of the …","Whether we should keep the quasi-inverses of the …","","","","","","","","","","","","","","Whether this bidegree was newly calculated or have already …","","","","","","","","The sender object used to send the SenderData. We put this …","","Whether we should save newly computed data to the disk. …","Whether we should save newly computed data to the disk. …","Whether we should save newly computed data to the disk. …","Call our resolution $X$, and the chain complex to resolve …","","","","","","","","","","","","A chain complex homomorphims from a FreeChainComplex. This …","","","Given a chain map $f: C \\\\to C’$ between free chain …","","","","","","","Extend the resolution homomorphism such that it is defined …","Extend the resolution homomorphism as far as possible, as …","Extends the resolution homomorphism up to a given range. …","Extend the MuResolutionHomomorphism to be defined on …","Extend the MuResolutionHomomorphism to be defined on …","Extend the resolution homomorphism such that it is defined …","Returns the argument unchanged.","","Construct a chain map that lifts a given module …","Returns the chain map on the sth source module.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","The quasi-inverse of the augmentation map","A chain homotopy","A chain map","","In addition to checking the checksum, we also keep track …","The differential and augmentation map in a resolution","The kernel of a resolution differential","The differential with Nassau’s algorithm. This does not …","The quasi-inverse data in Nassau’s algorithm","The quasi-inverse of the resolution differential","","","Secondary composite","A secondary homotopy","Intermediate data used by secondary code","","","","","","","","","","","","","","","","Arguments","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","This panics if there is no save dir","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","Open the file pointed to by path as a Box<dyn Read>. If …","","A DashSet> of files that are currently opened and being …","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether the composite can hit generators. This is true for …","A homotopy of a map A -> M of pair modules. We assume this …","","When lifting a thing to its secondary version, often what …","","","","","","","Compute the image of an element in the source under the …","","Add composites up to and including the specified degree","","","","","","","","","","","","","","The component of the map on the R_B portion. gen_deg -> …","gen_deg -> gen_idx -> composite","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","gen_deg -> gen_idx -> homotopy","s -> t -> idx -> homotopy","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","output_t = input_t - shift_t","","","","","","","","","","","","","","","","","","","","","A config object is an object that specifies how a Steenrod …","","The type returned by query_module. The value of this type …","","If the logging feature is enabled, this can be used to …","The basis for the Steenrod algebra","","","","","","","This constructs a resolution resolving a module according …","See construct","See construct","","","","","","","","","","Returns the argument unchanged.","Given a resolution, return a resolution of the unit, …","","Calls U::from(self).","Given the name of a module file (without the .json …","","","","The json specification of the module","","","Given a module specification string, load a json …","Query the user for a module and a bidegree, and return a …","Query the user for a module and its save directory. See …","","","","The value of the SECONDARY_JOB environment variable. This …","","","","","","","","","","Given an n: usize, return a UTF-8 character that best …","","","","If the logging feature is enabled, this can be used to …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","This function does the following computation:","","","","","","","This function produces a quasi-isomorphic quotient of cc …","",""],"i":[0,0,89,89,0,0,0,0,0,0,0,89,16,0,0,0,0,0,0,67,103,0,0,0,103,16,16,0,67,16,16,103,15,100,103,15,100,29,15,0,67,29,100,63,16,15,103,15,100,103,15,100,16,26,103,15,100,104,63,63,0,103,15,100,63,16,103,15,100,103,15,100,15,16,104,15,16,16,26,15,16,63,16,100,16,16,67,29,63,103,15,100,103,15,100,103,15,100,16,26,0,0,26,29,26,26,29,26,29,29,26,29,29,26,29,26,29,26,29,26,29,26,26,29,26,26,29,26,29,26,29,26,29,26,29,26,29,26,29,26,29,26,26,26,29,26,29,29,26,29,26,29,26,29,26,29,26,105,105,35,0,0,0,0,0,105,0,0,34,34,49,49,43,44,105,34,35,49,43,44,105,34,35,34,34,35,35,34,34,43,44,44,49,43,44,105,34,35,49,43,44,105,34,35,34,34,49,43,44,105,34,35,34,35,49,43,44,105,34,35,35,34,35,49,43,44,105,34,35,49,43,44,105,34,35,43,44,35,34,34,34,34,34,34,34,43,44,34,35,34,43,44,34,35,43,34,35,34,34,49,49,34,44,35,35,35,35,34,34,34,34,34,44,34,34,35,35,35,35,49,43,44,105,34,35,49,43,44,105,34,35,49,43,44,105,34,35,34,34,35,34,34,35,0,0,0,0,0,58,58,60,60,58,60,58,58,106,92,58,106,92,58,58,58,58,58,60,58,60,58,58,106,92,58,60,58,58,60,58,58,58,60,58,60,58,106,92,58,106,92,58,106,92,58,58,58,106,92,58,58,106,92,58,58,60,58,58,58,106,92,58,60,60,58,106,92,58,58,58,60,58,60,58,60,58,58,106,92,58,0,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,107,108,61,61,107,108,61,61,61,61,107,108,61,107,108,61,107,108,61,107,108,61,61,61,61,20,20,20,0,0,20,20,20,20,20,0,0,20,20,20,70,71,21,21,70,71,21,20,70,71,21,20,20,20,20,21,21,70,71,21,20,70,71,21,20,70,70,71,71,21,20,20,20,20,20,21,70,20,70,71,21,20,21,21,70,71,21,20,70,71,21,20,21,20,20,20,70,71,0,21,0,70,71,71,71,20,20,20,70,71,21,20,70,71,21,20,70,71,21,20,21,70,70,21,70,109,0,109,0,0,0,0,109,0,109,109,76,79,76,79,109,76,82,76,79,82,76,79,82,81,109,79,82,76,79,109,109,109,109,82,109,109,76,76,79,82,76,79,82,76,79,82,82,109,76,76,79,82,76,109,79,109,82,79,82,82,76,79,82,109,109,82,82,76,79,82,81,109,82,76,79,82,109,109,82,109,82,79,109,82,79,109,82,76,79,76,76,79,82,76,79,82,76,79,82,109,82,82,0,0,0,0,0,85,85,85,97,86,85,85,0,0,0,85,85,86,85,85,85,85,85,85,85,0,85,85,0,86,0,86,85,86,86,0,0,0,0,0,86,0,86,97,85,85,85,85,85,85,85,0,97,86,0,0,95,97,95,97,97,95,97,95,97,95,97,95,97,97,95,97,95,97,95,97,97,95,97,95,97,95,97,95,97,97,97,0,0,101,101,0,0,0,0,0,0,101,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,1,[]],[[-1,[2,[-2]],3,[2,[-3]]],4,[],[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,[[-1,5],1,[]],0,0,[[-1,6,4],7,[]],[[-1,3],8,[]],0,[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[[-1,5],1,[]],0,[9,8],[9,8],[9,8],[[-1,10],11,[]],[[-1,10,9,3],[[13,[[12,[[12,[5]]]]]]],[]],[[-1,10,9],14,[]],0,[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,7,[]],[[-1,3],4,[]],[[],9],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[15,[-1]]],[]],[-1,5,[]],0,[-1,10,[]],[[-1,5],1,[]],0,[[[15,[-1]]],13,[16,17]],[-1,5,[]],[[-1,3],9,[]],[-1,18,[]],0,[-1,[[13,[19]]],[]],[[-1,20,3],21,[]],[-1,1,[]],0,[-1,[[23,[22]]],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,1,[]],0,0,0,[[[26,[-1,-2]]],1,27,28],[[[29,[-1,-2,-3,-4]]],1,27,28,28,16],[[[26,[-1,-2]],[1,[-3]],[12,[[1,[-4]]]]],[[29,[-1,-2,-4,-3]]],27,28,16,28],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[[[1,[-1]]],[[26,[-1,-2]]],[27,30],[28,[31,[-1,-1]]]],[[[29,[-1,-2,-3,-4]],5],1,27,28,28,16],0,[[[26,[-1,-2]],3],8,27,28],[[[29,[-1,-2,-3,-4]],3],8,27,28,28,16],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[[[26,[-1,-2]],5],1,27,28],[[[29,[-1,-2,-3,-4]],5],1,27,28,28,16],0,[9,8],[9,8],[-1,-1,[]],[[[29,[-1,-2,-3,-4]]],[[26,[-1,-2]]],27,28,28,16],[-1,-1,[]],[[[26,[-1,-2]],3],4,27,28],[[[29,[-1,-2,-3,-4]],3],4,27,28,28,16],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],[[[26,[-1,[32,[-1]]]],-2],[[26,[-3,[32,[-3]]]]],27,33,27],[[[29,[-1,[32,[-1]],[32,[-1]],-2]],-3],[[29,[-4,[32,[-4]],[32,[-4]],-2]]],27,16,33,27],[[[26,[-1,-2]]],5,27,28],[[[29,[-1,-2,-3,-4]]],5,27,28,28,16],[[[26,[-1,-2]]],10,27,28],[[[29,[-1,-2,-3,-4]]],10,27,28,28,16],[[[26,[-1,-2]],5],1,27,28],[[[29,[-1,-2,-3,-4]],5],1,27,28,28,16],0,[[[12,[[1,[-1]]]],[12,[[1,[-2]]]]],[[26,[-1,-2]]],[27,30],[28,[31,[-1,-1]]]],[[[26,[-1,-2]]],5,27,28],[[[29,[-1,-2,-3,-4]]],5,27,28,28,16],[[[26,[-1,-2]]],8,27,[28,[31,[-1,-1]]]],[[[29,[-1,-2,-3,-4]]],1,27,28,28,16],0,[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[[[26,[-1,-2]]],1,27,28],[[[29,[-1,-2,-3,-4]]],1,27,28,28,16],0,0,0,0,0,0,0,0,0,0,0,0,[[[34,[-1]]],1,30],[[[34,[-1]],[2,[-2]],3,[2,[-3]]],4,30,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[34,[-1]],5],1,30],0,[35,35],[[-1,-2],8,[],[]],[[[34,[-1]],3],8,30],[[[34,[-1]],3],8,30],0,0,0,[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[[[34,[-1]],5],1,30],0,[9,8],[9,8],[9,8],[9,8],[9,8],[9,8],[[[34,[-1]],5],8,30],[[35,36],[[24,[8,37]]]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,[[38,[35]]],39],[[[34,[-1]],3],4,30],[[35,[2,[40]],[2,[40]]],4],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[35,10],[[0,[41]]]],0,0,[[[34,[-1]]],10,30],[[[34,[-1]],5],1,30],0,[[[34,[-1]]],42,30],0,[[],43],[[35,10],44],[[[1,[-1]]],[[34,[-1]]],30],[[[12,[45]]],35],[[[1,[-1]],[13,[46]]],[[47,[[34,[-1]]]]],30],[43,13],[44,13],[[[34,[-1]]],5,30],[3,35],[-1,[[48,[-2]]],[],[]],[[[34,[-1]]],18,30],0,[[[34,[-1]]],[[13,[19]]],30],0,[[3,[50,[49]]],8],0,[[[34,[-1]],7],8,30],0,[[35,-1],[[38,[[12,[40]]]]],39],[[35,51,[52,[51]],10,[2,[40]]],[[0,[41]]]],[[35,[53,[[52,[51]]]],10,[2,[40]]],54],[[[2,[40]],-1],[[38,[8]]],55],[[[34,[-1]],10],8,30],[[[34,[-1]],10],[[47,[8]]],30],[[[34,[-1]],3],8,30],[[[34,[-1]],3],[[47,[8]]],30],[[[34,[-1]],3,35],[[47,[8]]],30],0,[[[34,[-1]]],1,30],0,[[35,-1],[[38,[8]]],55],[-1,-2,[],[]],[-1,7,[]],[35,10],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[[[34,[-1]],3,9,9],[[47,[8]]],30],[[[13,[-1]],3,35,56,[2,[40]],[2,[9]],54,57],[[38,[8]]],55],[[],35],[[[34,[-1]]],1,30],0,[35,[[12,[40]]]],0,0,0,0,0,[[[58,[-1]]],1,16],[[[58,[-1]],[2,[-2]],3,[2,[-3]]],4,16,[],[]],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[58,[-1]],5],1,16],0,0,0,0,0,0,[[[58,[-1]],3],8,16],[[[58,[-1]],3,-2],8,16,33],[[[58,[-1]],3],8,16],[[[58,[-1]],3,-2],8,16,33],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[[[58,[-1]],5],1,16],0,0,0,[9,8],[9,8],[[[58,[-1]],5],8,16],[-1,-1,[]],[-1,-1,[]],[[[58,[-1]],3],59,16],[[[58,[-1]],3],4,16],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,0,0,0,0,0,[[[58,[-1]]],10,16],[[[58,[-1]],5],1,16],0,0,0,[[[58,[-1]]],42,16],0,0,0,[[[1,[-1]]],[[58,[-1]]],16],0,[[[1,[-1]],[13,[46]]],[[47,[[58,[-1]]]]],16],[[[58,[-1]]],5,16],[[[58,[-1]]],[[13,[19]]],16],0,0,0,[[3,4,[50,[60]]],8],0,[[[58,[-1]],7],8,16],0,0,0,[[[58,[-1]],3],8,16],[[[58,[-1]]],1,16],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[[[58,[-1]]],1,16],0,0,0,0,0,0,[[[61,[-1,-2]],62,5,6],8,63,63],[[[61,[-1,-2]]],1,63,16],[-1,-2,[],[]],[-1,-2,[],[]],[9,-1,[]],[9,-1,[]],[9,8],[[[61,[-1,-2]],3],8,63,16],[[[61,[-1,-2]]],8,63,16],[[[61,[-1,-2]],[64,[-3]]],8,63,16,65],[[[61,[-1,-2]],3,[13,[54]]],[[66,[10]]],63,67],[[[61,[-1,-2]],3,[13,[[12,[56]]]]],[[66,[10]]],63,16],[[[61,[-1,-2]],3],8,63,16],[-1,-1,[]],[[7,[1,[-1]],[1,[-2]],3,[2,[5]]],[[61,[-1,-2]]],63,67],[[7,[1,[-1]],[1,[-2]],-3],[[61,[-1,-2]]],[67,63],67,28],[[[61,[-1,-2]],5],[[1,[68]]],63,16],[[[61,[-1,-2]],5],68,63,16],[[],9],[-1,-2,[],[]],0,0,0,[[[61,[-1,-2]]],42,63,16],0,0,0,[[7,[1,[-1]],[1,[-2]],3],[[61,[-1,-2]]],63,16],[[[61,[-1,-2]]],10,63,16],[[[61,[-1,-2]]],[[13,[19]]],63,16],0,0,0,0,0,0,0,0,0,0,0,0,[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[20,20],[[-1,-2],8,[],[]],[[20,19],[[47,[8]]]],[[[21,[-1]],46,4],[[0,[55]]],69],[[[21,[-1]],46],[[38,[8]]],69],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,8],[[[70,[-1]]],8,55],[9,8],[[[71,[-1]]],8,39],[9,8],[9,8],[[20,20],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[[21,[-1]],46],4,69],[[[70,[-1]]],[[38,[8]]],55],[[20,36],72],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[21,[-1]],46],46,69],0,[[],9],[[],9],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[20,5],[20,42],[[],[[0,[41]]]],[[46,-1],[[70,[-1]]],55],[-1,[[71,[-1]]],39],[46,[[13,[[73,[39]]]]]],[[[21,[-1]],46],[[13,[[73,[39]]]]],69],[[],[[75,[[74,[46]]]]]],0,[[[71,[-1]],[2,[45]]],[[38,[9]]],39],[[[71,[-1]],[2,[45]]],[[38,[8]]],39],0,[[],[[0,[41]]]],[[],[[0,[41]]]],[-1,-2,[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[[[21,[-1]],-2],[[38,[8]]],69,39],[[[70,[-1]],[2,[45]]],[[38,[9]]],55],[[[70,[-1]],[2,[45]]],[[38,[8]]],55],[[[21,[-1]],-2],[[38,[8]]],69,55],0,0,0,0,0,0,0,0,0,0,0,0,[[[76,[-1]],62,5,10,77],8,78],[[[79,[-1]],62,5,10,77,4],8,[78,80,65]],[[[76,[-1]],5,10,9,[53,[[52,[-1]]]],[53,[[52,[-1]]]]],8,78],[[[79,[-1]],5,10,[81,[-1]],[13,[19]]],8,[78,80,65]],[-1,1,[]],[[[76,[-1]]],[[1,[-1]]],78],[[[82,[-1]]],1,63],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[[-1,5],81,[]],[[[79,[-1]],10,9],[[76,[-1]]],[78,80,65]],[[[82,[-1]],5],81,63],0,0,[-1,8,[]],[-1,8,[]],[[-1,3],[[66,[10]]],[]],[[-1,6],56,[]],[[[82,[-1]],6],56,63],[-1,8,[]],[[-1,5],8,[]],0,[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,8],[9,8],[9,8],[[[82,[-1]]],[[23,[22]]],63],[-1,8,[]],[[[76,[-1]]],8,78],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[1,[[52,[-1]]]],10,4,-2],[[38,[[76,[-1]]]]],78,39],[[-1,6],56,[]],0,[-1,[[83,[79]]],[]],[[[82,[-1]]],[[83,[79]]],63],0,0,[[[82,[-1]],5],79,63],[[],9],[[],9],[[],9],[-1,8,[]],[-1,[[84,[6,56]]],[]],[[[82,[-1]]],[[84,[6,56]]],63],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[-1,[[64,[-1]]],[]],[[[82,[-1]]],[[64,[[82,[-1]]]]],63],[[[1,[[52,[-1]]]],10,4],[[76,[-1]]],78],[[[1,[[52,[-1]]]],[1,[[52,[-1]]]],10,4],[[79,[-1]]],[78,80,65]],[[[1,[-1]]],[[82,[-1]]],63],[-1,18,[]],[-1,[[13,[19]]],[]],[[[82,[-1]]],[[13,[19]]],63],[-1,3,[]],[[[82,[-1]]],3,63],0,[-1,1,[]],[[[82,[-1]]],1,63],0,[-1,1,[]],[[[82,[-1]]],1,63],0,0,[[[76,[-1]],-2],[[38,[8]]],78,55],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[-1,25,[]],[-1,1,[]],[[[82,[-1]]],[[1,[-1]]],63],0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],0,0,[85,85],[[-1,-2],8,[],[]],[[-1,[13,[46]]],[[47,[86]]],[[87,[85]]]],[[-1,[13,[46]]],[[47,[[34,[[88,[51]]]]]]],[[87,[85]]]],[[-1,[13,[46]]],[[47,[[58,[89]]]]],[[87,[85]]]],[9,-1,[]],[9,-1,[]],0,[9,8],[[85,85],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[85,36],72],[-1,-1,[]],[[[1,[86]]],[[47,[[8,[4,[1,[86]]]]]]]],[[],9],[-1,-2,[],[]],[42,[[47,[90]]]],0,0,0,0,0,0,[42,[[47,[90]]]],[[[13,[91]],4],[[47,[86]]]],[[42,[13,[91]],4],[[47,[86]]]],[4,[[47,[[92,[89]]]]]],[[],[[47,[93]]]],0,[[],[[13,[5]]]],0,0,[-1,-2,[],[]],[-1,[[24,[-2]]],[],[]],[[[8,[90,-1]]],[[24,[85]]],[[87,[91]]]],[42,[[24,[85]]]],[[[8,[42,-1]]],[[24,[85]]],[[87,[91]]]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[9,94],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,-1,[]],[9,8],[9,8],[[95,96],8],[[[97,[-1]],96],8,55],[[[97,[-1]]],[[38,[8]]],55],[-1,-1,[]],[-1,-1,[]],[[],9],[[],9],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[97,[-1]]],[]],[[],95],0,[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,[[24,[-2]]],[],[]],[-1,25,[]],[-1,25,[]],[[[97,[-1]],[2,[45]]],[[38,[9]]],55],0,0,0,0,0,[[[98,[-1]],[13,[-2]],[13,[-3]],[13,[59]],10],[[8,[54,54]]],27,28,28],[[99,10,9],10],[[99,10,9],10],[[51,10,9],10],[[[1,[-1]],10,9],10,69],[[[2,[-1]],9,9],[[8,[-1,-1]]],[]],0,[[[1,[-1]],[100,[[53,[-2]]]]],[[101,[-1]]],[63,67],27],[[[1,[-1]],3,[2,[5]]],[[101,[-1]]],[63,67]],[[[1,[-1]],[100,[[53,[-2]]]],-3],[[101,[-1]]],[63,67],27,102]],"c":[],"p":[[3,"Arc",741],[15,"slice"],[3,"Bidegree",742],[15,"bool"],[15,"u32"],[3,"BidegreeGenerator",743],[3,"String",744],[15,"tuple"],[15,"usize"],[15,"i32"],[15,"isize"],[3,"Vec",745],[4,"Option",746],[3,"Product",747],[3,"StemIterator",12],[8,"ChainComplex",12],[8,"Sized",748],[3,"ValidPrime",749],[3,"Path",750],[4,"SaveKind",437],[3,"SaveFile",437],[3,"Adams",747],[3,"Sseq",747],[4,"Result",751],[3,"TypeId",752],[3,"FiniteChainComplex",100],[8,"Module",753],[8,"ModuleHomomorphism",754],[3,"FiniteAugmentedChainComplex",100],[8,"ZeroModule",755],[8,"ZeroHomomorphism",754],[3,"FullModuleHomomorphism",756],[8,"FnMut",757],[3,"Resolution",157],[3,"MilnorSubalgebra",157],[3,"Formatter",758],[3,"Error",758],[6,"Result",759],[8,"Read",760],[6,"PPartEntry",761],[8,"Iterator",762],[15,"str"],[3,"SubalgebraIterator",157],[3,"SignatureIterator",157],[15,"u8"],[3,"PathBuf",750],[6,"Result",763],[3,"IterBridge",764],[3,"SenderData",157],[3,"Sender",765],[3,"MilnorAlgebra",761],[6,"FreeModule",766],[6,"FreeModuleHomomorphism",767],[3,"Matrix",768],[8,"Write",760],[4,"FpVector",769],[3,"AugmentedMatrix",768],[3,"MuResolution",303],[3,"Subspace",770],[3,"SenderData",303],[3,"MuResolutionHomomorphism",389],[4,"SliceMut",769],[8,"FreeChainComplex",12],[3,"BidegreeRange",771],[8,"Sync",748],[3,"Range",772],[8,"AugmentedChainComplex",12],[3,"MuFreeModuleHomomorphism",767],[8,"Algebra",773],[3,"ChecksumWriter",437],[3,"ChecksumReader",437],[6,"Result",758],[3,"Box",774],[3,"HashSet",775],[3,"Mutex",776],[3,"SecondaryComposite",537],[4,"Slice",769],[8,"PairAlgebra",777],[3,"SecondaryHomotopy",537],[8,"Send",748],[6,"CompositeData",537],[3,"SecondaryResolution",537],[3,"OnceBiVec",778],[3,"DashMap",779],[3,"Config",640],[6,"QueryModuleResolution",640],[8,"TryInto",780],[3,"FiniteDimensionalModule",781],[6,"CCC",0],[4,"Value",782],[4,"AlgebraType",783],[6,"UnstableResolution",303],[6,"SteenrodModule",784],[15,"char"],[3,"Timer",694],[3,"Arguments",758],[3,"LogWriter",694],[3,"QuotientModule",785],[3,"AdemAlgebra",786],[3,"ChainMap",12],[6,"Yoneda",727],[8,"Fn",757],[4,"ChainComplexGrading",12],[8,"BoundedChainComplex",12],[4,"Magic",157],[6,"Resolution",303],[6,"ResolutionHomomorphism",389],[6,"UnstableResolutionHomomorphism",389],[8,"SecondaryLift",537]]},\ "ext_m_n":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "filtration_one":{"doc":"This computes all available filtration one products for a …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"fp":{"doc":"","t":"RRRRROAAAAAARRHRRRGRRRRRRODFMFFFLLLLLLLFFLLLFMFFFFFFLFLLLFDDDDDDMMMMMMMMAMAMMMAMMAAMMDLLLLMMLLLLLLLLLLLMLLLLMLLLDDDLLLLLLLLLLLLLLLLLMMLLMLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLMLLLMLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLMMLDLLLLLLLLLLLLLMLLLLLLMLLLLLLLLLDLLLLLLLLLLLMLLLLLMLLLLLLLMLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLIDDDRDLKKKKKLLLLLLLLLLLLLLLLLLLLFLLLLLLFMLLLLLLLLLOLLLLFLLLLLLFFFFFLKKLLLLLLMLLFMLLLLLLLLLLLLLLLLLLLMRFAGFFFAAAAAADDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLDDMMLLLLMMMMLLLLMLLMMLLMLLLLLLLMMMMLLLLLLLLLLLLEEEENNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["MAX_MULTINOMIAL_LEN","NUM_PRIMES","ODD_PRIMES","PRIMES","PRIME_TO_INDEX_MAP","const_for","constants","limb","matrix","prime","simd","vector","BINOMIAL4_TABLE","BINOMIAL4_TABLE_SIZE","BINOMIAL_TABLE","BITS_PER_LIMB","BYTES_PER_LIMB","INVERSE_TABLE","Limb","MAX_MULTINOMIAL_LEN","MAX_PRIME","NOT_A_PRIME","NUM_PRIMES","PRIMES","PRIME_TO_INDEX_MAP","populate_binomial_table","LimbBitIndexPair","add","bit_index","bit_length","bit_length_const","bitmask","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","entries_per_limb","entries_per_limb_const","from","init","into","is_reduced","limb","limb_bit_index_pair","number","pack","range","reduce","sign_rule","to_owned","truncate","try_from","try_into","type_id","unpack","AugmentedMatrix","Matrix","MatrixSliceMut","QuasiInverse","Subquotient","Subspace","col_end","col_start","columns","dimension","end","gens","image","inner","m4ri","matrix","matrix_inner","p","pivots","preimage","quasi_inverse","quotient","start","subquotient","subspace","vectors","vectors","M4riTable","add","borrow","borrow_mut","clear","columns","data","default","deref","deref_mut","drop","fmt","from","generate","init","into","is_empty","len","min_limb","new","reduce","reduce_naive","rows","rows","try_from","try_into","type_id","AugmentedMatrix","Matrix","MatrixSliceMut","add_assign","add_identity","add_masked","apply","as_slice_mut","assign","augmented_from_vec","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","col_end","col_start","columns","columns","columns","compute_image","compute_image","compute_kernel","compute_kernel","compute_quasi_inverse","compute_quasi_inverse","compute_quasi_inverses","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop_first","end","eq","equivalent","extend_column_dimension","extend_column_dimension","extend_image","extend_to_surjection","find_first_row_in_block","find_pivots_permutation","fmt","fmt","from","from","from","from_bytes","from_vec","identity","index","index_mut","init","init","init","initialize_pivots","inner","into","into","into","into_iter","into_iter","into_matrix","into_tail_segment","is_zero","iter","iter","iter_mut","iter_mut","mul","mul_assign","new","new","new_with_capacity","new_with_capacity","p","par_iter_mut","par_iter_mut","pivots","pivots","pivots_mut","prime","read_pivot","row","row","row_mut","row_mut","row_op","row_op_naive","row_reduce","row_segment","row_segment_mut","row_slice","rows","rows","safe_row_op","segment","set_to_zero","slice_mut","split_borrow","start","to_bytes","to_owned","to_owned","to_string","to_vec","trim","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vectors","vectors","write_pivot","QuasiInverse","apply","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","equivalent","fmt","from","from_bytes","image","image_dimension","init","into","new","pivots","preimage","preimage","prime","source_dimension","stream_quasi_inverse","target_dimension","to_bytes","to_owned","try_from","try_into","type_id","Subquotient","add_gen","ambient_dimension","borrow","borrow_mut","clear_gens","clone","clone_into","complement_pivots","deref","deref_mut","dimension","dimension","drop","fmt","from","from_parts","gens","gens","init","into","is_empty","new","new_full","prime","quotient","quotient","quotient_dimension","quotient_pivots","reduce","reduce_by_quotient","reduce_matrix","set_to_full","subspace_dimension","subspace_gens","to_owned","to_string","try_from","try_into","type_id","zeros","Subspace","add_basis_elements","add_vector","add_vectors","ambient_dimension","basis","borrow","borrow_mut","clone","clone_into","contains","deref","deref_mut","dimension","drop","empty_space","entire_space","eq","equivalent","fmt","fmt","from","from_bytes","init","into","is_empty","iter","matrix","new","pivots","prime","reduce","set_to_entire","set_to_zero","to_bytes","to_owned","to_string","try_from","try_into","type_id","Binomial","BinomialIterator","BitflagIterator","InvalidPrimeError","TWO","ValidPrime","binomial","binomial2","binomial4","binomial4_rec","binomial_odd","binomial_odd_is_zero","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","direct_binomial","drop","drop","drop","drop","eq","equivalent","factor_pk","flag","fmt","fmt","fmt","fmt","from","from","from","from","from_str","impl_binomial","init","init","init","init","integer_power","into","into","into","into","into_iter","into_iter","inverse","is_valid_prime","log2","logp","minus_one_to_the_n","multinomial","multinomial2","multinomial_odd","new","new","new","new_fixed_length","next","next","p","par_bridge","par_bridge","power_mod","remaining","serialize","set_bit_iterator","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","value","value","LIMBS_PER_SIMD","add_simd","x86_64","SimdLimb","load","store","xor","impl_fpvectorp","impl_slicemutp","impl_slicep","inner","iter","vector_generic","FpVectorP","SliceMutP","SliceP","add","add","add_basis_element","add_basis_element","add_carry","add_carry_limb","add_masked","add_nosimd","add_offset","add_offset_nosimd","add_shift_left","add_shift_none","add_shift_right","add_tensor","add_truncate","add_unmasked","as_slice","as_slice","as_slice_mut","assign","assign","assign_partial","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","copy","copy_from_slice","density","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","end","end","entry","entry","eq","equivalent","extend_len","first_nonzero","fmt","fmt","fmt","from","from","from","from","from","from","from_raw_parts","hash","init","init","init","into","into","into","is_empty","is_empty","is_zero","is_zero","iter","iter","iter_nonzero","iter_nonzero","len","len","len","limb_masks","limb_range","limb_range_inner","limbs","limbs","limbs","limbs","limbs_mut","max_limb_mask","min_limb_mask","new_","new_with_capacity_","offset","prime","prime","prime","reduce_limbs","scale","scale","set_entry","set_entry","set_scratch_vector_size","set_to_zero","set_to_zero","sign_rule","slice","slice","slice_mut","slice_mut","start","start","to_owned","to_owned","to_owned","trim_start","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","FpVectorIterator","FpVectorNonZeroIteratorP","bit_length","bit_mask","borrow","borrow","borrow_mut","borrow_mut","counter","cur_limb","cur_limb","cur_limb_entries_left","deref","deref","deref_mut","deref_mut","dim","drop","drop","entries_left","entries_per_limb_m_1","from","from","idx","init","init","into","into","into_iter","into_iter","len","limb_index","limb_index","limbs","limbs","multiunzip","new","new","next","next","skip_n","try_from","try_from","try_into","try_into","type_id","type_id","FpVector","FpVectorNonZeroIterator","Slice","SliceMut","_2","_2","_2","_2","_3","_3","_3","_3","_5","_5","_5","_5","_7","_7","_7","_7","add","add","add_assign","add_basis_element","add_basis_element","add_carry","add_masked","add_nosimd","add_offset","add_offset_nosimd","add_tensor","add_truncate","add_unmasked","as_slice","as_slice","as_slice_mut","assign","assign","assign_partial","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","copy","copy_from_slice","density","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","dispatch_vector","dispatch_vector_inner","drop","drop","drop","drop","entry","entry","eq","equivalent","extend_len","first_nonzero","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_bytes","from_slice","hash","impl_try_into","init","init","init","init","into","into","into","into","into_iter","into_iter","is_empty","is_empty","is_zero","is_zero","iter","iter","iter_nonzero","iter_nonzero","len","len","limbs","limbs_mut","match_p","multiunzip","new","new_with_capacity","next","next","num_limbs","padded_len","prime","prime","prime","scale","scale","serialize","set_entry","set_entry","set_scratch_vector_size","set_to_zero","set_to_zero","sign_rule","slice","slice","slice_mut","slice_mut","to_bytes","to_owned","to_owned","to_owned","to_string","to_string","trim_start","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","update_from_bytes"],"q":[[0,"fp"],[12,"fp::constants"],[26,"fp::limb"],[58,"fp::matrix"],[85,"fp::matrix::m4ri"],[112,"fp::matrix::matrix_inner"],[242,"fp::matrix::quasi_inverse"],[273,"fp::matrix::subquotient"],[314,"fp::matrix::subspace"],[354,"fp::prime"],[455,"fp::simd"],[458,"fp::simd::x86_64"],[462,"fp::vector"],[468,"fp::vector::inner"],[595,"fp::vector::iter"],[642,"fp::vector::vector_generic"]],"d":["","The number of primes that are supported.","","An array containing the first NUM_PRIMES prime numbers.","For any integer i less than or equal to MAX_PRIME, …","","","","","","","","","","","The number of bits each Limb occupies.","The number of bytes each Limb occupies.","","","","The MAX_PRIMEth prime number. Constructing a ValidPrime …","A sentinel value. PRIME_TO_INDEX_MAP[i] == NOT_A_PRIME if …","The number of primes that are supported.","An array containing the first NUM_PRIMES prime numbers.","For any integer i less than or equal to MAX_PRIME, …","","A struct containing the information required to access a …","Return the Limb whose ith entry is …","","Return the number of bits an element of $\\\\mathbb{F}_P$ …","Return the number of bits an element of $\\\\mathbb{F}_P$ …","If l is a limb of elements of $\\\\mathbb{F}_p$, then …","","","","","","","","The number of elements of $\\\\mathbb{F}_p$ that fit in a …","The number of elements of $\\\\mathbb{F}_p$ that fit in a …","Returns the argument unchanged.","","Calls U::from(self).","Check whether or not a limb is reduced, i.e. whether every …","","","Return the number of limbs required to hold dim entries.","Given an interator of u32’s, pack all of them into a …","Return the Range<usize> starting at the index of the limb …","Return the Limb whose entries are the entries of limb …","","","Return either Some(sum) if no carries happen in the limb, …","","","","Give an iterator over the entries of limb.","This models an augmented matrix.","A matrix! In particular, a matrix with values in F_p. The …","","Given a matrix M, a quasi-inverse Q is a map from the …","","A subspace of a vector space.","","","","","","","","","","","","","The pivot columns of the matrix. pivots[n] is k if column n…","","","","","","","","","M4RI works as follows — first row reduce k rows using …","Add a row to the table.","","","Clear the contents of the table","The list of pivot columns of the rows, in the format …","The 2^k linear combinations of the k rows, apart from the …","","","","","","Returns the argument unchanged.","Generates the table from the known data num is the number …","","Calls U::from(self).","Whether the table has no rows","Number of rows in the M4riTable","The smallest non-zero limb in this table. We use this when …","Create a table with space for k vectors, each with cols …","","","Get the list of pivot rows","The indices of new rows in the table","","","","This models an augmented matrix.","A matrix! In particular, a matrix with values in F_p. The …","","","","For each row, add the v[i]th entry of other to self.","Applies a matrix to a vector.","","","Produces a padded augmented matrix from an &[Vec<u32>] …","","","","","","","","","","","","","","Gets the number of columns in the matrix.","","Computes the quasi-inverse of a matrix given a rref of […","","Computes the kernel from an augmented matrix in rref. To …","","Computes the quasi-inverse of a matrix given a rref of […","","This function computes quasi-inverses for matrices A, B …","","","","","","","","","","","","","","","","","","Given a matrix in rref, say [A|B|C], where B lies between …","Given a matrix M in rref, add rows to make the matrix …","Given a row reduced matrix, find the first row whose pivot …","This is very similar to row_reduce, except we only need to …","Example","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Produces a Matrix from an &[Vec<u32>] object. If the …","","Returns the ith row of the matrix","Returns the ith row of the matrix","","","","Set the pivots to -1 in every entry. This is called by …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","Produces a new matrix over F_p with the specified number …","","","","","","","","The pivot columns of the matrix. pivots[n] is k if column n…","","","Read a vector of isize of length dim.","","","","","Performs a row operation using pivot_column as the pivot …","A version of Matrix::row_op without the zero assumption.","Perform row reduction to reduce it to reduced row echelon …","","","","","Gets the number of rows in the matrix.","A no-nonsense, safe, row operation. Adds c * self[source] …","","","","Mutably borrows x[i] and x[j].","","","","","","","","","","","","","","","","","","","Read a vector of isize","Given a matrix M, a quasi-inverse Q is a map from the …","Apply the quasi-inverse to an input vector and add a …","","","","","","","","","","","Returns the argument unchanged.","","","","","Calls U::from(self).","","","","","","","Given a data file containing a quasi-inverse, apply it to …","","","","","","","","","","","","","","","The pivot columns of the complement to the subspace","","","","","","","Returns the argument unchanged.","Given a chain of subspaces subspace < space < k^…","","","","Calls U::from(self).","","Create a new subquotient of an ambient space of dimension …","Create a new subquotient of an ambient space of dimension …","","","","","","Given a vector elt, project elt to the complement and …","Project the vector onto the complement of the quotient …","","Set the subquotient to be the full ambient space …","The dimension of the subspace part of the subquotient.","The generators of the subspace part of the subquotient.","","","","","","","A subspace of a vector space.","","This adds a vector to the subspace. This function assumes …","This adds some rows to the subspace","","Returns a basis of the subspace.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","Whether the subspace is empty. This assumes the subspace …","","","","","","Projects a vector to a complement of the subspace. The …","Sets the subspace to be the entire subspace.","Sets the subspace to be the zero subspace.","","","","","","","A number satisfying the Binomial trait supports computing …","Iterates through all numbers with the same number of bits. …","","","","","Binomial coefficient n choose k.","mod 2 binomial coefficient n choose k","Binomial coefficients mod 4. We pre-compute the …","Compute binomial coefficients mod 4 using the recursion …","Compute odd binomial coefficients mod p, where p is odd. …","Checks whether n choose k is zero mod p. Since we don’t …","","","","","","","","","","","","","","","","","","","","","This uses a lookup table for n choose k when n and k are …","","","","","","","Factor $n$ as $p^k m$. Returns $(k, m)$.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Computes b^e.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","Compute the base 2 log of a number, rounded down to the …","Discrete log base p of n.","","Multinomial coefficient of the list l","mod 2 multinomial coefficient","Computes the multinomial coefficient mod p using Lucas’ …","","","","","","","","","","Compute b^e mod p.","","","","","","","","","","","","","","","","","","","","Get the underlying prime. This is the same function as …","","","","","","","","","","","","","","This module is provides wrappers around the contents of …","An FpVectorP is a vector over $\\\\mathbb{F}_p$ for a fixed …","A SliceMutP is a mutable slice of an FpVectorP. This …","A SliceP is a slice of an FpVectorP. This immutably …","","","","","","","Given a mask v, add the v[i]th entry of other to the ith …","","Add other to self on the assumption that the first offset …","Add other to self on the assumption that the first offset …","","Adds c * other to self. other must have the same length, …","","coeff need not be reduced mod p. Adds v otimes w to self.","","Given a mask v, add the ith entry of other to the v[i]th …","","","","","TODO: improve efficiency","A version of FpVectorP::assign that allows other to be …","","","","","","","","","","","Generates a version of itself with a shorter lifetime","This replaces the contents of the vector with the contents …","","","","","","","","","","","","","","","","","This function ensures the length of the vector is at least …","Find the index and value of the first non-zero entry of …","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","TODO: implement prime 2 version","","","","","","","","This function underflows if self.end == 0, which happens …","","","","","","","","","","","","","","","","","","","This clears the vector and sets the length to len. This is …","","","","","","","","","","","","Converts a slice to an owned FpVectorP. This is vastly …","Permanently remove the first n elements in the vector. n …","","","","","","","","","","","Iterator over non-zero entries of an FpVector. This is …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Example","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,5,5,5,5,5,5,0,0,5,5,5,0,5,0,0,0,0,0,0,5,0,5,5,5,0,0,0,0,0,0,0,17,17,15,34,21,34,23,21,0,22,0,15,15,23,0,34,21,0,0,17,15,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,15,17,17,15,15,15,15,17,15,21,17,15,21,15,21,15,21,17,17,17,15,15,15,21,15,21,15,21,21,17,15,21,21,17,15,21,21,17,15,21,21,21,15,15,15,21,15,15,15,15,15,15,17,15,21,15,15,15,15,15,17,15,21,15,21,17,15,21,15,15,21,21,15,17,15,17,15,15,15,15,21,15,21,15,17,15,15,15,15,15,15,17,15,17,15,15,15,15,21,21,17,17,15,15,21,15,15,15,21,15,15,21,15,15,15,17,15,21,17,15,21,17,15,21,17,15,15,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,0,0,0,0,0,0,54,54,54,54,54,54,40,41,3,37,40,41,3,37,3,3,40,41,3,3,37,40,41,3,37,3,0,40,41,3,37,3,3,0,40,3,3,37,37,40,41,3,37,3,0,40,41,3,37,0,40,41,3,37,40,41,0,0,0,0,0,54,54,54,40,41,3,40,40,41,3,40,41,0,40,3,40,3,3,37,40,41,3,3,37,40,41,3,37,40,41,3,37,3,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,46,45,46,45,45,46,45,45,45,46,46,46,46,45,46,45,46,45,45,46,45,45,47,46,45,47,46,45,47,45,47,46,45,45,45,47,46,45,47,46,45,47,46,47,46,45,47,45,45,45,45,45,47,46,45,45,47,47,46,46,45,45,45,47,46,45,47,46,45,47,45,47,45,47,45,47,45,47,45,47,47,47,45,45,47,46,45,47,47,45,45,47,45,47,46,46,45,46,45,46,45,45,46,45,45,47,45,46,47,46,45,47,47,45,45,47,46,45,47,46,45,47,46,0,0,51,51,51,52,51,52,51,51,52,52,51,52,51,52,52,51,52,51,51,51,52,52,51,52,51,52,51,52,51,51,52,51,52,52,51,52,51,52,51,51,52,51,52,51,52,0,0,0,0,53,26,19,18,53,26,19,18,53,26,19,18,53,26,19,18,26,18,26,26,18,26,18,26,26,26,18,26,18,26,18,26,26,18,26,53,26,19,18,53,26,19,18,26,19,26,19,18,26,26,53,26,19,18,53,26,19,18,26,0,0,53,26,19,18,26,19,26,26,26,26,26,26,19,19,18,53,26,19,19,19,19,18,18,18,26,26,26,0,53,26,19,18,53,26,19,18,53,26,26,19,26,19,26,19,26,19,26,19,26,26,0,53,26,26,53,53,26,26,26,19,18,26,18,26,26,18,26,26,18,26,26,19,26,18,26,26,19,19,26,19,26,53,26,19,18,53,26,26,26,26,26,19,18,53,26,19,18,26],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,1,2],1],0,[3,4],[[],4],[[],1],[[]],[[]],[5,5],[[]],[4],[4],[4],[3,4],[[],4],[[]],[[],4],[[]],[1,6],0,[4,5],[4,4],[7,1],[[4,4],[[8,[4]]]],[1,1],[[1,1],2],[[]],[1,[[9,[1]]]],[[],10],[[],10],[[],11],[1,7],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[12,4,4]],[[]],[[]],[12],0,0,[[],12],[4],[4],[4],[[12,13],14],[[]],[[12,15]],[[],4],[[]],[12,6],[12,4],0,[[4,4],12],[[12,[16,[1]]]],[[12,15,4]],[12,[[16,[4]]]],0,[[],10],[[],10],[[],11],0,0,0,[[15,15]],[17],[[17,15,[16,[4]]]],[[15,18,2,19]],[15,17],[[15,15]],[[3,[16,[[20,[2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[15,15],[21,21],[[]],[[]],0,0,[17,4],[15,4],0,[[15,4,4],22],[21,22],[[15,4],22],[21,22],[[15,4,4],23],[21,23],[21],[4],[4],[4],[21,15],[4],[4],[4],[21,15],[4],[4],[4],[21,21],0,[[15,15],6],[[],6],[[15,4]],[[21,4]],[[15,4,4,22,4],[[20,[4]]]],[[15,4,4,4],[[20,[4]]]],[[15,4],4],[[15,7],[[20,[4]]]],[[15,13],14],[[15,13],14],[[]],[[]],[[]],[[3,4,4,24],[[25,[15]]]],[[3,[16,[[20,[2]]]]],15],[[3,4],15],[15],[15],[[],4],[[],4],[[],4],[15],0,[[]],[[]],[[]],[15],[15],[21,15],[[21,4,4,4],15],[15,6],[17,7],[15,[[27,[26]]]],[17,7],[15,[[28,[26]]]],[[15,15],15],[[15,2]],[[3,4,4],15],[[3,4,[29,[4]]],21],[[3,4,4,4,4],15],[[3,4,[16,[4]],4,4],21],0,[17,30],[15,30],[15,[[16,[31]]]],0,[15,[[16,[31]]]],[15,3],[[4,24],[[25,[[20,[31]]]]]],[[17,4],19],[[15,4],19],[[17,4],18],[[15,4],18],[[15,4,4,4,3]],[[15,4,4,4,3]],[15,4],[[21,4,4,4],19],[[21,4,4,4],18],[[17,4,4],17],[17,4],[15,4],[[15,4,4,2]],[[21,4,4],17],[15],[[15,4,4,4,4],17],[[15,4,4]],0,[[15,32],25],[[]],[[]],[[],33],[15,[[20,[[20,[2]]]]]],[[15,4,4,4]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11],0,0,[[[16,[31]],32],25],0,[[23,18,2,19]],[[]],[[]],[23,23],[[]],[4],[4],[4],[[23,23],6],[[],6],[[23,13],14],[[]],[[3,24],[[25,[23]]]],0,[23,4],[[],4],[[]],[[[9,[[20,[31]]]],15],23],[23,[[9,[[16,[31]]]]]],[23,15],0,[23,3],[23,4],[[3,24,16,16],25],[23,4],[[23,32],25],[[]],[[],10],[[],10],[[],11],0,[[34,19]],[34,4],[[]],[[]],[34],[34,34],[[]],[34,7],[4],[4],[34,4],0,[4],[[34,13],14],[[]],[[22,22],34],[34,7],0,[[],4],[[]],[34,6],[[3,4],34],[[3,4],34],[34,3],[[34,19]],0,[34,4],[34,[[16,[31]]]],[[34,18],[[20,[2]]]],[[34,18]],[[15,34,34],[[20,[[20,[2]]]]]],[34],[34,4],[34,7],[[]],[[],33],[[],10],[[],10],[[],11],[34,22],0,[[22,7]],[[22,19],4],[[22,35]],[22,4],[22,[[16,[26]]]],[[]],[[]],[22,22],[[]],[[22,19],6],[4],[4],[22,4],[4],[[3,4],22],[[3,4],22],[[22,22],6],[[],6],[[22,13],14],[[22,13],14],[[]],[[3,24],[[25,[22]]]],[[],4],[[]],[22,6],[22,7],0,[[3,4,4],22],[22,[[16,[31]]]],[22,3],[[22,18]],[22],[22],[[22,32],25],[[]],[[],33],[[],10],[[],10],[[],11],0,0,0,0,0,0,[3],[[]],[[]],[[]],[3],[3,6],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[3,3],[[]],[4],[4],[3],[4],[4],[4],[4],[4],[4],[36,[[10,[3]]]],[[3,4,4],2],[4],[4],[4],[4],[[3,3],6],[[],6],[[2,2]],0,[[3,13],14],[[3,13],14],[[37,13],14],[[37,13],14],[[]],[[]],[[]],[[]],[38,[[10,[3,33]]]],0,[[],4],[[],4],[[],4],[[],4],[[2,2],2],[[]],[[]],[[]],[[]],[[]],[[]],[[3,2],2],[2,6],[4,4],[[2,2],2],[[2,39],2],[[3,16]],[16],[[3,16]],[1,40],[4,41],[2,3],[[1,4],40],[40,9],[41,9],0,[[],42],[[],42],[[2,2,2],2],0,[[3,43],10],[1,7],[[]],[[],33],[[],33],[[],10],[[],10],[2,[[10,[3,37]]]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11],[[],11],[3,2],0,0,[[[16,[1]],[16,[1]],4]],0,0,[1,44],[[1,44]],[[44,44],44],0,0,0,0,0,0,0,0,0,[[45,45,2]],[[46,47,2]],[[45,4,2]],[[46,4,2]],[[45,45,2,16],6],[[45,4,1,2,16],6],[[46,47,2,[16,[4]]]],[[45,45,2]],[[45,45,2,4]],[[45,45,2,4]],[[46,47,2]],[[46,47,2]],[[46,47,2]],[[46,4,2,47,47]],[[45,45,2],9],[[46,47,2,[16,[4]]]],[45,47],[46,47],[45,46],[[45,45]],[[46,47]],[[45,45]],[[]],[[]],[[]],[[]],[[]],[[]],[45,45],[47,47],[[]],[[]],[46,46],[[45,[16,[2]]]],[45,48],[4],[4],[4],[4],[4],[4],[4],[4],[4],0,0,[[45,4],2],[[47,4],2],[[45,45],6],[[],6],[[45,4]],[45,9],[[45,13],14],[[47,13],14],[[46,13],14],[[]],[[[49,[[16,[2]]]]],45],[45,47],[[]],[45,46],[[]],[[4,[20,[1]]],45],[[45,50]],[[],4],[[],4],[[],4],[[]],[[]],[[]],[45,6],[47,6],[45,6],[47,6],[45,51],[47,51],[45,52],[47,52],[45,4],[47,4],0,[47],[47,[[8,[4]]]],[47,[[8,[4]]]],[45,[[16,[1]]]],0,0,0,[45,[[16,[1]]]],[47,1],[47,1],[4,45],[[4,4],45],[47,4],[45,3],[47,3],[46,3],[46],[[45,2]],[[46,2]],[[45,4,2]],[[46,4,2]],[[45,4]],[45],[46],[[45,45],6],[[45,4,4],47],[[47,4,4],47],[[45,4,4],46],[[46,4,4],46],0,0,[[]],[[]],[47,45],[[45,4]],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11],0,0,0,0,[[]],[[]],[[]],[[]],0,0,0,0,[4],[4],[4],[4],0,[4],[4],0,0,[[]],[[]],0,[[],4],[[],4],[[]],[[]],[[]],[[]],[51,4],0,0,0,0,[[]],[47,51],[47,52],[51,9],[52,9],[[51,4]],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[26,26,2]],[[18,19,2]],[[26,26]],[[26,4,2]],[[18,4,2]],[[26,26,2,[16,[26]]],6],[[18,19,2,[16,[4]]]],[[26,26,2]],[[26,26,2,4]],[[26,26,2,4]],[[18,4,2,19,19]],[[26,26,2],9],[[18,19,2,[16,[4]]]],[26,19],[18,19],[26,18],[[26,26]],[[18,19]],[[26,26]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[26,26],[19,19],[[]],[[]],[18,18],[[26,[16,[2]]]],[26,48],[4],[4],[4],[4],[4],[4],[4],[4],[36,[[10,[26]]]],0,0,[4],[4],[4],[4],[[26,4],2],[[19,4],2],[[26,26],6],[[],6],[[26,4]],[26,9],[[26,13],14],[[26,13],14],[[19,13],14],[[19,13],14],[[18,13],14],[[]],[[]],[[]],[18,19],[19,19],[26,19],[26,18],[18,18],[[]],[[3,4,24],[[25,[26]]]],[[3,[16,[2]]],26],[[26,50]],0,[[],4],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[]],[[]],[26],[26,6],[19,6],[26,6],[19,6],[26,51],[19,51],[26,53],[19,53],[26,4],[19,4],[26,[[16,[1]]]],[26,[[16,[1]]]],0,[[]],[[3,4],26],[[3,4,4],26],[53,9],[53,9],[[3,4],4],[[3,4],4],[26,3],[19,3],[18,3],[[26,2]],[[18,2]],[[26,43],10],[[26,4,2]],[[18,4,2]],[[26,4]],[26],[18],[[26,26],6],[[26,4,4],19],[[19,4,4],19],[[26,4,4],18],[[18,4,4],18],[[26,32],25],[[]],[19,26],[[]],[[],33],[[],33],[[26,4]],[[],10],[[],10],[[],10],[[],10],[[],10],[26,[[10,[45]]]],[26,[[10,[45]]]],[26,[[10,[45]]]],[[],10],[26,[[10,[45]]]],[[],10],[[],10],[[],11],[[],11],[[],11],[[],11],[[26,24],25]],"c":[],"p":[[15,"u64"],[15,"u32"],[3,"ValidPrime"],[15,"usize"],[3,"LimbBitIndexPair"],[15,"bool"],[8,"Iterator"],[3,"Range"],[4,"Option"],[4,"Result"],[3,"TypeId"],[3,"M4riTable"],[3,"Formatter"],[6,"Result"],[3,"Matrix"],[15,"slice"],[3,"MatrixSliceMut"],[4,"SliceMut"],[4,"Slice"],[3,"Vec"],[3,"AugmentedMatrix"],[3,"Subspace"],[3,"QuasiInverse"],[8,"Read"],[6,"Result"],[4,"FpVector"],[3,"Iter"],[3,"IterMut"],[15,"array"],[8,"IndexedParallelIterator"],[15,"isize"],[8,"Write"],[3,"String"],[3,"Subquotient"],[8,"FnMut"],[8,"Deserializer"],[3,"InvalidPrimeError"],[15,"str"],[15,"i32"],[3,"BitflagIterator"],[3,"BinomialIterator"],[3,"IterBridge"],[8,"Serializer"],[3,"__m128i"],[3,"FpVectorP"],[3,"SliceMutP"],[3,"SliceP"],[15,"f32"],[8,"AsRef"],[8,"Hasher"],[3,"FpVectorIterator"],[3,"FpVectorNonZeroIteratorP"],[4,"FpVectorNonZeroIterator"],[8,"Binomial"]]},\ +"fp":{"doc":"","t":"RRRRROAAAAAARRHRRRGRRRRRRODFMFFFLLLLLLLFFLLLFMFFFFFFLFLLLFDDDDDDMMMMMMMMAMAMMMAMMAAMMDLLLLMMLLLLLLLLLLLMLLLLMLLLDDDLLLLLLLLLLLLLLLLLMMLLMLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLMLMLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLMMLDLLLLLLLLLLLLLMLLLLLLMLLLLLLLLLDLLLLLLLLLLLMLLLLLMLLLLLLLMLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLIDDDRDLKKKKKLLLLLLLLLLLLLLLLLLLLFLLLLLLFMLLLLLLLLLOLLLLFLLLLLLFFFFFLKKLLLLLLMLLFMLLLLLLLLLLLLLLLLLLLMRFAGFFFAAAAAADDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMMMLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLDDMMLLLLMMMMLLLLMLLMMLLMLLLLLLLMMMMLLLLLLLLLLLLEEEENNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLOOLLLLLLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLOLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["MAX_MULTINOMIAL_LEN","NUM_PRIMES","ODD_PRIMES","PRIMES","PRIME_TO_INDEX_MAP","const_for","constants","limb","matrix","prime","simd","vector","BINOMIAL4_TABLE","BINOMIAL4_TABLE_SIZE","BINOMIAL_TABLE","BITS_PER_LIMB","BYTES_PER_LIMB","INVERSE_TABLE","Limb","MAX_MULTINOMIAL_LEN","MAX_PRIME","NOT_A_PRIME","NUM_PRIMES","PRIMES","PRIME_TO_INDEX_MAP","populate_binomial_table","LimbBitIndexPair","add","bit_index","bit_length","bit_length_const","bitmask","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","entries_per_limb","entries_per_limb_const","from","init","into","is_reduced","limb","limb_bit_index_pair","number","pack","range","reduce","sign_rule","to_owned","truncate","try_from","try_into","type_id","unpack","AugmentedMatrix","Matrix","MatrixSliceMut","QuasiInverse","Subquotient","Subspace","col_end","col_start","columns","dimension","end","gens","image","inner","m4ri","matrix","matrix_inner","p","pivots","preimage","quasi_inverse","quotient","start","subquotient","subspace","vectors","vectors","M4riTable","add","borrow","borrow_mut","clear","columns","data","default","deref","deref_mut","drop","fmt","from","generate","init","into","is_empty","len","min_limb","new","reduce","reduce_naive","rows","rows","try_from","try_into","type_id","AugmentedMatrix","Matrix","MatrixSliceMut","add_assign","add_identity","add_masked","apply","as_slice_mut","assign","augmented_from_vec","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","col_end","col_start","columns","columns","columns","compute_image","compute_image","compute_kernel","compute_kernel","compute_quasi_inverse","compute_quasi_inverse","compute_quasi_inverses","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop_first","end","eq","equivalent","extend_column_dimension","extend_column_dimension","extend_image","extend_to_surjection","find_first_row_in_block","find_pivots_permutation","fmt","fmt","from","from","from","from_bytes","from_vec","identity","index","index_mut","init","init","init","initialize_pivots","inner","into","into","into","into_iter","into_iter","into_matrix","into_tail_segment","is_zero","iter","iter","iter_mut","iter_mut","maybe_par_iter_mut","maybe_par_iter_mut","mul","mul_assign","new","new","new_with_capacity","new_with_capacity","p","pivots","pivots","pivots_mut","prime","read_pivot","row","row","row_mut","row_mut","row_op","row_op_naive","row_reduce","row_segment","row_segment_mut","row_slice","rows","rows","safe_row_op","segment","set_to_zero","slice_mut","split_borrow","start","to_bytes","to_owned","to_owned","to_string","to_vec","trim","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vectors","vectors","write_pivot","QuasiInverse","apply","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","equivalent","fmt","from","from_bytes","image","image_dimension","init","into","new","pivots","preimage","preimage","prime","source_dimension","stream_quasi_inverse","target_dimension","to_bytes","to_owned","try_from","try_into","type_id","Subquotient","add_gen","ambient_dimension","borrow","borrow_mut","clear_gens","clone","clone_into","complement_pivots","deref","deref_mut","dimension","dimension","drop","fmt","from","from_parts","gens","gens","init","into","is_empty","new","new_full","prime","quotient","quotient","quotient_dimension","quotient_pivots","reduce","reduce_by_quotient","reduce_matrix","set_to_full","subspace_dimension","subspace_gens","to_owned","to_string","try_from","try_into","type_id","zeros","Subspace","add_basis_elements","add_vector","add_vectors","ambient_dimension","basis","borrow","borrow_mut","clone","clone_into","contains","deref","deref_mut","dimension","drop","empty_space","entire_space","eq","equivalent","fmt","fmt","from","from_bytes","init","into","is_empty","iter","matrix","new","pivots","prime","reduce","set_to_entire","set_to_zero","to_bytes","to_owned","to_string","try_from","try_into","type_id","Binomial","BinomialIterator","BitflagIterator","InvalidPrimeError","TWO","ValidPrime","binomial","binomial2","binomial4","binomial4_rec","binomial_odd","binomial_odd_is_zero","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","direct_binomial","drop","drop","drop","drop","eq","equivalent","factor_pk","flag","fmt","fmt","fmt","fmt","from","from","from","from","from_str","impl_binomial","init","init","init","init","integer_power","into","into","into","into","into_iter","into_iter","inverse","is_valid_prime","log2","logp","minus_one_to_the_n","multinomial","multinomial2","multinomial_odd","new","new","new","new_fixed_length","next","next","p","par_bridge","par_bridge","power_mod","remaining","serialize","set_bit_iterator","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","value","value","LIMBS_PER_SIMD","add_simd","x86_64","SimdLimb","load","store","xor","impl_fpvectorp","impl_slicemutp","impl_slicep","inner","iter","vector_generic","FpVectorP","SliceMutP","SliceP","add","add","add_basis_element","add_basis_element","add_carry","add_carry_limb","add_masked","add_nosimd","add_offset","add_offset_nosimd","add_shift_left","add_shift_none","add_shift_right","add_tensor","add_truncate","add_unmasked","as_slice","as_slice","as_slice_mut","assign","assign","assign_partial","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","copy","copy_from_slice","density","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","end","end","entry","entry","eq","equivalent","extend_len","first_nonzero","fmt","fmt","fmt","from","from","from","from","from","from","from_raw_parts","hash","init","init","init","into","into","into","is_empty","is_empty","is_zero","is_zero","iter","iter","iter_nonzero","iter_nonzero","len","len","len","limb_masks","limb_range","limb_range_inner","limbs","limbs","limbs","limbs","limbs_mut","max_limb_mask","min_limb_mask","new_","new_with_capacity_","offset","prime","prime","prime","reduce_limbs","scale","scale","set_entry","set_entry","set_scratch_vector_size","set_to_zero","set_to_zero","sign_rule","slice","slice","slice_mut","slice_mut","start","start","to_owned","to_owned","to_owned","trim_start","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","FpVectorIterator","FpVectorNonZeroIteratorP","bit_length","bit_mask","borrow","borrow","borrow_mut","borrow_mut","counter","cur_limb","cur_limb","cur_limb_entries_left","deref","deref","deref_mut","deref_mut","dim","drop","drop","entries_left","entries_per_limb_m_1","from","from","idx","init","init","into","into","into_iter","into_iter","len","limb_index","limb_index","limbs","limbs","multiunzip","new","new","next","next","skip_n","try_from","try_from","try_into","try_into","type_id","type_id","FpVector","FpVectorNonZeroIterator","Slice","SliceMut","_2","_2","_2","_2","_3","_3","_3","_3","_5","_5","_5","_5","_7","_7","_7","_7","add","add","add_assign","add_basis_element","add_basis_element","add_carry","add_masked","add_nosimd","add_offset","add_offset_nosimd","add_tensor","add_truncate","add_unmasked","as_slice","as_slice","as_slice_mut","assign","assign","assign_partial","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","copy","copy_from_slice","density","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","dispatch_vector","dispatch_vector_inner","drop","drop","drop","drop","entry","entry","eq","equivalent","extend_len","first_nonzero","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_bytes","from_slice","hash","impl_try_into","init","init","init","init","into","into","into","into","into_iter","into_iter","is_empty","is_empty","is_zero","is_zero","iter","iter","iter_nonzero","iter_nonzero","len","len","limbs","limbs_mut","match_p","multiunzip","new","new_with_capacity","next","next","num_limbs","padded_len","prime","prime","prime","scale","scale","serialize","set_entry","set_entry","set_scratch_vector_size","set_to_zero","set_to_zero","sign_rule","slice","slice","slice_mut","slice_mut","to_bytes","to_owned","to_owned","to_owned","to_string","to_string","trim_start","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","update_from_bytes"],"q":[[0,"fp"],[12,"fp::constants"],[26,"fp::limb"],[58,"fp::matrix"],[85,"fp::matrix::m4ri"],[112,"fp::matrix::matrix_inner"],[242,"fp::matrix::quasi_inverse"],[273,"fp::matrix::subquotient"],[314,"fp::matrix::subspace"],[354,"fp::prime"],[455,"fp::simd"],[458,"fp::simd::x86_64"],[462,"fp::vector"],[468,"fp::vector::inner"],[595,"fp::vector::iter"],[642,"fp::vector::vector_generic"],[805,"core::iter::traits::iterator"],[806,"core::ops::range"],[807,"core::option"],[808,"core::result"],[809,"core::any"],[810,"core::fmt"],[811,"core::fmt"],[812,"std::io::error"],[813,"std::io"],[814,"core::slice::iter"],[815,"core::slice::iter"],[816,"std::io"],[817,"core::ops::function"],[818,"serde::de"],[819,"rayon::iter::par_bridge"],[820,"serde::ser"],[821,"core::core_arch::x86"],[822,"core::convert"],[823,"core::hash"]],"d":["","The number of primes that are supported.","","An array containing the first NUM_PRIMES prime numbers.","For any integer i less than or equal to MAX_PRIME, …","","","","","","","","","","","The number of bits each Limb occupies.","The number of bytes each Limb occupies.","","","","The MAX_PRIMEth prime number. Constructing a ValidPrime …","A sentinel value. PRIME_TO_INDEX_MAP[i] == NOT_A_PRIME if …","The number of primes that are supported.","An array containing the first NUM_PRIMES prime numbers.","For any integer i less than or equal to MAX_PRIME, …","","A struct containing the information required to access a …","Return the Limb whose ith entry is …","","Return the number of bits an element of $\\\\mathbb{F}_P$ …","Return the number of bits an element of $\\\\mathbb{F}_P$ …","If l is a limb of elements of $\\\\mathbb{F}_p$, then …","","","","","","","","The number of elements of $\\\\mathbb{F}_p$ that fit in a …","The number of elements of $\\\\mathbb{F}_p$ that fit in a …","Returns the argument unchanged.","","Calls U::from(self).","Check whether or not a limb is reduced, i.e. whether every …","","","Return the number of limbs required to hold dim entries.","Given an interator of u32’s, pack all of them into a …","Return the Range<usize> starting at the index of the limb …","Return the Limb whose entries are the entries of limb …","","","Return either Some(sum) if no carries happen in the limb, …","","","","Give an iterator over the entries of limb.","This models an augmented matrix.","A matrix! In particular, a matrix with values in F_p. The …","","Given a matrix M, a quasi-inverse Q is a map from the …","","A subspace of a vector space.","","","","","","","","","","","","","The pivot columns of the matrix. pivots[n] is k if column n…","","","","","","","","","M4RI works as follows — first row reduce k rows using …","Add a row to the table.","","","Clear the contents of the table","The list of pivot columns of the rows, in the format …","The 2^k linear combinations of the k rows, apart from the …","","","","","","Returns the argument unchanged.","Generates the table from the known data num is the number …","","Calls U::from(self).","Whether the table has no rows","Number of rows in the M4riTable","The smallest non-zero limb in this table. We use this when …","Create a table with space for k vectors, each with cols …","","","Get the list of pivot rows","The indices of new rows in the table","","","","This models an augmented matrix.","A matrix! In particular, a matrix with values in F_p. The …","","","","For each row, add the v[i]th entry of other to self.","Applies a matrix to a vector.","","","Produces a padded augmented matrix from an &[Vec<u32>] …","","","","","","","","","","","","","","Gets the number of columns in the matrix.","","Computes the quasi-inverse of a matrix given a rref of […","","Computes the kernel from an augmented matrix in rref. To …","","Computes the quasi-inverse of a matrix given a rref of […","","This function computes quasi-inverses for matrices A, B …","","","","","","","","","","","","","","","","","","Given a matrix in rref, say [A|B|C], where B lies between …","Given a matrix M in rref, add rows to make the matrix …","Given a row reduced matrix, find the first row whose pivot …","This is very similar to row_reduce, except we only need to …","Example","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Produces a Matrix from an &[Vec<u32>] object. If the …","","Returns the ith row of the matrix","Returns the ith row of the matrix","","","","Set the pivots to -1 in every entry. This is called by …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Produces a new matrix over F_p with the specified number …","","","","","","The pivot columns of the matrix. pivots[n] is k if column n…","","","Read a vector of isize of length dim.","","","","","Performs a row operation using pivot_column as the pivot …","A version of Matrix::row_op without the zero assumption.","Perform row reduction to reduce it to reduced row echelon …","","","","","Gets the number of rows in the matrix.","A no-nonsense, safe, row operation. Adds c * self[source] …","","","","Mutably borrows x[i] and x[j].","","","","","","","","","","","","","","","","","","","Read a vector of isize","Given a matrix M, a quasi-inverse Q is a map from the …","Apply the quasi-inverse to an input vector and add a …","","","","","","","","","","","Returns the argument unchanged.","","","","","Calls U::from(self).","","","","","","","Given a data file containing a quasi-inverse, apply it to …","","","","","","","","","","","","","","","The pivot columns of the complement to the subspace","","","","","","","Returns the argument unchanged.","Given a chain of subspaces subspace < space < k^…","","","","Calls U::from(self).","","Create a new subquotient of an ambient space of dimension …","Create a new subquotient of an ambient space of dimension …","","","","","","Given a vector elt, project elt to the complement and …","Project the vector onto the complement of the quotient …","","Set the subquotient to be the full ambient space …","The dimension of the subspace part of the subquotient.","The generators of the subspace part of the subquotient.","","","","","","","A subspace of a vector space.","","This adds a vector to the subspace. This function assumes …","This adds some rows to the subspace","","Returns a basis of the subspace.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","Whether the subspace is empty. This assumes the subspace …","","","","","","Projects a vector to a complement of the subspace. The …","Sets the subspace to be the entire subspace.","Sets the subspace to be the zero subspace.","","","","","","","A number satisfying the Binomial trait supports computing …","Iterates through all numbers with the same number of bits. …","","","","","Binomial coefficient n choose k.","mod 2 binomial coefficient n choose k","Binomial coefficients mod 4. We pre-compute the …","Compute binomial coefficients mod 4 using the recursion …","Compute odd binomial coefficients mod p, where p is odd. …","Checks whether n choose k is zero mod p. Since we don’t …","","","","","","","","","","","","","","","","","","","","","This uses a lookup table for n choose k when n and k are …","","","","","","","Factor $n$ as $p^k m$. Returns $(k, m)$.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Computes b^e.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","Compute the base 2 log of a number, rounded down to the …","Discrete log base p of n.","","Multinomial coefficient of the list l","mod 2 multinomial coefficient","Computes the multinomial coefficient mod p using Lucas’ …","","","","","","","","","","Compute b^e mod p.","","","","","","","","","","","","","","","","","","","","Get the underlying prime. This is the same function as …","","","","","","","","","","","","","","This module is provides wrappers around the contents of …","An FpVectorP is a vector over $\\\\mathbb{F}_p$ for a fixed …","A SliceMutP is a mutable slice of an FpVectorP. This …","A SliceP is a slice of an FpVectorP. This immutably …","","","","","","","Given a mask v, add the v[i]th entry of other to the ith …","","Add other to self on the assumption that the first offset …","Add other to self on the assumption that the first offset …","","Adds c * other to self. other must have the same length, …","","coeff need not be reduced mod p. Adds v otimes w to self.","","Given a mask v, add the ith entry of other to the v[i]th …","","","","","TODO: improve efficiency","A version of FpVectorP::assign that allows other to be …","","","","","","","","","","","Generates a version of itself with a shorter lifetime","This replaces the contents of the vector with the contents …","","","","","","","","","","","","","","","","","This function ensures the length of the vector is at least …","Find the index and value of the first non-zero entry of …","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","TODO: implement prime 2 version","","","","","","","","This function underflows if self.end == 0, which happens …","","","","","","","","","","","","","","","","","","","This clears the vector and sets the length to len. This is …","","","","","","","","","","","","Converts a slice to an owned FpVectorP. This is vastly …","Permanently remove the first n elements in the vector. n …","","","","","","","","","","","Iterator over non-zero entries of an FpVector. This is …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Example","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,5,5,5,5,5,5,0,0,5,5,5,0,5,0,0,0,0,0,0,5,0,5,5,5,0,0,0,0,0,0,0,18,18,16,35,22,35,24,22,0,23,0,16,16,24,0,35,22,0,0,18,16,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,0,0,16,18,18,16,16,16,16,18,16,22,18,16,22,16,22,16,22,18,18,18,16,16,16,22,16,22,16,22,22,18,16,22,22,18,16,22,22,18,16,22,22,22,16,16,16,22,16,16,16,16,16,16,18,16,22,16,16,16,16,16,18,16,22,16,22,18,16,22,16,16,22,22,16,18,16,18,16,18,16,16,16,16,22,16,22,16,16,16,16,16,16,18,16,18,16,16,16,16,22,22,18,18,16,16,22,16,16,16,22,16,16,22,16,16,16,18,16,22,18,16,22,18,16,22,18,16,16,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,0,0,0,0,0,55,55,55,55,55,55,41,42,3,38,41,42,3,38,3,3,41,42,3,3,38,41,42,3,38,3,0,41,42,3,38,3,3,0,41,3,3,38,38,41,42,3,38,3,0,41,42,3,38,0,41,42,3,38,41,42,0,0,0,0,0,55,55,55,41,42,3,41,41,42,3,41,42,0,41,3,41,3,3,38,41,42,3,3,38,41,42,3,38,41,42,3,38,3,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,47,46,47,46,46,47,46,46,46,47,47,47,47,46,47,46,47,46,46,47,46,46,48,47,46,48,47,46,48,46,48,47,46,46,46,48,47,46,48,47,46,48,47,48,47,46,48,46,46,46,46,46,48,47,46,46,48,48,47,47,46,46,46,48,47,46,48,47,46,48,46,48,46,48,46,48,46,48,46,48,48,48,46,46,48,47,46,48,48,46,46,48,46,48,47,47,46,47,46,47,46,46,47,46,46,48,46,47,48,47,46,48,48,46,46,48,47,46,48,47,46,48,47,0,0,52,52,52,53,52,53,52,52,53,53,52,53,52,53,53,52,53,52,52,52,53,53,52,53,52,53,52,53,52,52,53,52,53,53,52,53,52,53,52,52,53,52,53,52,53,0,0,0,0,54,27,20,19,54,27,20,19,54,27,20,19,54,27,20,19,27,19,27,27,19,27,19,27,27,27,19,27,19,27,19,27,27,19,27,54,27,20,19,54,27,20,19,27,20,27,20,19,27,27,54,27,20,19,54,27,20,19,27,0,0,54,27,20,19,27,20,27,27,27,27,27,27,20,20,19,54,27,20,20,20,20,19,19,19,27,27,27,0,54,27,20,19,54,27,20,19,54,27,27,20,27,20,27,20,27,20,27,20,27,27,0,54,27,27,54,54,27,27,27,20,19,27,19,27,27,19,27,27,19,27,27,20,27,19,27,27,20,20,27,20,27,54,27,20,19,54,27,27,27,27,27,20,19,54,27,20,19,27],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,1,2],1],0,[3,4],[[],4],[[],1],[-1,-2,[],[]],[-1,-2,[],[]],[5,5],[[-1,-2],6,[],[]],[4,-1,[]],[4,-1,[]],[4,6],[3,4],[[],4],[-1,-1,[]],[[],4],[-1,-2,[],[]],[1,7],0,[4,5],[4,4],[-1,1,8],[[4,4],[[9,[4]]]],[1,1],[[1,1],2],[-1,-2,[],[]],[1,[[10,[1]]]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[1,[[0,[8]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[13,4,4],6],[-1,-2,[],[]],[-1,-2,[],[]],[13,6],0,0,[[],13],[4,-1,[]],[4,-1,[]],[4,6],[[13,14],15],[-1,-1,[]],[[13,16],6],[[],4],[-1,-2,[],[]],[13,7],[13,4],0,[[4,4],13],[[13,[17,[1]]],6],[[13,16,4],6],[13,[[17,[4]]]],0,[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],0,0,0,[[16,16],6],[18,6],[[18,16,[17,[4]]],6],[[16,19,2,20],6],[16,18],[[16,16],6],[[3,[17,[[21,[2]]]]],[[6,[4,16]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[16,16],[22,22],[[-1,-2],6,[],[]],[[-1,-2],6,[],[]],0,0,[18,4],[16,4],0,[[16,4,4],23],[22,23],[[16,4],23],[22,23],[[16,4,4],24],[22,24],[22,[[6,[24,24]]]],[4,-1,[]],[4,-1,[]],[22,16],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[22,16],[4,6],[4,6],[4,6],[22,22],0,[[16,16],7],[[-1,-2],7,[],[]],[[16,4],6],[[22,4],6],[[16,4,4,23,4],[[21,[4]]]],[[16,4,4,4],[[21,[4]]]],[[16,4],4],[[16,-1],[[21,[4]]],8],[[16,14],15],[[16,14],15],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[3,4,4,-1],[[25,[16]]],26],[[3,[17,[[21,[2]]]]],16],[[3,4],16],[[16,-1],[],[]],[[16,-1],[],[]],[[],4],[[],4],[[],4],[16,6],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[16],[16],[22,16],[[22,4,4,4],16],[16,7],[18,[[0,[8]]]],[16,[[28,[27]]]],[18,[[0,[8]]]],[16,[[29,[27]]]],[18,[[0,[30]]]],[16,[[0,[30]]]],[[16,16],16],[[16,2],6],[[3,4,4],16],[[3,4,[31,[4]]],22],[[3,4,4,4,4],16],[[3,4,[17,[4]],4,4],22],0,[16,[[17,[32]]]],0,[16,[[17,[32]]]],[16,3],[[4,-1],[[25,[[21,[32]]]]],26],[[18,4],20],[[16,4],20],[[18,4],19],[[16,4],19],[[16,4,4,4,3],6],[[16,4,4,4,3],6],[16,4],[[22,4,4,4],20],[[22,4,4,4],19],[[18,4,4],18],[18,4],[16,4],[[16,4,4,2],6],[[22,4,4],18],[16,6],[[16,4,4,4,4],18],[[16,4,4],[[6,[27,27]]]],0,[[16,-1],[[25,[6]]],33],[-1,-2,[],[]],[-1,-2,[],[]],[-1,34,[]],[16,[[21,[[21,[2]]]]]],[[16,4,4,4],6],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],0,0,[[[17,[32]],-1],[[25,[6]]],33],0,[[24,19,2,20],6],[-1,-2,[],[]],[-1,-2,[],[]],[24,24],[[-1,-2],6,[],[]],[4,-1,[]],[4,-1,[]],[4,6],[[24,24],7],[[-1,-2],7,[],[]],[[24,14],15],[-1,-1,[]],[[3,-1],[[25,[24]]],26],0,[24,4],[[],4],[-1,-2,[],[]],[[[10,[[21,[32]]]],16],24],[24,[[10,[[17,[32]]]]]],[24,16],0,[24,3],[24,4],[[3,-1,[17,[-2]],[17,[-3]]],[[25,[6]]],26,[],[]],[24,4],[[24,-1],[[25,[6]]],33],[-1,-2,[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],0,[[35,20],6],[35,4],[-1,-2,[],[]],[-1,-2,[],[]],[35,6],[35,35],[[-1,-2],6,[],[]],[35,[[0,[8]]]],[4,-1,[]],[4,-1,[]],[35,4],0,[4,6],[[35,14],15],[-1,-1,[]],[[23,23],35],[35,[[0,[8]]]],0,[[],4],[-1,-2,[],[]],[35,7],[[3,4],35],[[3,4],35],[35,3],[[35,20],6],0,[35,4],[35,[[17,[32]]]],[[35,19],[[21,[2]]]],[[35,19],6],[[16,35,35],[[21,[[21,[2]]]]]],[35,6],[35,4],[35,[[0,[8]]]],[-1,-2,[],[]],[-1,34,[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[35,23],0,[[23,-1],6,8],[[23,20],4],[[23,-1],6,36],[23,4],[23,[[17,[27]]]],[-1,-2,[],[]],[-1,-2,[],[]],[23,23],[[-1,-2],6,[],[]],[[23,20],7],[4,-1,[]],[4,-1,[]],[23,4],[4,6],[[3,4],23],[[3,4],23],[[23,23],7],[[-1,-2],7,[],[]],[[23,14],15],[[23,14],15],[-1,-1,[]],[[3,-1],[[25,[23]]],26],[[],4],[-1,-2,[],[]],[23,7],[23,[[0,[8]]]],0,[[3,4,4],23],[23,[[17,[32]]]],[23,3],[[23,19],6],[23,6],[23,6],[[23,-1],[[25,[6]]],33],[-1,-2,[],[]],[-1,34,[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],0,0,0,0,0,0,[[3,-1,-1],-1,[]],[[-1,-1],-1,[]],[[-1,-1],-1,[]],[[-1,-1],-1,[]],[[3,-1,-1],-1,[]],[[3,-1,-1],7,[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[3,3],[[-1,-2],6,[],[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[3],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[-1,[[11,[3]]],37],[[3,4,4],2],[4,6],[4,6],[4,6],[4,6],[[3,3],7],[[-1,-2],7,[],[]],[[2,2],[[6,[2,2]]]],0,[[3,14],15],[[3,14],15],[[38,14],15],[[38,14],15],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[39,[[11,[3,34]]]],0,[[],4],[[],4],[[],4],[[],4],[[2,2],2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[3,2],2],[2,7],[4,4],[[2,2],2],[[2,40],2],[[3,[17,[-1]]],-1,[]],[[[17,[-1]]],-1,[]],[[3,[17,[-1]]],-1,[]],[1,41],[4,42],[2,3],[[1,4],41],[41,10],[42,10],0,[-1,[[43,[-2]]],[],[]],[-1,[[43,[-2]]],[],[]],[[2,2,2],2],0,[[3,-1],11,44],[1,[[0,[8]]]],[-1,-2,[],[]],[-1,34,[]],[-1,34,[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[2,[[11,[3,38]]]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],[3,2],0,0,[[[17,[1]],[17,[1]],4],6],0,0,[1,45],[[1,45],6],[[45,45],45],0,0,0,0,0,0,0,0,0,[[46,46,2],6],[[47,48,2],6],[[46,4,2],6],[[47,4,2],6],[[46,46,2,[17,[-1]]],7,[]],[[46,4,1,2,[17,[-1]]],7,[]],[[47,48,2,[17,[4]]],6],[[46,46,2],6],[[46,46,2,4],6],[[46,46,2,4],6],[[47,48,2],6],[[47,48,2],6],[[47,48,2],6],[[47,4,2,48,48],6],[[46,46,2],[[10,[6]]]],[[47,48,2,[17,[4]]],6],[46,48],[47,48],[46,47],[[46,46],6],[[47,48],6],[[46,46],6],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[46,46],[48,48],[[-1,-2],6,[],[]],[[-1,-2],6,[],[]],[47,47],[[46,[17,[2]]],6],[46,49],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,6],[4,6],[4,6],0,0,[[46,4],2],[[48,4],2],[[46,46],7],[[-1,-2],7,[],[]],[[46,4],6],[46,[[10,[[6,[4,2]]]]]],[[46,14],15],[[48,14],15],[[47,14],15],[-1,46,[[50,[[17,[2]]]]]],[-1,-1,[]],[46,48],[-1,-1,[]],[-1,-1,[]],[46,47],[[4,[21,[1]]],46],[[46,-1],6,51],[[],4],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[46,7],[48,7],[46,7],[48,7],[46,52],[48,52],[46,53],[48,53],[46,4],[48,4],0,[48,[[6,[1,1]]]],[48,[[9,[4]]]],[48,[[9,[4]]]],[46,[[17,[1]]]],0,0,0,[46,[[17,[1]]]],[48,1],[48,1],[4,46],[[4,4],46],[48,4],[46,3],[48,3],[47,3],[47,6],[[46,2],6],[[47,2],6],[[46,4,2],6],[[47,4,2],6],[[46,4],6],[46,6],[47,6],[[46,46],7],[[46,4,4],48],[[48,4,4],48],[[46,4,4],47],[[47,4,4],47],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[48,46],[[46,4],6],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,0,0,[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],0,[4,6],[4,6],0,0,[-1,-1,[]],[-1,-1,[]],0,[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[52,4],0,0,0,0,[-1,[[6,[-2,-3]]],[],[],[]],[48,52],[48,53],[52,10],[53,10],[[52,4],6],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[-1,12,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[27,27,2],6],[[19,20,2],6],[[27,27],6],[[27,4,2],6],[[19,4,2],6],[[27,27,2,[17,[27]]],7],[[19,20,2,[17,[4]]],6],[[27,27,2],6],[[27,27,2,4],6],[[27,27,2,4],6],[[19,4,2,20,20],6],[[27,27,2],[[10,[6]]]],[[19,20,2,[17,[4]]],6],[27,20],[19,20],[27,19],[[27,27],6],[[19,20],6],[[27,27],6],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[27,27],[20,20],[[-1,-2],6,[],[]],[[-1,-2],6,[],[]],[19,19],[[27,[17,[2]]],6],[27,49],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[4,-1,[]],[-1,[[11,[27]]],37],0,0,[4,6],[4,6],[4,6],[4,6],[[27,4],2],[[20,4],2],[[27,27],7],[[-1,-2],7,[],[]],[[27,4],6],[27,[[10,[[6,[4,2]]]]]],[[27,14],15],[[27,14],15],[[20,14],15],[[20,14],15],[[19,14],15],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[20,20],[19,20],[27,20],[-1,-1,[]],[27,19],[19,19],[[3,4,-1],[[25,[27]]],26],[[3,[17,[2]]],27],[[27,-1],6,51],0,[[],4],[[],4],[[],4],[[],4],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[27],[27,7],[20,7],[27,7],[20,7],[27,52],[20,52],[27,54],[20,54],[27,4],[20,4],[27,[[17,[1]]]],[27,[[17,[1]]]],0,[-1,[[6,[-2,-3]]],[],[],[]],[[3,4],27],[[3,4,4],27],[54,10],[54,[[10,[[6,[4,2]]]]]],[[3,4],4],[[3,4],4],[27,3],[20,3],[19,3],[[27,2],6],[[19,2],6],[[27,-1],11,44],[[27,4,2],6],[[19,4,2],6],[[27,4],6],[27,6],[19,6],[[27,27],7],[[27,4,4],20],[[20,4,4],20],[[27,4,4],19],[[19,4,4],19],[[27,-1],[[25,[6]]],33],[-1,-2,[],[]],[-1,-2,[],[]],[20,27],[-1,34,[]],[-1,34,[]],[[27,4],6],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[27,[[11,[46,6]]]],[27,[[11,[46,6]]]],[27,[[11,[46,6]]]],[27,[[11,[46,6]]]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,[[11,[-2]]],[],[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],[-1,12,[]],[[27,-1],[[25,[6]]],26]],"c":[],"p":[[15,"u64"],[15,"u32"],[3,"ValidPrime",354],[15,"usize"],[3,"LimbBitIndexPair",26],[15,"tuple"],[15,"bool"],[8,"Iterator",805],[3,"Range",806],[4,"Option",807],[4,"Result",808],[3,"TypeId",809],[3,"M4riTable",85],[3,"Formatter",810],[6,"Result",810],[3,"Matrix",112],[15,"slice"],[3,"MatrixSliceMut",112],[4,"SliceMut",642],[4,"Slice",642],[3,"Vec",811],[3,"AugmentedMatrix",112],[3,"Subspace",314],[3,"QuasiInverse",242],[6,"Result",812],[8,"Read",813],[4,"FpVector",642],[3,"Iter",814],[3,"IterMut",814],[8,"MaybeIndexedParallelIterator",815],[15,"array"],[15,"isize"],[8,"Write",813],[3,"String",816],[3,"Subquotient",273],[8,"FnMut",817],[8,"Deserializer",818],[3,"InvalidPrimeError",354],[15,"str"],[15,"i32"],[3,"BitflagIterator",354],[3,"BinomialIterator",354],[3,"IterBridge",819],[8,"Serializer",820],[3,"__m128i",821],[3,"FpVectorP",468],[3,"SliceMutP",468],[3,"SliceP",468],[15,"f32"],[8,"AsRef",822],[8,"Hasher",823],[3,"FpVectorIterator",595],[3,"FpVectorNonZeroIteratorP",595],[4,"FpVectorNonZeroIterator",642],[8,"Binomial",354]]},\ "lift_hom":{"doc":"Given an element in $\\\\Ext(M, N)$, this computes the …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "mahowald_invariant":{"doc":"Computes algebraic Mahowald invariants (aka algebraic root …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "massey":{"doc":"Computes the triple Massey product up to a sign","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ +"maybe_rayon":{"doc":"","t":"AGMFFAFIQIIIIILLLLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLL","n":["concurrent","Scope","base","in_place_scope","join","prelude","scope","IndexedParallelIterator","Item","MaybeIndexedParallelIterator","MaybeIntoParallelIterator","MaybeIntoParallelRefMutIterator","MaybeParallelIterator","ParallelIterator","all","any","chain","chunks","cloned","cmp","collect","collect_into_vec","copied","count","drive","drive_unindexed","enumerate","eq","filter","filter_map","find_any","find_first","find_last","find_map_any","find_map_first","find_map_last","flat_map","flat_map_iter","flatten","flatten_iter","fold","fold_chunks","fold_chunks_with","fold_with","for_each","for_each_init","for_each_with","ge","gt","inspect","interleave","interleave_shortest","intersperse","le","len","lt","map","map_init","map_with","max","max_by","max_by_key","maybe_into_par_iter","maybe_par_iter_mut","min","min_by","min_by_key","ne","opt_len","panic_fuse","partial_cmp","partition","partition_map","position_any","position_first","position_last","positions","product","reduce","reduce_with","rev","skip","skip_any","skip_any_while","step_by","sum","take","take_any","take_any_while","try_fold","try_fold_with","try_for_each","try_for_each_init","try_for_each_with","try_reduce","try_reduce_with","unzip","unzip_into_vecs","update","while_some","with_max_len","with_min_len","with_producer","zip","zip_eq"],"q":[[0,"maybe_rayon"],[1,"maybe_rayon::concurrent"],[7,"maybe_rayon::concurrent::prelude"],[105,"core::ops::function"],[106,"core::marker"],[107,"core::ops::function"],[108,"rayon::iter"],[109,"rayon::iter::chunks"],[110,"rayon::iter::cloned"],[111,"core::cmp"],[112,"rayon::iter"],[113,"alloc::vec"],[114,"rayon::iter::copied"],[115,"rayon::iter::plumbing"],[116,"rayon::iter::plumbing"],[117,"rayon::iter::filter"],[118,"rayon::iter::filter_map"],[119,"core::option"],[120,"rayon::iter::flat_map"],[121,"rayon::iter::flat_map_iter"],[122,"rayon::iter::flatten"],[123,"rayon::iter::flatten_iter"],[124,"rayon::iter::fold"],[125,"rayon::iter::fold_chunks"],[126,"rayon::iter::fold_chunks_with"],[127,"core::clone"],[128,"rayon::iter::fold"],[129,"rayon::iter::interleave"],[130,"rayon::iter::interleave_shortest"],[131,"rayon::iter::intersperse"],[132,"rayon::iter::map"],[133,"rayon::iter::map_with"],[134,"rayon::iter::map_with"],[135,"core::default"],[136,"rayon::iter"],[137,"core::iter::traits::accum"],[138,"rayon::iter::rev"],[139,"rayon::iter::skip"],[140,"rayon::iter::skip_any"],[141,"rayon::iter::skip_any_while"],[142,"rayon::iter::step_by"],[143,"core::iter::traits::accum"],[144,"rayon::iter::take_any"],[145,"rayon::iter::take_any_while"],[146,"rayon::iter::try_fold"],[147,"rayon::iter::private"],[148,"rayon::iter::try_fold"],[149,"rayon::iter::while_some"],[150,"rayon::iter::len"],[151,"rayon::iter::len"],[152,"rayon::iter::zip_eq"]],"d":["","","","","","","","An iterator that supports “random access” to its data, …","The type of item that this parallel iterator produces. For …","","","","","Parallel version of the standard iterator trait.","Tests that every item in the parallel iterator matches the …","Searches for some item in the parallel iterator that …","Takes two iterators and creates a new iterator over both.","Splits an iterator up into fixed-size chunks.","Creates an iterator which clones all of its elements. …","Lexicographically compares the elements of this …","Creates a fresh collection containing all the elements …","Collects the results of the iterator into the specified …","Creates an iterator which copies all of its elements. …","Counts the number of items in this parallel iterator.","Internal method used to define the behavior of this …","Internal method used to define the behavior of this …","Yields an index along with each item.","Determines if the elements of this ParallelIterator are …","Applies filter_op to each item of this iterator, producing …","Applies filter_op to each item of this iterator to get an …","Searches for some item in the parallel iterator that …","Searches for the sequentially first item in the parallel …","Searches for the sequentially last item in the parallel …","Applies the given predicate to the items in the parallel …","Applies the given predicate to the items in the parallel …","Applies the given predicate to the items in the parallel …","Applies map_op to each item of this iterator to get nested …","Applies map_op to each item of this iterator to get nested …","An adaptor that flattens parallel-iterable Items into one …","An adaptor that flattens serial-iterable Items into one …","Parallel fold is similar to sequential fold except that the","Splits an iterator into fixed-size chunks, performing a …","Splits an iterator into fixed-size chunks, performing a …","Applies fold_op to the given init value with each item of …","Executes OP on each item produced by the iterator, in …","Executes OP on a value returned by init with each item …","Executes OP on the given init value with each item …","Determines if the elements of this ParallelIterator are …","Determines if the elements of this ParallelIterator are …","Applies inspect_op to a reference to each item of this …","Interleaves elements of this iterator and the other given …","Interleaves elements of this iterator and the other given …","Intersperses clones of an element between items of this …","Determines if the elements of this ParallelIterator are …","Produces an exact count of how many items this iterator …","Determines if the elements of this ParallelIterator are …","Applies map_op to each item of this iterator, producing a …","Applies map_op to a value returned by init with each item …","Applies map_op to the given init value with each item of …","Computes the maximum of all the items in the iterator. If …","Computes the maximum of all the items in the iterator with …","Computes the item that yields the maximum value for the …","","","Computes the minimum of all the items in the iterator. If …","Computes the minimum of all the items in the iterator with …","Computes the item that yields the minimum value for the …","Determines if the elements of this ParallelIterator are …","Internal method used to define the behavior of this …","Wraps an iterator with a fuse in case of panics, to halt …","Lexicographically compares the elements of this …","Partitions the items of a parallel iterator into a pair of …","Partitions and maps the items of a parallel iterator into …","Searches for some item in the parallel iterator that …","Searches for the sequentially first item in the parallel …","Searches for the sequentially last item in the parallel …","Searches for items in the parallel iterator that match the …","Multiplies all the items in the iterator.","Reduces the items in the iterator into one item using op. …","Reduces the items in the iterator into one item using op. …","Produces a new iterator with the elements of this iterator …","Creates an iterator that skips the first n elements.","Creates an iterator that skips n elements from anywhere in …","Creates an iterator that skips elements from anywhere in …","Creates an iterator that steps by the given amount","Sums up the items in the iterator.","Creates an iterator that yields the first n elements.","Creates an iterator that yields n elements from anywhere …","Creates an iterator that takes elements from anywhere in …","Performs a fallible parallel fold.","Performs a fallible parallel fold with a cloneable init …","Executes a fallible OP on each item produced by the …","Executes a fallible OP on a value returned by init with …","Executes a fallible OP on the given init value with each …","Reduces the items in the iterator into one item using a …","Reduces the items in the iterator into one item using a …","Unzips the items of a parallel iterator into a pair of …","Unzips the results of the iterator into the specified …","Mutates each item of this iterator before yielding it.","Creates an iterator over the Some items of this iterator, …","Sets the maximum length of iterators desired to process in …","Sets the minimum length of iterators desired to process in …","Internal method used to define the behavior of this …","Iterates over tuples (A, B), where the items A are from …","The same as Zip, but requires that both iterators have the …"],"i":[0,0,65,0,0,0,0,0,12,0,0,0,0,0,12,12,12,57,12,57,12,57,12,12,57,12,57,57,12,12,12,12,12,12,12,12,12,12,12,12,12,57,57,12,12,12,12,57,57,12,57,57,12,57,57,57,12,12,12,12,12,12,66,67,12,12,12,57,12,12,57,12,12,57,57,57,57,12,12,12,57,57,12,12,57,12,57,12,12,12,12,12,12,12,12,12,12,57,12,12,57,57,57,57,57],"f":[0,0,0,[-1,-2,1,[]],[[-1,-2],[[2,[-3,-4]]],[1,3],[1,3],3,3],0,[-1,-2,[1,3],3],0,0,0,0,0,0,0,[[-1,-2],4,[],[5,6,3]],[[-1,-2],4,[],[5,6,3]],[[-1,-2],[[7,[-1]]],[],8],[[-1,9],[[10,[-1]]],[]],[-1,[[11,[-1]]],12],[[-1,-2],13,[],8],[-1,-2,[],14],[[-1,[16,[15]]],2,[]],[-1,[[17,[-1]]],12],[-1,9,[]],[[-1,-2],[],[],18],[[-1,-2],[],[],19],[-1,[[20,[-1]]],[]],[[-1,-2],4,[],8],[[-1,-2],[[21,[-1,-2]]],[],[5,6,3]],[[-1,-2],[[22,[-1,-2]]],[],[5,6,3]],[[-1,-2],23,[],[5,6,3]],[[-1,-2],23,[],[5,6,3]],[[-1,-2],23,[],[5,6,3]],[[-1,-2],[[23,[-3]]],[],[5,6,3],3],[[-1,-2],[[23,[-3]]],[],[5,6,3],3],[[-1,-2],[[23,[-3]]],[],[5,6,3],3],[[-1,-2],[[24,[-1,-2]]],[],[5,6,3]],[[-1,-2],[[25,[-1,-2]]],[],[5,6,3]],[-1,[[26,[-1]]],[]],[-1,[[27,[-1]]],[]],[[-1,-2,-3],[[28,[-1,-2,-3]]],[],[5,6,3],[5,6,3]],[[-1,9,-2,-3],[[29,[-1,-2,-3]]],[],[5,3,6],[5,3,6]],[[-1,9,-2,-3],[[30,[-1,-2,-3]]],[],[3,31],[5,3,6]],[[-1,-2,-3],[[32,[-1,-2,-3]]],[],[3,31],[5,6,3]],[[-1,-2],2,[],[5,6,3]],[[-1,-2,-3],2,[],[5,6,3],[5,6,3]],[[-1,-2,-3],2,[],[3,31],[5,6,3]],[[-1,-2],4,[],8],[[-1,-2],4,[],8],[[-1,-2],[[33,[-1,-2]]],[],[5,6,3]],[[-1,-2],[[34,[-1]]],[],8],[[-1,-2],[[35,[-1]]],[],8],[-1,[[36,[-1]]],[]],[[-1,-2],4,[],8],[-1,9,[]],[[-1,-2],4,[],8],[[-1,-2],[[37,[-1,-2]]],[],[5,6,3]],[[-1,-2,-3],[[38,[-1,-2,-3]]],[],[5,6,3],[5,6,3]],[[-1,-2,-3],[[39,[-1,-2,-3]]],[],[3,31],[5,6,3]],[-1,23,[]],[[-1,-2],23,[],[6,3,5]],[[-1,-2],23,[],[6,3,5]],[-1,[],[]],[-1,[],[]],[-1,23,[]],[[-1,-2],23,[],[6,3,5]],[[-1,-2],23,[],[6,3,5]],[[-1,-2],4,[],8],[-1,[[23,[9]]],[]],[-1,[[40,[-1]]],[]],[[-1,-2],[[23,[13]]],[],8],[[-1,-2],[[2,[-3,-4]]],[],[5,6,3],[41,3,42],[41,3,42]],[[-1,-2],[[2,[-4,-6]]],[],[5,6,3],3,[41,3,[42,[-3]]],3,[41,3,[42,[-5]]]],[[-1,-2],[[23,[9]]],[],[5,6,3]],[[-1,-2],[[23,[9]]],[],[5,6,3]],[[-1,-2],[[23,[9]]],[],[5,6,3]],[[-1,-2],[[43,[-1,-2]]],[],[5,6,3]],[-1,-2,[],[3,44,44]],[[-1,-2,-3],[],[],[5,6,3],[5,6,3]],[[-1,-2],23,[],[5,6,3]],[-1,[[45,[-1]]],[]],[[-1,9],[[46,[-1]]],[]],[[-1,9],[[47,[-1]]],[]],[[-1,-2],[[48,[-1,-2]]],[],[5,6,3]],[[-1,9],[[49,[-1]]],[]],[-1,-2,[],[3,50,50]],[[-1,9],[[51,[-1]]],[]],[[-1,9],[[52,[-1]]],[]],[[-1,-2],[[53,[-1,-2]]],[],[5,6,3]],[[-1,-2,-3],[[54,[-1,-4,-2,-3]]],[],[5,6,3],[5,6,3],[55,3]],[[-1,-2,-3],[[56,[-1,-4,-3]]],[],[31,3],[5,6,3],[55,3]],[[-1,-2],-3,[],[5,6,3],[55,3]],[[-1,-2,-3],-4,[],[5,6,3],[5,6,3],[55,3]],[[-1,-2,-3],-4,[],[3,31],[5,6,3],[55,3]],[[-1,-2,-3],[],[],[5,6,3],[5,6,3]],[[-1,-2],23,[],[5,6,3]],[-1,[[2,[-3,-5]]],12,3,[41,3,[42,[-2]]],3,[41,3,[42,[-4]]]],[[-1,[16,[-2,15]],[16,[-3,15]]],2,57,3,3],[[-1,-2],[[58,[-1,-2]]],[],[5,6,3]],[-1,[[59,[-1]]],12],[[-1,9],[[60,[-1]]],[]],[[-1,9],[[61,[-1]]],[]],[[-1,-2],[],[],62],[[-1,-2],[[63,[-1]]],[],8],[[-1,-2],[[64,[-1]]],[],8]],"c":[],"p":[[8,"FnOnce",105],[15,"tuple"],[8,"Send",106],[15,"bool"],[8,"Fn",105],[8,"Sync",106],[3,"Chain",107],[8,"IntoParallelIterator",108],[15,"usize"],[3,"Chunks",109],[3,"Cloned",110],[8,"ParallelIterator",7],[4,"Ordering",111],[8,"FromParallelIterator",108],[3,"Global",112],[3,"Vec",113],[3,"Copied",114],[8,"Consumer",115],[8,"UnindexedConsumer",115],[3,"Enumerate",116],[3,"Filter",117],[3,"FilterMap",118],[4,"Option",119],[3,"FlatMap",120],[3,"FlatMapIter",121],[3,"Flatten",122],[3,"FlattenIter",123],[3,"Fold",124],[3,"FoldChunks",125],[3,"FoldChunksWith",126],[8,"Clone",127],[3,"FoldWith",124],[3,"Inspect",128],[3,"Interleave",129],[3,"InterleaveShortest",130],[3,"Intersperse",131],[3,"Map",132],[3,"MapInit",133],[3,"MapWith",133],[3,"PanicFuse",134],[8,"Default",135],[8,"ParallelExtend",108],[3,"Positions",136],[8,"Product",137],[3,"Rev",138],[3,"Skip",139],[3,"SkipAny",140],[3,"SkipAnyWhile",141],[3,"StepBy",142],[8,"Sum",137],[3,"Take",143],[3,"TakeAny",144],[3,"TakeAnyWhile",145],[3,"TryFold",146],[8,"Try",147],[3,"TryFoldWith",146],[8,"IndexedParallelIterator",7],[3,"Update",148],[3,"WhileSome",149],[3,"MaxLen",150],[3,"MinLen",150],[8,"ProducerCallback",115],[3,"Zip",151],[3,"ZipEq",152],[6,"Scope",1],[8,"MaybeIntoParallelIterator",7],[8,"MaybeIntoParallelRefMutIterator",7]]},\ "num_gens":{"doc":"This prints the number of generators in each $\\\\Ext^{s, n + …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"once":{"doc":"","t":"RRDDDDRLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLMLLLLMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["DATA_LAYOUT","MAX_OUTER_LENGTH","OnceBiVec","OnceVec","OooTracker","Page","USIZE_LEN","allocate","allocate_for","allocated","as_slice","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","data","data","deallocate","default","default","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","entry_ptr","eq","eq","equivalent","equivalent","extend","extend","fmt","fmt","from","from","from","from","from_bivec","from_vec","from_vec","get","get","get_mut","index","index","index","index_mut","index_mut","index_mut","init","init","init","init","inner_index","into","into","into","into","is_empty","is_empty","iter","iter","iter_enum","last","last","layout","len","len","len","lock","lock","max_degree","min_degree","min_degree","new","new","ooo","ooo_elements","ooo_elements","page","page_raw","par_extend","par_extend","par_iter_enum","ptr","push","push","push_checked","push_checked","push_ooo","push_ooo","range","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":[[0,"once"]],"d":["","The maximum length of a OnceVec is 2^{MAX_OUTER_LENGTH} - …","","A OnceVec is a push-only vector which is thread-safe. To …","This is a wrapper around our out-of-order push tracker. …","","","","Allocate enough space to fit new_max many elements in …","","Safety","","","","","","","","","","","","","","","","","Safety","","","","","","","","","","","","","","","","","Returns","","","","","Extend the OnceVec to up to index new_max, filling in the …","Extend the OnceBiVec to up to index new_max, filling in …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Creates a OnceVec from a Vec.","","","Returns whether the OnceBiVec has remaining out-of-order …","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Iterate through the OnceVec.","","","","","This always returns a layout of non-zero size.","All data up to length self.len() are guaranteed to be …","This returns the “length” of the bivector, defined to …","","Takes a lock on the OnceVec. The OnceVec cannot be updated …","Takes a lock on the OnceBiVec. The OnceBiVec cannot be …","This returns the largest degree in the bivector. This is …","","","","","BTreeSet of elements that have been added out of order. We …","Returns a list of out-of-order elements remaining.","","Obtain an immutable reference to the pageth page. This …","Returns","A parallel version of extend, where the function f is run …","A parallel version of extend, where the function f is run …","","","Append an element to the end of the vector.","","Push an element into the vector and check that it was …","","Append an element to an arbitrary position in the OnceVec.","See OnceVec::push_ooo.","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,3,1,1,1,3,7,8,1,3,7,8,3,7,8,3,7,8,3,8,1,1,3,7,1,3,7,8,1,3,7,8,1,3,3,7,8,3,3,8,3,8,3,8,3,8,1,3,7,8,8,3,8,3,8,3,3,3,8,3,3,8,1,3,7,8,0,1,3,7,8,3,8,3,8,8,3,8,1,3,8,3,3,8,8,8,8,3,8,3,3,8,3,3,3,8,8,1,3,8,3,8,3,8,8,3,7,8,1,3,7,8,1,3,7,8,1,3,7,8],"f":[0,0,0,0,0,0,0,[[1,2]],[[3,2]],[1,4],[[1,2,2],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[3,[6]]],[[3,[6]]]],[7,7],[[[8,[6]]],[[8,[6]]]],[[]],[[]],[[]],0,0,[[1,2,2]],[[],1],[[],3],[[],7],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[3],[2],[2],[[3,2]],[[[3,[9]],[3,[9]]],4],[[[8,[9]],[8,[9]]],4],[[],4],[[],4],[[3,2,10]],[[8,11,10]],[[[3,[12]],13],14],[[[8,[12]],13],14],[[]],[[]],[[]],[[]],[15,8],[16,3],[[11,16],8],[[3,2],17],[[8,11],17],[[3,2],17],[[3,2]],[[3,18]],[[8,11]],[[3,2]],[[3,18]],[[8,11]],[[],2],[[],2],[[],2],[[],2],[2],[[]],[[]],[[]],[[]],[3,4],[8,4],[3,19],[8,19],[8,19],[3,17],[8,17],[2,20],[3,2],[8,11],0,[3,[[21,[7]]]],[8,[[21,[7]]]],[8,11],[8,11],0,[[],3],[11,8],0,[3,[[16,[2]]]],[8,[[16,[11]]]],[[3,2],1],[[3,2],1],[[[3,[[0,[22,23]]]],2,[0,[24,22,23]]]],[[[8,[[0,[22,23]]]],11,[0,[24,22,23]]]],[[[8,[[0,[22,23]]]]],[[0,[25,26]]]],[1],[3,2],[8,11],[[3,2]],[[8,11]],[[3,2],[[27,[2]]]],[[8,11],[[27,[11]]]],[8,[[27,[11]]]],[[]],[[]],[[]],[[],28],[[],28],[[],28],[[],28],[[],28],[[],28],[[],28],[[],28],[[],29],[[],29],[[],29],[[],29]],"c":[],"p":[[3,"Page"],[15,"usize"],[3,"OnceVec"],[15,"bool"],[15,"slice"],[8,"Clone"],[3,"OooTracker"],[3,"OnceBiVec"],[8,"PartialEq"],[8,"FnMut"],[15,"i32"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[3,"BiVec"],[3,"Vec"],[4,"Option"],[15,"u32"],[8,"Iterator"],[3,"Layout"],[3,"MutexGuard"],[8,"Send"],[8,"Sync"],[8,"Fn"],[8,"ParallelIterator"],[8,"IndexedParallelIterator"],[3,"Range"],[4,"Result"],[3,"TypeId"]]},\ -"query":{"doc":"This library gives various functions that are used to …","t":"RFFFFF","n":["ARGV","optional","raw","vector","with_default","yes_no"],"q":[[0,"query"]],"d":["","","","","",""],"i":[0,0,0,0,0,0],"f":[0,[[1,2],3],[[1,2]],[[1,4],[[6,[5]]]],[[1,1,2]],[1,7]],"c":[],"p":[[15,"str"],[8,"FnMut"],[4,"Option"],[15,"usize"],[15,"u32"],[3,"Vec"],[15,"bool"]]},\ +"once":{"doc":"","t":"RRDDDDRLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLMLLLLLLLMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["DATA_LAYOUT","MAX_OUTER_LENGTH","OnceBiVec","OnceVec","OooTracker","Page","USIZE_LEN","allocate","allocate_for","allocated","as_slice","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","data","data","deallocate","default","default","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","entry_ptr","eq","eq","equivalent","equivalent","extend","extend","fmt","fmt","from","from","from","from","from_bivec","from_vec","from_vec","get","get","get_mut","index","index","index","index_mut","index_mut","index_mut","init","init","init","init","inner_index","into","into","into","into","is_empty","is_empty","iter","iter","iter_enum","last","last","layout","len","len","len","lock","lock","max_degree","maybe_par_extend","maybe_par_extend","maybe_par_iter_enum","min_degree","min_degree","new","new","ooo","ooo_elements","ooo_elements","page","page_raw","ptr","push","push","push_checked","push_checked","push_ooo","push_ooo","range","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":[[0,"once"],[127,"core::clone"],[128,"core::cmp"],[129,"core::ops::function"],[130,"core::fmt"],[131,"core::fmt"],[132,"alloc::vec"],[133,"core::option"],[134,"core::iter::traits::iterator"],[135,"core::alloc::layout"],[136,"std::sync::mutex"],[137,"core::marker"],[138,"core::marker"],[139,"maybe_rayon::concurrent::prelude"],[140,"core::result"],[141,"core::any"]],"d":["","The maximum length of a OnceVec is 2^{MAX_OUTER_LENGTH} - …","","A OnceVec is a push-only vector which is thread-safe. To …","This is a wrapper around our out-of-order push tracker. …","","","","Allocate enough space to fit new_max many elements in …","","Safety","","","","","","","","","","","","","","","","","Safety","","","","","","","","","","","","","","","","","Returns","","","","","Extend the OnceVec to up to index new_max, filling in the …","Extend the OnceBiVec to up to index new_max, filling in …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Creates a OnceVec from a Vec.","","","Returns whether the OnceBiVec has remaining out-of-order …","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Iterate through the OnceVec.","","","","","This always returns a layout of non-zero size.","All data up to length self.len() are guaranteed to be …","This returns the “length” of the bivector, defined to …","","Takes a lock on the OnceVec. The OnceVec cannot be updated …","Takes a lock on the OnceBiVec. The OnceBiVec cannot be …","This returns the largest degree in the bivector. This is …","A parallel version of extend. If the concurrent feature is …","A parallel version of extend. If the concurrent feature is …","","","","","","BTreeSet of elements that have been added out of order. We …","Returns a list of out-of-order elements remaining.","","Obtain an immutable reference to the pageth page. This …","Returns","","Append an element to the end of the vector.","","Push an element into the vector and check that it was …","","Append an element to an arbitrary position in the OnceVec.","See OnceVec::push_ooo.","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,4,1,1,1,4,8,9,1,4,8,9,4,8,9,4,8,9,4,9,1,1,4,8,1,4,8,9,1,4,8,9,1,4,4,8,9,4,4,9,4,9,4,9,4,9,1,4,8,9,9,4,9,4,9,4,4,4,9,4,4,9,1,4,8,9,0,1,4,8,9,4,9,4,9,9,4,9,1,4,9,4,4,9,9,4,9,9,9,9,4,9,4,4,9,4,4,1,4,9,4,9,4,9,9,4,8,9,1,4,8,9,1,4,8,9,1,4,8,9],"f":[0,0,0,0,0,0,0,[[[1,[-1]],2],3,[]],[[[4,[-1]],2],3,[]],[[[1,[-1]]],5,[]],[[[1,[-1]],2,2],[[6,[-1]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[4,[-1]]],[[4,[-1]]],7],[8,8],[[[9,[-1]]],[[9,[-1]]],7],[[-1,-2],3,[],[]],[[-1,-2],3,[],[]],[[-1,-2],3,[],[]],0,0,[[[1,[-1]],2,2],3,[]],[[],[[1,[-1]]],[]],[[],[[4,[-1]]],[]],[[],8],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,-1,[]],[2,3],[2,3],[[[4,[-1]]],3,[]],[2,3],[2,3],[[[4,[-1]],2],[],[]],[[[4,[-1]],[4,[-1]]],5,10],[[[9,[-1]],[9,[-1]]],5,10],[[-1,-2],5,[],[]],[[-1,-2],5,[],[]],[[[4,[-1]],2,-2],3,[],11],[[[9,[-1]],12,-2],3,[],11],[[[4,[-1]],13],14,15],[[[9,[-1]],13],14,15],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[16,[-1]]],[[9,[-1]]],[]],[[[17,[-1]]],[[4,[-1]]],[]],[[12,[17,[-1]]],[[9,[-1]]],[]],[[[4,[-1]],2],[[18,[-1]]],[]],[[[9,[-1]],12],[[18,[-1]]],[]],[[[4,[-1]],2],[[18,[-1]]],[]],[[[4,[-1]],2],-1,[]],[[[4,[-1]],19],-1,[]],[[[9,[-1]],12],-1,[]],[[[4,[-1]],19],-1,[]],[[[4,[-1]],2],-1,[]],[[[9,[-1]],12],-1,[]],[[],2],[[],2],[[],2],[[],2],[2,[[3,[2,2]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[4,[-1]]],5,[]],[[[9,[-1]]],5,[]],[[[4,[-1]]],[[0,[20]]],[]],[[[9,[-1]]],[[0,[20]]],[]],[[[9,[-1]]],[[0,[20]]],[]],[[[4,[-1]]],[[18,[-1]]],[]],[[[9,[-1]]],[[18,[-1]]],[]],[2,21],[[[4,[-1]]],2,[]],[[[9,[-1]]],12,[]],0,[[[4,[-1]]],[[22,[8]]],[]],[[[9,[-1]]],[[22,[8]]],[]],[[[9,[-1]]],12,[]],[[[4,[-1]],2,-2],3,[23,24],[25,23,24]],[[[9,[-1]],12,-2],3,[23,24],[25,23,24]],[[[9,[-1]]],[[0,[26,27]]],[23,24]],[[[9,[-1]]],12,[]],0,[[],[[4,[-1]]],[]],[12,[[9,[-1]]],[]],0,[[[4,[-1]]],[[17,[2]]],[]],[[[9,[-1]]],[[17,[12]]],[]],[[[4,[-1]],2],[[1,[-1]]],[]],[[[4,[-1]],2],1,[]],[[[1,[-1]]],[],[]],[[[4,[-1]],-1],2,[]],[[[9,[-1]],-1],12,[]],[[[4,[-1]],-1,2],3,[]],[[[9,[-1]],-1,12],3,[]],[[[4,[-1]],-1,2],[[28,[2]]],[]],[[[9,[-1]],-1,12],[[28,[12]]],[]],[[[9,[-1]]],[[28,[12]]],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,[[29,[-2]]],[],[]],[-1,30,[]],[-1,30,[]],[-1,30,[]],[-1,30,[]]],"c":[],"p":[[3,"Page",0],[15,"usize"],[15,"tuple"],[3,"OnceVec",0],[15,"bool"],[15,"slice"],[8,"Clone",127],[3,"OooTracker",0],[3,"OnceBiVec",0],[8,"PartialEq",128],[8,"FnMut",129],[15,"i32"],[3,"Formatter",130],[6,"Result",130],[8,"Debug",130],[3,"BiVec",131],[3,"Vec",132],[4,"Option",133],[15,"u32"],[8,"Iterator",134],[3,"Layout",135],[3,"MutexGuard",136],[8,"Send",137],[8,"Sync",137],[8,"Fn",129],[8,"MaybeParallelIterator",138],[8,"MaybeIndexedParallelIterator",138],[3,"Range",139],[4,"Result",140],[3,"TypeId",141]]},\ +"query":{"doc":"This library gives various functions that are used to …","t":"RFFFFF","n":["ARGV","optional","raw","vector","with_default","yes_no"],"q":[[0,"query"],[6,"core::option"],[7,"core::ops::function"],[8,"alloc::vec"]],"d":["","","","","",""],"i":[0,0,0,0,0,0],"f":[0,[[1,-1],[[2,[-2]]],3,[]],[[1,-1],-2,3,[]],[[1,4],[[6,[5]]]],[[1,1,-1],-2,3,[]],[1,7]],"c":[],"p":[[15,"str"],[4,"Option",6],[8,"FnMut",7],[15,"usize"],[15,"u32"],[3,"Vec",8],[15,"bool"]]},\ "resolution_size":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "resolve":{"doc":"Resolves a module up to a fixed $(s, t)$ and prints an …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "resolve_through_stem":{"doc":"Resolves a module up to an $(n, s)$ and prints an ASCII …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ @@ -26,7 +27,7 @@ var searchIndex = JSON.parse('{\ "secondary_massey":{"doc":"Computes massey products in $\\\\Mod_{C\\\\tau^2}$.","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "secondary_product":{"doc":"Computes products in $\\\\Mod_{C\\\\tau^2}$.","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "sq0":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ -"sseq":{"doc":"","t":"DDDSDDIAMAAKMMMMMMMMMMMMKMKMAMMMDLLLLLLMLLLLLLLLLMLLLLLLCCCCAAAFADLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLLDLLLLLMLLLLLLLLLLLLLLLLLLLLMDLLLLLLMLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLDMLLLLLLLLLLLLLMLMLLLLDLLLLLLMLMLLLLLMLLLLLMMLLLDSDDILLLLLLLLLMLLLLLLLLLKLLMLLLLLLLLLLLLLLLLLLMMLMLLLLLLMLMLMKLMKLLLLLLLLLLLLLLLMM","n":["Adams","DenseBigradedModule","Differential","MIN_R","Product","Sseq","SseqProfile","bigraded","classes","coordinates","differential","differential_length","differentials","dimensions","error","first_empty_row","invalid","left","matrices","matrix","min_y","p","page_data","permanent_classes","profile","profile","profile_inverse","source_dim","sseq","target_dim","x","y","DenseBigradedModule","borrow","borrow_mut","defined","deref","deref_mut","dimension","dimensions","drop","from","get_dimension","init","into","max_x","max_y","min_x","min_y","min_y","new","range","set_dimension","try_from","try_into","type_id","Bidegree","BidegreeElement","BidegreeGenerator","BidegreeRange","bidegree","element","generator","iter_s_t","range","Bidegree","add","borrow","borrow_mut","clone","clone_into","default","deref","deref_mut","deserialize","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","get_hash","hash","init","into","massey_bidegree","n","n_s","s","s","s_t","serialize","sub","t","t","t_s","to_owned","to_string","try_from","try_into","try_subtract","type_id","zero","BidegreeElement","borrow","borrow_mut","clone","clone_into","degree","degree","deref","deref_mut","drop","fmt","fmt","from","init","into","n","new","s","t","to_basis_string","to_owned","to_string","to_string_module","try_from","try_into","type_id","vec","vec","BidegreeGenerator","borrow","borrow_mut","clone","clone_into","default","degree","degree","deref","deref_mut","deserialize","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","from","get_hash","hash","idx","idx","init","into","n","n_s","new","s","s_t","serialize","t","to_owned","to_string","try_from","try_from","try_into","type_id","BidegreeRange","aux","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","from","init","into","new","restrict","s","s","t","t","to_owned","try_from","try_into","type_id","Differential","add","borrow","borrow_mut","deref","deref_mut","drop","error","evaluate","first_empty_row","from","get_source_target_pairs","inconsistent","init","into","matrix","new","prime","quasi_inverse","reduce_target","set_to_zero","source_dim","target_dim","try_from","try_into","type_id","Adams","MIN_R","Product","Sseq","SseqProfile","add_differential","add_permanent_class","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","classes","classes","clear","complete","defined","deref","deref","deref","deref_mut","deref_mut","deref_mut","differential_length","differential_length","differentials","differentials","differentials_hitting","dimension","drop","drop","drop","extend_differential","extend_page_data","from","from","from","inconsistent","init","init","init","into","into","into","invalid","invalid","left","leibniz","matrices","max_x","max_y","min_x","min_y","multiply","new","p","page_data","page_data","permanent_classes","permanent_classes","profile","profile","profile","profile_inverse","profile_inverse","range","set_dimension","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update_bidegree","write_to_graph","x","y"],"q":[[0,"sseq"],[32,"sseq::bigraded"],[56,"sseq::coordinates"],[65,"sseq::coordinates::bidegree"],[105,"sseq::coordinates::element"],[133,"sseq::coordinates::generator"],[172,"sseq::coordinates::range"],[194,"sseq::differential"],[220,"sseq::sseq"]],"d":["","","","","","","The direction of the differentials","","The first page of the spectral sequence","","","","x -> y -> r -> differential","","","","x -> y -> validity. A bidegree is invalid if the page_data …","Whether the product acts on the left or not. This affects …","","","","","x -> y -> r -> E_r^{x, y} as a subquotient of the original …","x -> y -> permanent_classes","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","The dimension in a bidegree, None if not yet defined","","Calls U::from(self).","","","","","","","","This can only be set when bidegrees to the left and bottom …","","","","","","","","","","","Given a function f(s, t), compute it for every s in …","","Type synonym for (s, t) bidegrees.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","Computes the bidegree containing the Massey product of …","","","","Homological degree","","","","","Internal degree","","","","","","Returns difference as a bidegree if the difference in …","","","An element of a bigraded vector space. Most commonly used …","","","","","","Bidegree of the element","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","Get the string representation of the element as a linear …","","","An algebra-aware string representation. This assumes that …","","","","","Representing vector","A basis element of a bigraded vector space. Most commonly …","","","","","","","Bidegree of the element","","","","","","","","","","","Returns the argument unchanged.","","","","","Position in the canonical basis for this bidegree","","Calls U::from(self).","","","","","","","","","","","","","","A range of bidegrees, corresponding to all s up to a given …","Auxillary data that t may depend on.","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","The maximal value of s in the range.","","The function that gives, for a given value of s, the …","","","","","","Add a differential","","","","","","","This evaluates the differential on source, adding the …","","Returns the argument unchanged.","An iterator of differentials in the form (source, target)","Whether the current set of differentials is inconsistent. …","","Calls U::from(self).","","","","Find the differential that hits value, and write the …","Given a subspace of the target space, project the target …","","","","","","","","","","","The direction of the differentials","Add a $d_r$ differential from bidegree $(x, y)$, with the …","Returns","","","","","","","","The first page of the spectral sequence","","Whether the calcuations at bidegree (x, y) are complete. …","","","","","","","","","","","x -> y -> r -> differential","","","","","","Ensure self.differentials[x][y][r] is defined. Must call …","Ensure self.page_data[x][y][r] is defined","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Whether there is an inconsistent differential involving …","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","x -> y -> validity. A bidegree is invalid if the page_data …","Whether the product acts on the left or not. This affects …","Apply the Leibniz rule to obtain new differentials. The …","","","","","","Compute the product between product and the class class at …","","","","x -> y -> r -> E_r^{x, y} as a subquotient of the original …","","x -> y -> permanent_classes","","","","","","","","","","","","","","","","","","This returns the vec of differentials to draw on each page.","This shifts the sseq horizontally so that the minimum x is …","",""],"i":[0,0,0,35,0,0,0,0,36,0,0,35,36,2,30,30,36,40,40,30,2,36,36,36,35,36,35,30,0,30,40,40,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0,35,0,0,0,36,36,45,40,36,45,40,36,36,36,36,36,36,45,40,36,45,40,36,35,45,36,36,36,36,45,40,36,36,36,45,40,36,36,45,40,36,45,40,36,36,36,40,36,40,36,36,36,36,36,36,36,36,36,36,36,35,45,36,35,45,36,36,45,40,36,45,40,36,45,40,36,36,36,36,40,40],"f":[0,0,0,0,0,0,0,0,0,0,0,[[1,1],1],0,0,0,0,0,0,0,0,0,0,0,0,[[1,1,1]],0,[[1,1,1]],0,0,0,0,0,0,[[]],[[]],[[2,1,1],3],[4],[4],[[2,1,1],4],0,[4],[[]],[[2,1,1],[[5,[4]]]],[[],4],[[]],[2,1],[2,1],[2,1],[2,1],0,[[1,1],2],[[2,1],[[6,[1]]]],[[2,1,1,4]],[[],7],[[],7],[[],8],0,0,0,0,0,0,0,[[[0,[9,10]],11,[12,[10]]]],0,0,[[11,11],11],[[]],[[]],[11,11],[[]],[[],11],[4],[4],[13,[[7,[11]]]],[4],[[11,11],3],[[],3],[[],3],[[],3],[[11,14],15],[[11,14],15],[[]],[[[0,[16,17]],18],19],[[11,20]],[[],4],[[]],[[11,11,11],11],[11,1],[[1,21],11],[11,21],0,[[21,1],11],[[11,22],7],[[11,11],11],[11,1],0,[[1,21],11],[[]],[[],23],[[],7],[[],7],[[11,11],[[5,[11]]]],[[],8],[[],11],0,[[]],[[]],[24,24],[[]],[24,11],0,[4],[4],[4],[[24,14],15],[[24,14],15],[[]],[[],4],[[]],[24,1],[[11,25],24],[24,21],[24,1],[24,23],[[]],[[],23],[[24,[27,[26]],3],23],[[],7],[[],7],[[],8],[24,25],0,0,[[]],[[]],[28,28],[[]],[[],28],[28,11],0,[4],[4],[13,[[7,[28]]]],[4],[[28,28],3],[[],3],[[],3],[[],3],[[28,14],15],[[28,14],15],[[]],[[],28],[[[0,[16,17]],18],19],[[28,20]],[28,4],0,[[],4],[[]],[28,1],[[1,21,4],28],[[[29,[11]],4],28],[28,21],[[21,1,4],28],[[28,22],7],[28,1],[[]],[[],23],[[],7],[24,[[7,[28]]]],[[],7],[[],8],0,0,[[]],[[]],[12,12],[[]],[4],[4],[4],[[]],[[],4],[[]],[[21,9],12],[[12,21],12],[12,21],0,[[12,21],1],0,[[]],[[],7],[[],7],[[],8],0,[[30,25,[5,[25]]],3],[[]],[[]],[4],[4],[4],0,[[30,25,31]],0,[[]],[30,32],[30,3],[[],4],[[]],0,[[33,4,4],30],[30,33],[[30,31,25]],[[30,34]],[30],0,0,[[],7],[[],7],[[],8],0,0,0,0,0,[[[36,[35]],1,1,1,25,25],3],[[[36,[35]],1,1,25],3],[[]],[[]],[[]],[[]],[[]],[[]],[[[36,[35]]],[[37,[2]]]],0,[[[36,[35]]]],[[[36,[35]],1,1],3],[[[36,[35]],1,1],3],[4],[4],[4],[4],[4],[4],[[1,1],1],[[1,1],1],[[[36,[35]],1,1],[[38,[30]]]],0,[[[36,[35]],1,1],39],[[[36,[35]],1,1],4],[4],[4],[4],[[[36,[35]],1,1,1]],[[[36,[35]],1,1,1]],[[]],[[]],[[]],[[[36,[35]],1,1],3],[[],4],[[],4],[[],4],[[]],[[]],[[]],[[[36,[35]],1,1],3],0,0,[[[36,[35]],1,1,1,25,40,[5,[40]]],5],0,[[[36,[35]]],1],[[[36,[35]]],1],[[[36,[35]]],1],[[[36,[35]]],1],[[[36,[35]],1,1,25,40],5],[[33,1,1],[[36,[35]]]],0,[[[36,[35]],1,1],[[38,[41]]]],0,[[[36,[35]],1,1],34],0,[[1,1,1]],[[1,1,1]],0,[[1,1,1]],[[1,1,1]],[[[36,[35]],1],[[6,[1]]]],[[[36,[35]],1,1,4]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],8],[[],8],[[],8],[[[36,[35]]]],[[[36,[35]],1,1],[[38,[[32,[[32,[21]]]]]]]],[[[36,[35]],42,1,3,[0,[39,43]],44],7],0,0],"c":[],"p":[[15,"i32"],[3,"DenseBigradedModule"],[15,"bool"],[15,"usize"],[4,"Option"],[3,"Range"],[4,"Result"],[3,"TypeId"],[8,"Fn"],[8,"Sync"],[3,"Bidegree"],[3,"BidegreeRange"],[8,"Deserializer"],[3,"Formatter"],[6,"Result"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[8,"Hasher"],[15,"u32"],[8,"Serializer"],[3,"String"],[3,"BidegreeElement"],[4,"Slice"],[8,"MuAlgebra"],[3,"MuFreeModule"],[3,"BidegreeGenerator"],[8,"Into"],[3,"Differential"],[4,"SliceMut"],[3,"Vec"],[3,"ValidPrime"],[3,"Subspace"],[8,"SseqProfile"],[3,"Sseq"],[3,"Arc"],[3,"BiVec"],[8,"Iterator"],[3,"Product"],[3,"Subquotient"],[8,"Backend"],[8,"Clone"],[8,"FnOnce"],[3,"Adams"]]},\ +"sseq":{"doc":"","t":"DDDSDDIAMAAKMMMMMMMMMMMMKMKMAMMMDLLLLLLMLLLLLLLLLMLLLLLLCCCCAAAFADLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLLDLLLLLMLLLLLLLLLLLLLLLLLLLLMDLLLLLLMLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLDMLLLLLLLLLLLLLMLMLLLLDLLLLLLMLMLLLLLMLLLLLMMLLLDSDDILLLLLLLLLMLLLLLLLLLKLLMLLLLLLLLLLLLLLLLLLMMLMLLLLLLMLMLMKLMKLLLLLLLLLLLLLLLMM","n":["Adams","DenseBigradedModule","Differential","MIN_R","Product","Sseq","SseqProfile","bigraded","classes","coordinates","differential","differential_length","differentials","dimensions","error","first_empty_row","invalid","left","matrices","matrix","min_y","p","page_data","permanent_classes","profile","profile","profile_inverse","source_dim","sseq","target_dim","x","y","DenseBigradedModule","borrow","borrow_mut","defined","deref","deref_mut","dimension","dimensions","drop","from","get_dimension","init","into","max_x","max_y","min_x","min_y","min_y","new","range","set_dimension","try_from","try_into","type_id","Bidegree","BidegreeElement","BidegreeGenerator","BidegreeRange","bidegree","element","generator","iter_s_t","range","Bidegree","add","borrow","borrow_mut","clone","clone_into","default","deref","deref_mut","deserialize","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","get_hash","hash","init","into","massey_bidegree","n","n_s","s","s","s_t","serialize","sub","t","t","t_s","to_owned","to_string","try_from","try_into","try_subtract","type_id","zero","BidegreeElement","borrow","borrow_mut","clone","clone_into","degree","degree","deref","deref_mut","drop","fmt","fmt","from","init","into","n","new","s","t","to_basis_string","to_owned","to_string","to_string_module","try_from","try_into","type_id","vec","vec","BidegreeGenerator","borrow","borrow_mut","clone","clone_into","default","degree","degree","deref","deref_mut","deserialize","drop","eq","equivalent","equivalent","equivalent","fmt","fmt","from","from","get_hash","hash","idx","idx","init","into","n","n_s","new","s","s_t","serialize","t","to_owned","to_string","try_from","try_from","try_into","type_id","BidegreeRange","aux","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","from","init","into","new","restrict","s","s","t","t","to_owned","try_from","try_into","type_id","Differential","add","borrow","borrow_mut","deref","deref_mut","drop","error","evaluate","first_empty_row","from","get_source_target_pairs","inconsistent","init","into","matrix","new","prime","quasi_inverse","reduce_target","set_to_zero","source_dim","target_dim","try_from","try_into","type_id","Adams","MIN_R","Product","Sseq","SseqProfile","add_differential","add_permanent_class","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","classes","classes","clear","complete","defined","deref","deref","deref","deref_mut","deref_mut","deref_mut","differential_length","differential_length","differentials","differentials","differentials_hitting","dimension","drop","drop","drop","extend_differential","extend_page_data","from","from","from","inconsistent","init","init","init","into","into","into","invalid","invalid","left","leibniz","matrices","max_x","max_y","min_x","min_y","multiply","new","p","page_data","page_data","permanent_classes","permanent_classes","profile","profile","profile","profile_inverse","profile_inverse","range","set_dimension","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update_bidegree","write_to_graph","x","y"],"q":[[0,"sseq"],[32,"sseq::bigraded"],[56,"sseq::coordinates"],[65,"sseq::coordinates::bidegree"],[105,"sseq::coordinates::element"],[133,"sseq::coordinates::generator"],[172,"sseq::coordinates::range"],[194,"sseq::differential"],[220,"sseq::sseq"],[302,"core::option"],[303,"core::ops::range"],[304,"core::result"],[305,"core::any"],[306,"core::ops::function"],[307,"core::marker"],[308,"serde::de"],[309,"core::fmt"],[310,"core::fmt"],[311,"core::marker"],[312,"alloc::string"],[313,"fp::vector::vector_generic"],[314,"algebra::module::free_module"],[315,"algebra::algebra::algebra_trait"],[316,"core::convert"],[317,"fp::vector::vector_generic"],[318,"fp::prime"],[319,"fp::matrix::subspace"],[320,"alloc::sync"],[321,"bivec"],[322,"core::iter::traits::iterator"],[323,"fp::matrix::subquotient"],[324,"chart"],[325,"core::clone"],[326,"core::ops::function"]],"d":["","","","","","","The direction of the differentials","","The first page of the spectral sequence","","","","x -> y -> r -> differential","","","","x -> y -> validity. A bidegree is invalid if the page_data …","Whether the product acts on the left or not. This affects …","","","","","x -> y -> r -> E_r^{x, y} as a subquotient of the original …","x -> y -> permanent_classes","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","The dimension in a bidegree, None if not yet defined","","Calls U::from(self).","","","","","","","","This can only be set when bidegrees to the left and bottom …","","","","","","","","","","","Given a function f(s, t), compute it for every s in …","","Type synonym for (s, t) bidegrees.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","Computes the bidegree containing the Massey product of …","","","","Homological degree","","","","","Internal degree","","","","","","Returns difference as a bidegree if the difference in …","","","An element of a bigraded vector space. Most commonly used …","","","","","","Bidegree of the element","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","Get the string representation of the element as a linear …","","","An algebra-aware string representation. This assumes that …","","","","","Representing vector","A basis element of a bigraded vector space. Most commonly …","","","","","","","Bidegree of the element","","","","","","","","","","","","Returns the argument unchanged.","","","","Position in the canonical basis for this bidegree","","Calls U::from(self).","","","","","","","","","","","","","","A range of bidegrees, corresponding to all s up to a given …","Auxillary data that t may depend on.","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","The maximal value of s in the range.","","The function that gives, for a given value of s, the …","","","","","","Add a differential","","","","","","","This evaluates the differential on source, adding the …","","Returns the argument unchanged.","An iterator of differentials in the form (source, target)","Whether the current set of differentials is inconsistent. …","","Calls U::from(self).","","","","Find the differential that hits value, and write the …","Given a subspace of the target space, project the target …","","","","","","","","","","","The direction of the differentials","Add a $d_r$ differential from bidegree $(x, y)$, with the …","Returns","","","","","","","","The first page of the spectral sequence","","Whether the calcuations at bidegree (x, y) are complete. …","","","","","","","","","","","x -> y -> r -> differential","","","","","","Ensure self.differentials[x][y][r] is defined. Must call …","Ensure self.page_data[x][y][r] is defined","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Whether there is an inconsistent differential involving …","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","x -> y -> validity. A bidegree is invalid if the page_data …","Whether the product acts on the left or not. This affects …","Apply the Leibniz rule to obtain new differentials. The …","","","","","","Compute the product between product and the class class at …","","","","x -> y -> r -> E_r^{x, y} as a subquotient of the original …","","x -> y -> permanent_classes","","","","","","","","","","","","","","","","","","This returns the vec of differentials to draw on each page.","This shifts the sseq horizontally so that the minimum x is …","",""],"i":[0,0,0,38,0,0,0,0,37,0,0,38,37,3,31,31,37,42,42,31,3,37,37,37,38,37,38,31,0,31,42,42,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,0,38,0,0,0,37,37,47,42,37,47,42,37,37,37,37,37,37,47,42,37,47,42,37,38,47,37,37,37,37,47,42,37,37,37,47,42,37,37,47,42,37,47,42,37,37,37,42,37,42,37,37,37,37,37,37,37,37,37,37,37,38,47,37,38,47,37,37,47,42,37,47,42,37,47,42,37,37,37,37,42,42],"f":[0,0,0,0,0,0,0,0,0,0,0,[[1,1],1],0,0,0,0,0,0,0,0,0,0,0,0,[[1,1,1],[[2,[1,1]]]],0,[[1,1,1],[[2,[1,1]]]],0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[3,1,1],4],[5,-1,[]],[5,-1,[]],[[3,1,1],5],0,[5,2],[-1,-1,[]],[[3,1,1],[[6,[5]]]],[[],5],[-1,-2,[],[]],[3,1],[3,1],[3,1],[3,1],0,[[1,1],3],[[3,1],[[7,[1]]]],[[3,1,1,5],2],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],0,0,0,0,0,0,0,[[-1,10,[11,[-2]]],2,[12,13],13],0,0,[[10,10],10],[-1,-2,[],[]],[-1,-2,[],[]],[10,10],[[-1,-2],2,[],[]],[[],10],[5,-1,[]],[5,-1,[]],[-1,[[8,[10]]],14],[5,2],[[10,10],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[10,15],16],[[10,15],16],[-1,-1,[]],[[-1,-2],17,[18,19],20],[[10,-1],2,21],[[],5],[-1,-2,[],[]],[[10,10,10],10],[10,1],[[1,22],10],[10,22],0,[[22,1],10],[[10,-1],8,23],[[10,10],10],[10,1],0,[[1,22],10],[-1,-2,[],[]],[-1,24,[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[[10,10],[[6,[10]]]],[-1,9,[]],[[],10],0,[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[[-1,-2],2,[],[]],[25,10],0,[5,-1,[]],[5,-1,[]],[5,2],[[25,15],16],[[25,15],16],[-1,-1,[]],[[],5],[-1,-2,[],[]],[25,1],[[10,26],25],[25,22],[25,1],[25,24],[-1,-2,[],[]],[-1,24,[]],[[25,[27,[-1]],4],24,28],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],[25,26],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[29,29],[[-1,-2],2,[],[]],[[],29],[29,10],0,[5,-1,[]],[5,-1,[]],[-1,[[8,[29]]],14],[5,2],[[29,29],4],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[-1,-2],4,[],[]],[[29,15],16],[[29,15],16],[[[2,[10,5]]],29],[-1,-1,[]],[[-1,-2],17,[18,19],20],[[29,-1],2,21],[29,5],0,[[],5],[-1,-2,[],[]],[29,1],[[1,22,5],29],[[-1,5],29,[[30,[10]]]],[29,22],[[22,1,5],29],[[29,-1],8,23],[29,1],[-1,-2,[],[]],[-1,24,[]],[-1,[[8,[-2]]],[],[]],[25,[[8,[29]]]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],0,0,[-1,-2,[],[]],[-1,-2,[],[]],[[[11,[-1]]],[[11,[-1]]],[]],[[-1,-2],2,[],[]],[5,-1,[]],[5,-1,[]],[5,2],[-1,-1,[]],[[],5],[-1,-2,[],[]],[[-1,22,12],[[11,[-1]]],[]],[[[11,[-1]],22],[[11,[-1]]],[]],[[[11,[-1]]],22,[]],0,[[[11,[-1]],22],1,[]],0,[-1,-2,[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],0,[[31,26,[6,[26]]],4],[-1,-2,[],[]],[-1,-2,[],[]],[5,-1,[]],[5,-1,[]],[5,2],0,[[31,26,32],2],0,[-1,-1,[]],[31,[[34,[[2,[33,33]]]]]],[31,4],[[],5],[-1,-2,[],[]],0,[[35,5,5],31],[31,35],[[31,32,26],2],[[31,36],2],[31,2],0,0,[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],0,0,0,0,0,[[[37,[-1]],1,1,1,26,26],4,38],[[[37,[-1]],1,1,26],4,38],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1]]],[[39,[3]]],38],0,[[[37,[-1]]],2,38],[[[37,[-1]],1,1],4,38],[[[37,[-1]],1,1],4,38],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[[1,1],1],[[1,1],1],[[[37,[-1]],1,1],[[40,[31]]],38],0,[[[37,[-1]],1,1],[[0,[41]]],38],[[[37,[-1]],1,1],5,38],[5,2],[5,2],[5,2],[[[37,[-1]],1,1,1],2,38],[[[37,[-1]],1,1,1],2,38],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[[37,[-1]],1,1],4,38],[[],5],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[[37,[-1]],1,1],4,38],0,0,[[[37,[-1]],1,1,1,26,42,[6,[42]]],[[6,[[2,[1,1,1,33]]]]],38],0,[[[37,[-1]]],1,38],[[[37,[-1]]],1,38],[[[37,[-1]]],1,38],[[[37,[-1]]],1,38],[[[37,[-1]],1,1,26,42],[[6,[[2,[1,1,33]]]]],38],[[35,1,1],[[37,[-1]]],38],0,[[[37,[-1]],1,1],[[40,[43]]],38],0,[[[37,[-1]],1,1],36,38],0,[[1,1,1],[[2,[1,1]]]],[[1,1,1],[[2,[1,1]]]],0,[[1,1,1],[[2,[1,1]]]],[[1,1,1],[[2,[1,1]]]],[[[37,[-1]],1],[[7,[1]]],38],[[[37,[-1]],1,1,5],2,38],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,[[8,[-2]]],[],[]],[-1,9,[]],[-1,9,[]],[-1,9,[]],[[[37,[-1]]],2,38],[[[37,[-1]],1,1],[[40,[[34,[[34,[22]]]]]]],38],[[[37,[-1]],-2,1,4,-3,-4],[[8,[2]]],38,44,[41,45],46],0,0],"c":[],"p":[[15,"i32"],[15,"tuple"],[3,"DenseBigradedModule",32],[15,"bool"],[15,"usize"],[4,"Option",302],[3,"Range",303],[4,"Result",304],[3,"TypeId",305],[3,"Bidegree",65],[3,"BidegreeRange",172],[8,"Fn",306],[8,"Sync",307],[8,"Deserializer",308],[3,"Formatter",309],[6,"Result",309],[15,"u64"],[8,"Hash",310],[8,"Sized",307],[8,"BuildHasher",310],[8,"Hasher",310],[15,"u32"],[8,"Serializer",311],[3,"String",312],[3,"BidegreeElement",105],[4,"Slice",313],[3,"MuFreeModule",314],[8,"MuAlgebra",315],[3,"BidegreeGenerator",133],[8,"Into",316],[3,"Differential",194],[4,"SliceMut",313],[4,"FpVector",313],[3,"Vec",317],[3,"ValidPrime",318],[3,"Subspace",319],[3,"Sseq",220],[8,"SseqProfile",220],[3,"Arc",320],[3,"BiVec",321],[8,"Iterator",322],[3,"Product",220],[3,"Subquotient",323],[8,"Backend",324],[8,"Clone",325],[8,"FnOnce",306],[3,"Adams",220]]},\ "steenrod":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "tensor":{"doc":"","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "unstable_chart":{"doc":"Computes the suspension map between different unstable Ext …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ diff --git a/docs/secondary/all.html b/docs/secondary/all.html index 7835c324d..06f09d44f 100644 --- a/docs/secondary/all.html +++ b/docs/secondary/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/secondary/index.html b/docs/secondary/index.html index ce44f0f12..8afd855fe 100644 --- a/docs/secondary/index.html +++ b/docs/secondary/index.html @@ -1,4 +1,4 @@ -secondary - Rust +secondary - Rust @@ -23,7 +23,7 @@ }); -

      Crate secondary

      source ·
      Expand description

      This computes $d_2$ differentials in the Adams spectral sequence. This only works for fairly +

      Crate secondary

      source ·
      Expand description

      This computes $d_2$ differentials in the Adams spectral sequence. This only works for fairly specific modules, but tends to cover most cases of interest.

      Usage

      This asks for a module in the usual way, and verifies that the module satisfies the conditions diff --git a/docs/secondary_massey/all.html b/docs/secondary_massey/all.html index f78fc0a40..02bd2f5d1 100644 --- a/docs/secondary_massey/all.html +++ b/docs/secondary_massey/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/secondary_massey/index.html b/docs/secondary_massey/index.html index 7a4168a9c..51d62052f 100644 --- a/docs/secondary_massey/index.html +++ b/docs/secondary_massey/index.html @@ -1,4 +1,4 @@ -secondary_massey - Rust +secondary_massey - Rust @@ -23,7 +23,7 @@ }); -

      Crate secondary_massey

      source ·
      Expand description

      Computes massey products in $\Mod_{C\tau^2}$.

      +

      Crate secondary_massey

      source ·
      Expand description

      Computes massey products in $\Mod_{C\tau^2}$.

      Usage

      This computes all Massey products of the form $\langle -, b, a\rangle$, where $a \in \Ext^{*, *}(M, k)$ and $b, (-) \in \Ext^{*, *}(k, k)$. It does not verify that the diff --git a/docs/secondary_product/all.html b/docs/secondary_product/all.html index 5966512a5..81dee0ce8 100644 --- a/docs/secondary_product/all.html +++ b/docs/secondary_product/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/secondary_product/index.html b/docs/secondary_product/index.html index cd5965f5e..0b4921958 100644 --- a/docs/secondary_product/index.html +++ b/docs/secondary_product/index.html @@ -1,4 +1,4 @@ -secondary_product - Rust +secondary_product - Rust @@ -23,7 +23,7 @@ }); -
      Expand description

      Computes products in $\Mod_{C\tau^2}$.

      +
      Expand description

      Computes products in $\Mod_{C\tau^2}$.

      Usage

      The program asks for a module $M$ and an element $x \in \Ext^{*, *}(M, k)$. It then computes the secondary product of the standard lift of $x$ with all (standard lifts of) diff --git a/docs/settings.html b/docs/settings.html index 5a1f9efbe..d145a6e59 100644 --- a/docs/settings.html +++ b/docs/settings.html @@ -1,4 +1,4 @@ -Rustdoc settings +Rustdoc settings @@ -23,4 +23,4 @@ }); -

      Rustdoc settings

      Back
      \ No newline at end of file +

      Rustdoc settings

      Back
      \ No newline at end of file diff --git a/docs/sq0/all.html b/docs/sq0/all.html index 90cfe70a2..f63ade245 100644 --- a/docs/sq0/all.html +++ b/docs/sq0/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

      List of all items

      \ No newline at end of file +

      List of all items

      \ No newline at end of file diff --git a/docs/sq0/index.html b/docs/sq0/index.html index eccd3d604..2c01da89e 100644 --- a/docs/sq0/index.html +++ b/docs/sq0/index.html @@ -1,4 +1,4 @@ -sq0 - Rust +sq0 - Rust @@ -23,4 +23,4 @@ }); -

      Crate sq0

      source ·
      \ No newline at end of file +

      Crate sq0

      source ·
      \ No newline at end of file diff --git a/docs/src-files.js b/docs/src-files.js index 6d52de783..cd818c48e 100644 --- a/docs/src-files.js +++ b/docs/src-files.js @@ -14,6 +14,7 @@ var srcIndex = JSON.parse('{\ "lift_hom":["",[],["lift_hom.rs"]],\ "mahowald_invariant":["",[],["mahowald_invariant.rs"]],\ "massey":["",[],["massey.rs"]],\ +"maybe_rayon":["",[],["concurrent.rs","lib.rs"]],\ "num_gens":["",[],["num_gens.rs"]],\ "once":["",[],["lib.rs"]],\ "query":["",[],["lib.rs"]],\ diff --git a/docs/src/algebra/algebra/adem_algebra.rs.html b/docs/src/algebra/algebra/adem_algebra.rs.html index 0a4c2baf8..4d4719d91 100644 --- a/docs/src/algebra/algebra/adem_algebra.rs.html +++ b/docs/src/algebra/algebra/adem_algebra.rs.html @@ -1,4 +1,4 @@ -adem_algebra.rs - source +adem_algebra.rs - source diff --git a/docs/src/algebra/algebra/algebra_trait.rs.html b/docs/src/algebra/algebra/algebra_trait.rs.html index 8eba50544..1f7ef015f 100644 --- a/docs/src/algebra/algebra/algebra_trait.rs.html +++ b/docs/src/algebra/algebra/algebra_trait.rs.html @@ -1,4 +1,4 @@ -algebra_trait.rs - source +algebra_trait.rs - source diff --git a/docs/src/algebra/algebra/bialgebra_trait.rs.html b/docs/src/algebra/algebra/bialgebra_trait.rs.html index 92fae256e..33d42ef96 100644 --- a/docs/src/algebra/algebra/bialgebra_trait.rs.html +++ b/docs/src/algebra/algebra/bialgebra_trait.rs.html @@ -1,4 +1,4 @@ -bialgebra_trait.rs - source +bialgebra_trait.rs - source diff --git a/docs/src/algebra/algebra/combinatorics.rs.html b/docs/src/algebra/algebra/combinatorics.rs.html index 6cbb13fa0..6d9622fab 100644 --- a/docs/src/algebra/algebra/combinatorics.rs.html +++ b/docs/src/algebra/algebra/combinatorics.rs.html @@ -1,4 +1,4 @@ -combinatorics.rs - source +combinatorics.rs - source diff --git a/docs/src/algebra/algebra/field.rs.html b/docs/src/algebra/algebra/field.rs.html index 35c2842d4..0962d263d 100644 --- a/docs/src/algebra/algebra/field.rs.html +++ b/docs/src/algebra/algebra/field.rs.html @@ -1,4 +1,4 @@ -field.rs - source +field.rs - source diff --git a/docs/src/algebra/algebra/milnor_algebra.rs.html b/docs/src/algebra/algebra/milnor_algebra.rs.html index 918275308..b9ea8a243 100644 --- a/docs/src/algebra/algebra/milnor_algebra.rs.html +++ b/docs/src/algebra/algebra/milnor_algebra.rs.html @@ -1,4 +1,4 @@ -milnor_algebra.rs - source +milnor_algebra.rs - source @@ -2112,9 +2112,6 @@ 2087 2088 2089 -2090 -2091 -2092
      use itertools::Itertools;
       use rustc_hash::FxHashMap as HashMap;
       use std::cell::Cell;
      @@ -2125,8 +2122,7 @@
       use fp::vector::{FpVector, Slice, SliceMut};
       use once::OnceVec;
       
      -#[cfg(feature = "json")]
      -use {serde::Deserialize, serde::Serialize};
      +use {serde::Deserialize, serde::Serialize};
       
       // This is here so that the Python bindings can use modules defined for AdemAlgebraT with their own algebra enum.
       // In order for things to work AdemAlgebraT cannot implement Algebra.
      @@ -2141,22 +2137,20 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -fn q_part_default() -> u32 {
      +fn q_part_default() -> u32 {
           !0
       }
       
      -#[cfg_attr(feature = "json", derive(Deserialize, Serialize))]
      -#[derive(Debug, PartialEq, Eq)]
      +#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
       pub struct MilnorProfile {
           /// If `true`, unspecified p_part entries will be 0. Otherwise they will be infinity.
           pub truncated: bool,
           /// A bitmask indicating which of the Q_k we want to include (1 = include). Defaults to `!0`.
           /// This is only relevant at odd primes.
      -    #[cfg_attr(feature = "json", serde(default = "q_part_default"))]
      +    #[serde(default = "q_part_default")]
           pub q_part: u32,
           /// The profile function for the Q part.
      -    #[cfg_attr(feature = "json", serde(default))]
      +    #[serde(default)]
           pub p_part: PPart,
       }
       
      diff --git a/docs/src/algebra/algebra/mod.rs.html b/docs/src/algebra/algebra/mod.rs.html
      index 2731eaf8e..438a3c5ea 100644
      --- a/docs/src/algebra/algebra/mod.rs.html
      +++ b/docs/src/algebra/algebra/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      +mod.rs - source
       
       
       
      diff --git a/docs/src/algebra/algebra/pair_algebra.rs.html b/docs/src/algebra/algebra/pair_algebra.rs.html
      index 8163c23f1..2da0b8abb 100644
      --- a/docs/src/algebra/algebra/pair_algebra.rs.html
      +++ b/docs/src/algebra/algebra/pair_algebra.rs.html
      @@ -1,4 +1,4 @@
      -pair_algebra.rs - source
      +pair_algebra.rs - source
       
       
       
      diff --git a/docs/src/algebra/algebra/polynomial_algebra.rs.html b/docs/src/algebra/algebra/polynomial_algebra.rs.html
      index 47d27f842..ae04ef498 100644
      --- a/docs/src/algebra/algebra/polynomial_algebra.rs.html
      +++ b/docs/src/algebra/algebra/polynomial_algebra.rs.html
      @@ -1,4 +1,4 @@
      -polynomial_algebra.rs - source
      +polynomial_algebra.rs - source
       
       
       
      diff --git a/docs/src/algebra/algebra/steenrod_algebra.rs.html b/docs/src/algebra/algebra/steenrod_algebra.rs.html
      index 135442044..1e7c8a4d0 100644
      --- a/docs/src/algebra/algebra/steenrod_algebra.rs.html
      +++ b/docs/src/algebra/algebra/steenrod_algebra.rs.html
      @@ -1,4 +1,4 @@
      -steenrod_algebra.rs - source
      +steenrod_algebra.rs - source
       
       
       
      @@ -325,9 +325,6 @@
       300
       301
       302
      -303
      -304
      -305
       
      use crate::algebra::{
           AdemAlgebra, AdemAlgebraT, Algebra, Bialgebra, GeneratedAlgebra, MilnorAlgebra, MilnorAlgebraT,
       };
      @@ -339,8 +336,7 @@
       
       use std::io::{Read, Write};
       
      -#[cfg(feature = "json")]
      -use {serde::Deserialize, serde_json::Value};
      +use {serde::Deserialize, serde_json::Value};
       
       // This is here so that the Python bindings can use modules defined aor SteenrodAlgebraT with their own algebra enum.
       // In order for things to work SteenrodAlgebraT cannot implement Algebra.
      @@ -474,16 +470,14 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -#[derive(Deserialize, Debug)]
      +#[derive(Deserialize, Debug)]
       struct AlgebraSpec {
           p: ValidPrime,
           algebra: Option<Vec<String>>,
           profile: Option<crate::algebra::milnor_algebra::MilnorProfile>,
       }
       
      -#[cfg(feature = "json")]
      -impl SteenrodAlgebra {
      +impl SteenrodAlgebra {
           pub fn from_json(
               json: &Value,
               mut algebra_type: AlgebraType,
      diff --git a/docs/src/algebra/lib.rs.html b/docs/src/algebra/lib.rs.html
      index c4f0d9865..87818325d 100644
      --- a/docs/src/algebra/lib.rs.html
      +++ b/docs/src/algebra/lib.rs.html
      @@ -1,4 +1,4 @@
      -lib.rs - source
      +lib.rs - source
       
       
       
      @@ -104,7 +104,6 @@
       79
       80
       81
      -82
       
      //! Types and traits for working with various algebras and modules, with
       //! a focus on the Steenrod algebra and its modules.
       
      @@ -120,8 +119,7 @@
       
       pub use crate::algebra::*;
       
      -#[cfg(feature = "json")]
      -pub(crate) fn module_gens_from_json(
      +pub(crate) fn module_gens_from_json(
           gens: &serde_json::Value,
       ) -> (
           bivec::BiVec<usize>,
      diff --git a/docs/src/algebra/module/block_structure.rs.html b/docs/src/algebra/module/block_structure.rs.html
      index 4ded8d9b3..0fdfceb14 100644
      --- a/docs/src/algebra/module/block_structure.rs.html
      +++ b/docs/src/algebra/module/block_structure.rs.html
      @@ -1,4 +1,4 @@
      -block_structure.rs - source
      +block_structure.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/finite_dimensional_module.rs.html b/docs/src/algebra/module/finite_dimensional_module.rs.html
      index 89867894f..9ede9f8fa 100644
      --- a/docs/src/algebra/module/finite_dimensional_module.rs.html
      +++ b/docs/src/algebra/module/finite_dimensional_module.rs.html
      @@ -1,4 +1,4 @@
      -finite_dimensional_module.rs - source
      +finite_dimensional_module.rs - source
       
       
       
      @@ -731,8 +731,6 @@
       706
       707
       708
      -709
      -710
       
      use crate::algebra::Algebra;
       use crate::module::{Module, ZeroModule};
       use bivec::BiVec;
      @@ -741,8 +739,7 @@
       use std::fmt::Write as _;
       use std::sync::Arc;
       
      -#[cfg(feature = "json")]
      -use {
      +use {
           crate::algebra::GeneratedAlgebra,
           crate::module::ModuleFailedRelationError,
           anyhow::{anyhow, Context},
      @@ -1185,8 +1182,7 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -impl<A: GeneratedAlgebra> FiniteDimensionalModule<A> {
      +impl<A: GeneratedAlgebra> FiniteDimensionalModule<A> {
           pub fn from_json(algebra: Arc<A>, json: &Value) -> anyhow::Result<Self> {
               let (graded_dimension, gen_names, gen_to_idx) = crate::module_gens_from_json(&json["gens"]);
               let name = json["name"].as_str().unwrap_or("").to_string();
      diff --git a/docs/src/algebra/module/finitely_presented_module.rs.html b/docs/src/algebra/module/finitely_presented_module.rs.html
      index 54d635710..0256745a8 100644
      --- a/docs/src/algebra/module/finitely_presented_module.rs.html
      +++ b/docs/src/algebra/module/finitely_presented_module.rs.html
      @@ -1,4 +1,4 @@
      -finitely_presented_module.rs - source
      +finitely_presented_module.rs - source
       
       
       
      @@ -271,8 +271,6 @@
       246
       247
       248
      -249
      -250
       
      use std::sync::Arc;
       
       use crate::algebra::Algebra;
      @@ -281,8 +279,7 @@
       use fp::vector::{FpVector, SliceMut};
       use once::OnceBiVec;
       
      -#[cfg(feature = "json")]
      -use {itertools::Itertools, serde_json::Value};
      +use {itertools::Itertools, serde_json::Value};
       
       struct FPMIndexTable {
           gen_idx_to_fp_idx: Vec<isize>,
      @@ -370,8 +367,7 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -impl<A: Algebra> FinitelyPresentedModule<A> {
      +impl<A: Algebra> FinitelyPresentedModule<A> {
           pub fn from_json(algebra: Arc<A>, json: &Value) -> anyhow::Result<Self> {
               use crate::steenrod_parser::digits;
               use anyhow::anyhow;
      diff --git a/docs/src/algebra/module/free_module.rs.html b/docs/src/algebra/module/free_module.rs.html
      index 1fb974ed1..677ce952e 100644
      --- a/docs/src/algebra/module/free_module.rs.html
      +++ b/docs/src/algebra/module/free_module.rs.html
      @@ -1,4 +1,4 @@
      -free_module.rs - source
      +free_module.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/hom_module.rs.html b/docs/src/algebra/module/hom_module.rs.html
      index 2330222cc..ee4d48b71 100644
      --- a/docs/src/algebra/module/hom_module.rs.html
      +++ b/docs/src/algebra/module/hom_module.rs.html
      @@ -1,4 +1,4 @@
      -hom_module.rs - source
      +hom_module.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/homomorphism/free_module_homomorphism.rs.html b/docs/src/algebra/module/homomorphism/free_module_homomorphism.rs.html
      index 4f779ad63..cd9434ae7 100644
      --- a/docs/src/algebra/module/homomorphism/free_module_homomorphism.rs.html
      +++ b/docs/src/algebra/module/homomorphism/free_module_homomorphism.rs.html
      @@ -1,4 +1,4 @@
      -free_module_homomorphism.rs - source
      +free_module_homomorphism.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/homomorphism/full_module_homomorphism.rs.html b/docs/src/algebra/module/homomorphism/full_module_homomorphism.rs.html
      index 7c4cd466e..c7a7f9b3d 100644
      --- a/docs/src/algebra/module/homomorphism/full_module_homomorphism.rs.html
      +++ b/docs/src/algebra/module/homomorphism/full_module_homomorphism.rs.html
      @@ -1,4 +1,4 @@
      -full_module_homomorphism.rs - source
      +full_module_homomorphism.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/homomorphism/generic_zero_homomorphism.rs.html b/docs/src/algebra/module/homomorphism/generic_zero_homomorphism.rs.html
      index 447e9f0e0..a4f133209 100644
      --- a/docs/src/algebra/module/homomorphism/generic_zero_homomorphism.rs.html
      +++ b/docs/src/algebra/module/homomorphism/generic_zero_homomorphism.rs.html
      @@ -1,4 +1,4 @@
      -generic_zero_homomorphism.rs - source
      +generic_zero_homomorphism.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/homomorphism/hom_pullback.rs.html b/docs/src/algebra/module/homomorphism/hom_pullback.rs.html
      index a19b56ab3..5ebb6a212 100644
      --- a/docs/src/algebra/module/homomorphism/hom_pullback.rs.html
      +++ b/docs/src/algebra/module/homomorphism/hom_pullback.rs.html
      @@ -1,4 +1,4 @@
      -hom_pullback.rs - source
      +hom_pullback.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/homomorphism/mod.rs.html b/docs/src/algebra/module/homomorphism/mod.rs.html
      index 0ee08cf51..aa424a5f7 100644
      --- a/docs/src/algebra/module/homomorphism/mod.rs.html
      +++ b/docs/src/algebra/module/homomorphism/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      +mod.rs - source
       
       
       
      @@ -193,15 +193,6 @@
       168
       169
       170
      -171
      -172
      -173
      -174
      -175
      -176
      -177
      -178
      -179
       
      use std::sync::Arc;
       
       use crate::module::Module;
      @@ -209,9 +200,6 @@
       use fp::prime::ValidPrime;
       use fp::vector::{Slice, SliceMut};
       
      -#[cfg(feature = "concurrent")]
      -use rayon::prelude::*;
      -
       mod free_module_homomorphism;
       mod full_module_homomorphism;
       mod generic_zero_homomorphism;
      @@ -226,6 +214,9 @@
       pub use hom_pullback::HomPullback;
       pub use quotient_homomorphism::{QuotientHomomorphism, QuotientHomomorphismSource};
       
      +#[allow(unused_imports)]
      +use maybe_rayon::prelude::*;
      +
       /// Each `ModuleHomomorphism` may come with auxiliary data, namely the kernel, image and
       /// quasi_inverse at each degree (the quasi-inverse is a map that is a right inverse when
       /// restricted to the image). These are computed via
      @@ -326,14 +317,8 @@
                   return;
               }
       
      -        #[cfg(not(feature = "concurrent"))]
      -        for (i, row) in matrix.iter_mut().enumerate() {
      -            self.apply_to_basis_element(row, 1, degree, i);
      -        }
      -
      -        #[cfg(feature = "concurrent")]
      -        matrix
      -            .par_iter_mut()
      +        matrix
      +            .maybe_par_iter_mut()
                   .enumerate()
                   .for_each(|(i, row)| self.apply_to_basis_element(row, 1, degree, i));
           }
      @@ -346,15 +331,12 @@
                   return matrix;
               }
       
      -        #[cfg(not(feature = "concurrent"))]
      -        for (row, &v) in matrix.iter_mut().zip(inputs) {
      -            self.apply_to_basis_element(row.as_slice_mut(), 1, degree, v);
      -        }
      -
      -        #[cfg(feature = "concurrent")]
      -        matrix.par_iter_mut().enumerate().for_each(|(i, row)| {
      -            self.apply_to_basis_element(row.as_slice_mut(), 1, degree, inputs[i])
      -        });
      +        matrix
      +            .maybe_par_iter_mut()
      +            .enumerate()
      +            .for_each(|(i, row)| {
      +                self.apply_to_basis_element(row.as_slice_mut(), 1, degree, inputs[i])
      +            });
       
               matrix
           }
      diff --git a/docs/src/algebra/module/homomorphism/quotient_homomorphism.rs.html b/docs/src/algebra/module/homomorphism/quotient_homomorphism.rs.html
      index 46ab8a20d..385e940c5 100644
      --- a/docs/src/algebra/module/homomorphism/quotient_homomorphism.rs.html
      +++ b/docs/src/algebra/module/homomorphism/quotient_homomorphism.rs.html
      @@ -1,4 +1,4 @@
      -quotient_homomorphism.rs - source
      +quotient_homomorphism.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/mod.rs.html b/docs/src/algebra/module/mod.rs.html
      index fa4e9d723..4a03ac2c7 100644
      --- a/docs/src/algebra/module/mod.rs.html
      +++ b/docs/src/algebra/module/mod.rs.html
      @@ -1,4 +1,4 @@
      -mod.rs - source
      +mod.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/module_trait.rs.html b/docs/src/algebra/module/module_trait.rs.html
      index 8e995706f..8b8b5a77d 100644
      --- a/docs/src/algebra/module/module_trait.rs.html
      +++ b/docs/src/algebra/module/module_trait.rs.html
      @@ -1,4 +1,4 @@
      -module_trait.rs - source
      +module_trait.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/quotient_module.rs.html b/docs/src/algebra/module/quotient_module.rs.html
      index 4e102f5bb..79c8b9385 100644
      --- a/docs/src/algebra/module/quotient_module.rs.html
      +++ b/docs/src/algebra/module/quotient_module.rs.html
      @@ -1,4 +1,4 @@
      -quotient_module.rs - source
      +quotient_module.rs - source
       
       
       
      diff --git a/docs/src/algebra/module/rpn.rs.html b/docs/src/algebra/module/rpn.rs.html
      index c77b12a51..cd0a2f998 100644
      --- a/docs/src/algebra/module/rpn.rs.html
      +++ b/docs/src/algebra/module/rpn.rs.html
      @@ -1,4 +1,4 @@
      -rpn.rs - source
      +rpn.rs - source
       
       
       
      @@ -266,9 +266,6 @@
       241
       242
       243
      -244
      -245
      -246
       
      use crate::algebra::{
           adem_algebra::AdemBasisElement,
           milnor_algebra::{MilnorBasisElement, PPartEntry},
      @@ -280,8 +277,7 @@
       
       use std::sync::Arc;
       
      -#[cfg(feature = "json")]
      -use {serde::Deserialize, serde_json::Value};
      +use {serde::Deserialize, serde_json::Value};
       
       /// This is $\mathbb{RP}_{\mathrm{min}}^{\mathrm{max}}$. The cohomology is the subquotient of
       /// $\mathbb{F}_2[x^\pm]$ given by elements of degree between min and max (inclusive)
      @@ -474,16 +470,14 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -#[derive(Deserialize, Debug)]
      +#[derive(Deserialize, Debug)]
       struct RPSpec {
           min: i32,
           clear_bottom: Option<bool>,
           max: Option<i32>,
       }
       
      -#[cfg(feature = "json")]
      -impl<A: Algebra> RealProjectiveSpace<A> {
      +impl<A: Algebra> RealProjectiveSpace<A> {
           pub fn from_json(algebra: Arc<A>, json: &Value) -> anyhow::Result<Self> {
               let spec: RPSpec = RPSpec::deserialize(json)?;
               let clear_bottom = spec.clear_bottom.unwrap_or(false);
      diff --git a/docs/src/algebra/module/steenrod_module.rs.html b/docs/src/algebra/module/steenrod_module.rs.html
      index b1fb8b541..71898f4b5 100644
      --- a/docs/src/algebra/module/steenrod_module.rs.html
      +++ b/docs/src/algebra/module/steenrod_module.rs.html
      @@ -1,4 +1,4 @@
      -steenrod_module.rs - source
      +steenrod_module.rs - source
       
       
       
      @@ -69,14 +69,11 @@
       44
       45
       46
      -47
      -48
       
      use crate::algebra::SteenrodAlgebra;
       
       pub type SteenrodModule = Box<dyn Module<Algebra = SteenrodAlgebra>>;
       
      -#[cfg(feature = "json")]
      -mod json {
      +mod json {
           use super::*;
       
           use crate::module::{FDModule, FPModule, RealProjectiveSpace, SuspensionModule};
      @@ -115,8 +112,7 @@
           }
       }
       
      -#[cfg(feature = "json")]
      -pub use json::*;
      +pub use json::*;
       
       use super::Module;
       
      \ No newline at end of file diff --git a/docs/src/algebra/module/suspension_module.rs.html b/docs/src/algebra/module/suspension_module.rs.html index 201e03d3b..58c1e6e99 100644 --- a/docs/src/algebra/module/suspension_module.rs.html +++ b/docs/src/algebra/module/suspension_module.rs.html @@ -1,4 +1,4 @@ -suspension_module.rs - source +suspension_module.rs - source diff --git a/docs/src/algebra/module/tensor_module.rs.html b/docs/src/algebra/module/tensor_module.rs.html index 103fdd356..195688616 100644 --- a/docs/src/algebra/module/tensor_module.rs.html +++ b/docs/src/algebra/module/tensor_module.rs.html @@ -1,4 +1,4 @@ -tensor_module.rs - source +tensor_module.rs - source diff --git a/docs/src/algebra/module/zero_module.rs.html b/docs/src/algebra/module/zero_module.rs.html index 7f2e40a60..5370948b2 100644 --- a/docs/src/algebra/module/zero_module.rs.html +++ b/docs/src/algebra/module/zero_module.rs.html @@ -1,4 +1,4 @@ -zero_module.rs - source +zero_module.rs - source diff --git a/docs/src/algebra/steenrod_evaluator.rs.html b/docs/src/algebra/steenrod_evaluator.rs.html index 03496a26d..8c110e19f 100644 --- a/docs/src/algebra/steenrod_evaluator.rs.html +++ b/docs/src/algebra/steenrod_evaluator.rs.html @@ -1,4 +1,4 @@ -steenrod_evaluator.rs - source +steenrod_evaluator.rs - source diff --git a/docs/src/algebra/steenrod_parser.rs.html b/docs/src/algebra/steenrod_parser.rs.html index 2c008cee9..6cfcd78b6 100644 --- a/docs/src/algebra/steenrod_parser.rs.html +++ b/docs/src/algebra/steenrod_parser.rs.html @@ -1,4 +1,4 @@ -steenrod_parser.rs - source +steenrod_parser.rs - source diff --git a/docs/src/algebra_dim/algebra_dim.rs.html b/docs/src/algebra_dim/algebra_dim.rs.html index 1d062dcf0..6b4611a75 100644 --- a/docs/src/algebra_dim/algebra_dim.rs.html +++ b/docs/src/algebra_dim/algebra_dim.rs.html @@ -1,4 +1,4 @@ -algebra_dim.rs - source +algebra_dim.rs - source diff --git a/docs/src/bivec/lib.rs.html b/docs/src/bivec/lib.rs.html index 1c4b9764e..6fd9cf615 100644 --- a/docs/src/bivec/lib.rs.html +++ b/docs/src/bivec/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source +lib.rs - source @@ -320,12 +320,10 @@ 295 296 297 -298 -299
    use core::ops::Index;
     use core::ops::IndexMut;
    -#[cfg(feature = "json")]
    -use serde::{Deserialize, Deserializer, Serialize, Serializer};
    +
    +use serde::{Deserialize, Deserializer, Serialize, Serializer};
     use std::fmt;
     use std::slice::{Iter, IterMut};
     
    @@ -569,8 +567,7 @@
         }
     }
     
    -#[cfg(feature = "json")]
    -impl<T: Serialize> Serialize for BiVec<T> {
    +impl<T: Serialize> Serialize for BiVec<T> {
         fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
         where
             S: Serializer,
    @@ -579,8 +576,7 @@
         }
     }
     
    -#[cfg(feature = "json")]
    -impl<'de, T: Deserialize<'de>> Deserialize<'de> for BiVec<T> {
    +impl<'de, T: Deserialize<'de>> Deserialize<'de> for BiVec<T> {
         fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
         where
             D: Deserializer<'de>,
    diff --git a/docs/src/bruner/bruner.rs.html b/docs/src/bruner/bruner.rs.html
    index 5073703ee..c8240f22e 100644
    --- a/docs/src/bruner/bruner.rs.html
    +++ b/docs/src/bruner/bruner.rs.html
    @@ -1,4 +1,4 @@
    -bruner.rs - source
    +bruner.rs - source
     
     
     
    diff --git a/docs/src/chart/chart.rs.html b/docs/src/chart/chart.rs.html
    index 5e6d0f6df..e7ee0c1fc 100644
    --- a/docs/src/chart/chart.rs.html
    +++ b/docs/src/chart/chart.rs.html
    @@ -1,4 +1,4 @@
    -chart.rs - source
    +chart.rs - source
     
     
     
    diff --git a/docs/src/chart/lib.rs.html b/docs/src/chart/lib.rs.html
    index e095fb9b4..2c9b149d0 100644
    --- a/docs/src/chart/lib.rs.html
    +++ b/docs/src/chart/lib.rs.html
    @@ -1,4 +1,4 @@
    -lib.rs - source
    +lib.rs - source
     
     
     
    diff --git a/docs/src/d2_charts/d2_charts.rs.html b/docs/src/d2_charts/d2_charts.rs.html
    index d558f3f95..702e2d81f 100644
    --- a/docs/src/d2_charts/d2_charts.rs.html
    +++ b/docs/src/d2_charts/d2_charts.rs.html
    @@ -1,4 +1,4 @@
    -d2_charts.rs - source
    +d2_charts.rs - source
     
     
     
    diff --git a/docs/src/define_module/define_module.rs.html b/docs/src/define_module/define_module.rs.html
    index bfb8984f8..992f984ee 100644
    --- a/docs/src/define_module/define_module.rs.html
    +++ b/docs/src/define_module/define_module.rs.html
    @@ -1,4 +1,4 @@
    -define_module.rs - source
    +define_module.rs - source
     
     
     
    diff --git a/docs/src/differentials/differentials.rs.html b/docs/src/differentials/differentials.rs.html
    index 214e7d856..9e0d269d5 100644
    --- a/docs/src/differentials/differentials.rs.html
    +++ b/docs/src/differentials/differentials.rs.html
    @@ -1,4 +1,4 @@
    -differentials.rs - source
    +differentials.rs - source
     
     
     
    diff --git a/docs/src/ext/chain_complex/chain_homotopy.rs.html b/docs/src/ext/chain_complex/chain_homotopy.rs.html
    index da0961441..5a90a9358 100644
    --- a/docs/src/ext/chain_complex/chain_homotopy.rs.html
    +++ b/docs/src/ext/chain_complex/chain_homotopy.rs.html
    @@ -1,4 +1,4 @@
    -chain_homotopy.rs - source
    +chain_homotopy.rs - source
     
     
     
    @@ -310,26 +310,6 @@
     285
     286
     287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
     
    use crate::chain_complex::{ChainComplex, FreeChainComplex};
     use crate::resolution_homomorphism::ResolutionHomomorphism;
     use crate::save::SaveKind;
    @@ -344,8 +324,7 @@
     use std::sync::Arc;
     use std::sync::Mutex;
     
    -#[cfg(feature = "concurrent")]
    -use rayon::prelude::*;
    +use maybe_rayon::prelude::*;
     
     // Another instance of https://github.com/rust-lang/rust/issues/91380
     /// A chain homotopy from $f to g$, or equivalently a null-homotopy of $h = f - g$. A chain map is
    @@ -472,30 +451,15 @@
     
             self.initialize_homotopies(max_source.s());
     
    -        #[cfg(not(feature = "concurrent"))]
    -        {
    -            for source_s in shift.s() - 1..max_source.s() {
    -                for source_t in
    -                    self.homotopies[source_s as i32].next_degree()..max_source.t(source_s)
    -                {
    -                    let source = Bidegree::s_t(source_s, source_t);
    -                    self.extend_step(source);
    -                }
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        {
    -            let min = Bidegree::s_t(
    -                shift.s() - 1,
    -                std::cmp::min(
    -                    self.left.source.min_degree(),
    -                    self.right.target.min_degree() + shift.t(),
    -                ),
    -            );
    +        let min = Bidegree::s_t(
    +            shift.s() - 1,
    +            std::cmp::min(
    +                self.left.source.min_degree(),
    +                self.right.target.min_degree() + shift.t(),
    +            ),
    +        );
     
    -            sseq::coordinates::iter_s_t(&|b| self.extend_step(b), min, max_source);
    -        }
    +        sseq::coordinates::iter_s_t(&|b| self.extend_step(b), min, max_source);
         }
     
         fn extend_step(&self, source: Bidegree) -> std::ops::Range<i32> {
    @@ -603,11 +567,7 @@
                 scratch
             };
     
    -        #[cfg(not(feature = "concurrent"))]
    -        let scratches: Vec<FpVector> = (0..num_gens).map(f).collect();
    -
    -        #[cfg(feature = "concurrent")]
    -        let scratches: Vec<FpVector> = (0..num_gens).into_par_iter().map(f).collect();
    +        let scratches: Vec<FpVector> = (0..num_gens).maybe_into_par_iter().map(f).collect();
     
             assert!(U::apply_quasi_inverse(
                 &*self.right.target,
    diff --git a/docs/src/ext/chain_complex/finite_chain_complex.rs.html b/docs/src/ext/chain_complex/finite_chain_complex.rs.html
    index ffb9e9336..11b8250ef 100644
    --- a/docs/src/ext/chain_complex/finite_chain_complex.rs.html
    +++ b/docs/src/ext/chain_complex/finite_chain_complex.rs.html
    @@ -1,4 +1,4 @@
    -finite_chain_complex.rs - source
    +finite_chain_complex.rs - source
     
     
     
    diff --git a/docs/src/ext/chain_complex/mod.rs.html b/docs/src/ext/chain_complex/mod.rs.html
    index c53d502ff..9f21e3605 100644
    --- a/docs/src/ext/chain_complex/mod.rs.html
    +++ b/docs/src/ext/chain_complex/mod.rs.html
    @@ -1,4 +1,4 @@
    -mod.rs - source
    +mod.rs - source
     
     
     
    diff --git a/docs/src/ext/lib.rs.html b/docs/src/ext/lib.rs.html
    index fd181b582..ab3d7e508 100644
    --- a/docs/src/ext/lib.rs.html
    +++ b/docs/src/ext/lib.rs.html
    @@ -1,4 +1,4 @@
    -lib.rs - source
    +lib.rs - source
     
     
     
    diff --git a/docs/src/ext/nassau.rs.html b/docs/src/ext/nassau.rs.html
    index f3786d8f7..edc4df41e 100644
    --- a/docs/src/ext/nassau.rs.html
    +++ b/docs/src/ext/nassau.rs.html
    @@ -1,4 +1,4 @@
    -nassau.rs - source
    +nassau.rs - source
     
     
     
    @@ -1294,22 +1294,6 @@
     1269
     1270
     1271
    -1272
    -1273
    -1274
    -1275
    -1276
    -1277
    -1278
    -1279
    -1280
    -1281
    -1282
    -1283
    -1284
    -1285
    -1286
    -1287
     
    //! This module implements [Nassau's algorithm](https://arxiv.org/abs/1910.04063). The main export
     //! is the [`Resolution`] object, which is a resolution of the sphere at the prime 2 using Nassau's
     //! algorithm. It aims to provide an API similar to
    @@ -1350,18 +1334,15 @@
     use once::OnceVec;
     use sseq::coordinates::Bidegree;
     
    -#[cfg(feature = "concurrent")]
    -use std::sync::mpsc;
    +use std::sync::mpsc;
     
    -#[cfg(feature = "concurrent")]
    -/// See [`resolution::SenderData`](../resolution/struct.SenderData.html). This differs by not having the `new` field.
    +/// See [`resolution::SenderData`](../resolution/struct.SenderData.html). This differs by not having the `new` field.
     struct SenderData {
         b: Bidegree,
         sender: mpsc::Sender<SenderData>,
     }
     
    -#[cfg(feature = "concurrent")]
    -impl SenderData {
    +impl SenderData {
         pub(crate) fn send(b: Bidegree, sender: mpsc::Sender<Self>) {
             sender
                 .send(Self {
    @@ -2208,20 +2189,7 @@
             self.extend_through_degree(max.s());
             self.algebra().compute_basis(max.t());
     
    -        #[cfg(not(feature = "concurrent"))]
    -        for t in 0..=max.t() {
    -            let start_s = std::cmp::max(0, t - max.n()) as u32;
    -            for s in start_s..=max.s() {
    -                let b = Bidegree::s_t(s, t);
    -                if self.has_computed_bidegree(b) {
    -                    continue;
    -                }
    -                self.step_resolution(b);
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        rayon::in_place_scope(|scope| {
    +        maybe_rayon::in_place_scope(|scope| {
                 // This algorithm is not optimal, as we compute (s, t) only after computing (s - 1, t)
                 // and (s, t - 1). In theory, it suffices to wait for (s, t - 1) and (s - 1, t - 1),
                 // but having the dimensions of the modules change halfway through the computation is
    diff --git a/docs/src/ext/resolution.rs.html b/docs/src/ext/resolution.rs.html
    index 24bff097d..918fc6e32 100644
    --- a/docs/src/ext/resolution.rs.html
    +++ b/docs/src/ext/resolution.rs.html
    @@ -1,4 +1,4 @@
    -resolution.rs - source
    +resolution.rs - source
     
     
     
    @@ -978,36 +978,6 @@
     953
     954
     955
    -956
    -957
    -958
    -959
    -960
    -961
    -962
    -963
    -964
    -965
    -966
    -967
    -968
    -969
    -970
    -971
    -972
    -973
    -974
    -975
    -976
    -977
    -978
    -979
    -980
    -981
    -982
    -983
    -984
    -985
     
    //! This module exports the [`Resolution`] object, which is a chain complex resolving a module. In
     //! particular, this contains the core logic that compute minimal resolutions.
     use std::sync::{Arc, Mutex};
    @@ -1032,13 +1002,11 @@
     
     use itertools::Itertools;
     
    -#[cfg(feature = "concurrent")]
    -use std::sync::mpsc;
    +use std::sync::mpsc;
     
     /// In [`MuResolution::compute_through_stem`] and [`MuResolution::compute_through_bidegree`], we pass
     /// this struct around to inform the supervisor what bidegrees have been computed. We use an
     /// explicit struct instead of a tuple to avoid an infinite type problem.
    -#[cfg(feature = "concurrent")]
     struct SenderData {
         b: Bidegree,
         /// Whether this bidegree was newly calculated or have already been calculated.
    @@ -1050,8 +1018,7 @@
         sender: mpsc::Sender<SenderData>,
     }
     
    -#[cfg(feature = "concurrent")]
    -impl SenderData {
    +impl SenderData {
         fn send(b: Bidegree, new: bool, sender: mpsc::Sender<Self>) {
             sender
                 .send(Self {
    @@ -1723,20 +1690,7 @@
             self.extend_through_degree(max.s());
             self.algebra().compute_basis(max.t() - min_degree);
     
    -        #[cfg(not(feature = "concurrent"))]
    -        for t in min_degree..=max.t() {
    -            for s in 0..=max.s() {
    -                let b = Bidegree::s_t(s, t);
    -                if self.has_computed_bidegree(b) {
    -                    continue;
    -                }
    -                self.step_resolution(b);
    -                cb(b);
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        rayon::in_place_scope(|scope| {
    +        maybe_rayon::in_place_scope(|scope| {
                 // Things that we have finished computing.
                 let mut progress: Vec<i32> = vec![min_degree - 1; max.s() as usize + 1];
                 // We will kickstart the process by pretending we have computed (0, min_degree - 1). So
    @@ -1788,21 +1742,7 @@
             self.extend_through_degree(max.s());
             self.algebra().compute_basis(max.t() - min_degree);
     
    -        #[cfg(not(feature = "concurrent"))]
    -        for t in min_degree..=max.t() {
    -            let start_s = std::cmp::max(0, t - max.n()) as u32;
    -            for s in start_s..=max.s() {
    -                let b = Bidegree::s_t(s, t);
    -                if self.has_computed_bidegree(b) {
    -                    continue;
    -                }
    -                self.step_resolution(b);
    -                cb(b);
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        rayon::in_place_scope(|scope| {
    +        maybe_rayon::in_place_scope(|scope| {
                 // Things that we have finished computing.
                 let mut progress: Vec<i32> = vec![min_degree - 1; max.s() as usize + 1];
                 // We will kickstart the process by pretending we have computed (0, min_degree - 1). So
    diff --git a/docs/src/ext/resolution_homomorphism.rs.html b/docs/src/ext/resolution_homomorphism.rs.html
    index 2e14b287e..63eb2dae3 100644
    --- a/docs/src/ext/resolution_homomorphism.rs.html
    +++ b/docs/src/ext/resolution_homomorphism.rs.html
    @@ -1,4 +1,4 @@
    -resolution_homomorphism.rs - source
    +resolution_homomorphism.rs - source
     
     
     
    @@ -505,25 +505,6 @@
     480
     481
     482
    -483
    -484
    -485
    -486
    -487
    -488
    -489
    -490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
     
    //! This module defines [`MuResolutionHomomorphism`], which is a chain map from a
     //! [`FreeChainComplex`].
     use std::ops::Range;
    @@ -544,8 +525,7 @@
     
     use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
     
    -#[cfg(feature = "concurrent")]
    -use rayon::prelude::*;
    +use maybe_rayon::prelude::*;
     
     pub type ResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<false, CC1, CC2>;
     pub type UnstableResolutionHomomorphism<CC1, CC2> = MuResolutionHomomorphism<true, CC1, CC2>;
    @@ -680,19 +660,6 @@
             ));
         }
     
    -    // See the concurrent version for documentation
    -    #[cfg(not(feature = "concurrent"))]
    -    pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<AUX>) {
    -        self.get_map_ensure_length(max.s() - 1);
    -        for s in self.shift.s()..max.s() {
    -            let f_cur = self.get_map_ensure_length(s);
    -            for t in f_cur.next_degree()..max.t(s) {
    -                let b = Bidegree::s_t(s, t);
    -                self.extend_step_raw(b, None);
    -            }
    -        }
    -    }
    -
         /// Extends the resolution homomorphism up to a given range. This range is first specified by
         /// the maximum `s`, then the maximum `t` for each `s`. This should rarely be used directly;
         /// instead one should use [`MuResolutionHomomorphism::extend`],
    @@ -705,7 +672,6 @@
         /// This assumes in yet-uncomputed bidegrees, the homology of the source consists only of
         /// decomposables (e.g. it is trivial). More precisely, we assume
         /// [`MuResolutionHomomorphism::extend_step_raw`] can be called with `extra_images = None`.
    -    #[cfg(feature = "concurrent")]
         pub fn extend_profile<AUX: Sync>(&self, max: BidegreeRange<AUX>) {
             self.get_map_ensure_length(max.s() - 1);
     
    @@ -835,12 +801,8 @@
                 }
             };
     
    -        #[cfg(not(feature = "concurrent"))]
    -        let fdx_vectors: Vec<FpVector> = (0..num_gens).filter_map(compute_fdx_vector).collect();
    -
    -        #[cfg(feature = "concurrent")]
    -        let fdx_vectors: Vec<FpVector> = (0..num_gens)
    -            .into_par_iter()
    +        let fdx_vectors: Vec<FpVector> = (0..num_gens)
    +            .maybe_into_par_iter()
                 .filter_map(compute_fdx_vector)
                 .collect();
     
    diff --git a/docs/src/ext/save.rs.html b/docs/src/ext/save.rs.html
    index 999feb156..088b8088d 100644
    --- a/docs/src/ext/save.rs.html
    +++ b/docs/src/ext/save.rs.html
    @@ -1,4 +1,4 @@
    -save.rs - source
    +save.rs - source
     
     
     
    diff --git a/docs/src/ext/secondary.rs.html b/docs/src/ext/secondary.rs.html
    index 5bc7f0efa..71aa07a65 100644
    --- a/docs/src/ext/secondary.rs.html
    +++ b/docs/src/ext/secondary.rs.html
    @@ -1,4 +1,4 @@
    -secondary.rs - source
    +secondary.rs - source
     
     
     
    @@ -1428,50 +1428,6 @@
     1403
     1404
     1405
    -1406
    -1407
    -1408
    -1409
    -1410
    -1411
    -1412
    -1413
    -1414
    -1415
    -1416
    -1417
    -1418
    -1419
    -1420
    -1421
    -1422
    -1423
    -1424
    -1425
    -1426
    -1427
    -1428
    -1429
    -1430
    -1431
    -1432
    -1433
    -1434
    -1435
    -1436
    -1437
    -1438
    -1439
    -1440
    -1441
    -1442
    -1443
    -1444
    -1445
    -1446
    -1447
    -1448
    -1449
     
    use crate::chain_complex::{ChainComplex, ChainHomotopy, FreeChainComplex};
     use crate::resolution_homomorphism::ResolutionHomomorphism;
     use crate::save::{SaveFile, SaveKind};
    @@ -1495,8 +1451,7 @@
     use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
     use dashmap::DashMap;
     use itertools::Itertools;
    -#[cfg(feature = "concurrent")]
    -use rayon::prelude::*;
    +use maybe_rayon::prelude::*;
     
     pub static TAU_BIDEGREE: Bidegree = Bidegree::n_s(0, 1);
     
    @@ -1752,17 +1707,9 @@
                 composite
             };
     
    -        #[cfg(not(feature = "concurrent"))]
    -        self.composites.extend(degree, |t| {
    +        self.composites.maybe_par_extend(degree, |t| {
                 (0..self.source.number_of_gens_in_degree(t))
    -                .map(|i| f(t, i))
    -                .collect()
    -        });
    -
    -        #[cfg(feature = "concurrent")]
    -        self.composites.par_extend(degree, |t| {
    -            (0..self.source.number_of_gens_in_degree(t))
    -                .into_par_iter()
    +                .maybe_into_par_iter()
                     .map(|i| f(t, i))
                     .collect()
             });
    @@ -1875,11 +1822,7 @@
                 );
             };
     
    -        #[cfg(not(feature = "concurrent"))]
    -        self.homotopies().range().for_each(f);
    -
    -        #[cfg(feature = "concurrent")]
    -        self.homotopies().range().into_par_iter().for_each(f);
    +        self.homotopies().range().maybe_into_par_iter().for_each(f);
         }
     
         fn get_intermediate(&self, gen: BidegreeGenerator) -> FpVector {
    @@ -1935,21 +1878,15 @@
             );
     
             if let Some(homotopy) = homotopies.get(s as i32 + 1) {
    -            #[cfg(not(feature = "concurrent"))]
    -            for t in 0..self.max().t(s + 1) {
    -                for i in 0..homotopy.source.number_of_gens_in_degree(t) {
    -                    self.get_intermediate(BidegreeGenerator::s_t(s + 1, t, i));
    -                }
    -            }
    -
    -            #[cfg(feature = "concurrent")]
    -            (0..self.max().t(s + 1)).into_par_iter().for_each(|t| {
    -                (0..homotopy.source.number_of_gens_in_degree(t))
    -                    .into_par_iter()
    -                    .for_each(|i| {
    -                        self.get_intermediate(BidegreeGenerator::s_t(s + 1, t, i));
    -                    })
    -            });
    +            (0..self.max().t(s + 1))
    +                .maybe_into_par_iter()
    +                .for_each(|t| {
    +                    (0..homotopy.source.number_of_gens_in_degree(t))
    +                        .maybe_into_par_iter()
    +                        .for_each(|i| {
    +                            self.get_intermediate(BidegreeGenerator::s_t(s + 1, t, i));
    +                        })
    +                });
             }
         }
     
    @@ -1975,28 +1912,21 @@
                 self.intermediates().insert(gen, self.get_intermediate(gen));
             };
     
    -        #[cfg(not(feature = "concurrent"))]
    -        for (s, homotopy) in self.homotopies().iter_enum().skip(1) {
    -            let s = s as u32;
    -            for t in homotopy.composites.range() {
    -                for i in 0..homotopy.source.number_of_gens_in_degree(t) {
    -                    f(BidegreeGenerator::s_t(s, t, i));
    -                }
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        self.homotopies()
    -            .par_iter_enum()
    +        self.homotopies()
    +            .maybe_par_iter_enum()
                 .skip(1)
                 .for_each(|(s, homotopy)| {
                     let s = s as u32;
     
    -                homotopy.composites.range().into_par_iter().for_each(|t| {
    -                    (0..homotopy.source.number_of_gens_in_degree(t))
    -                        .into_par_iter()
    -                        .for_each(|i| f(BidegreeGenerator::s_t(s, t, i)))
    -                })
    +                homotopy
    +                    .composites
    +                    .range()
    +                    .maybe_into_par_iter()
    +                    .for_each(|t| {
    +                        (0..homotopy.source.number_of_gens_in_degree(t))
    +                            .maybe_into_par_iter()
    +                            .for_each(|i| f(BidegreeGenerator::s_t(s, t, i)))
    +                    })
                 })
         }
     
    @@ -2048,15 +1978,11 @@
                 v
             };
     
    -        #[cfg(feature = "concurrent")]
    -        let mut intermediates: Vec<FpVector> = (0..num_gens)
    -            .into_par_iter()
    +        let mut intermediates: Vec<FpVector> = (0..num_gens)
    +            .maybe_into_par_iter()
                 .map(get_intermediate)
                 .collect();
     
    -        #[cfg(not(feature = "concurrent"))]
    -        let mut intermediates: Vec<FpVector> = (0..num_gens).map(get_intermediate).collect();
    -
             let mut results = vec![FpVector::new(p, target_dim); num_gens];
     
             assert!(target.apply_quasi_inverse(&mut results, target_b, &intermediates,));
    @@ -2114,31 +2040,17 @@
                 h.homotopies.extend_by_zero(h.composites.max_degree());
             }
     
    -        #[cfg(not(feature = "concurrent"))]
    -        for (s, homotopy) in self.homotopies().iter_enum().skip(1) {
    -            let s = s as u32;
    -
    -            for t in homotopy.homotopies.next_degree()..self.max().t(s) {
    -                let b = Bidegree::s_t(s, t);
    -                self.compute_homotopy_step(b);
    -            }
    -        }
    -
    -        #[cfg(feature = "concurrent")]
    -        {
    -            let min_t = self.homotopies()[shift.s() as i32].homotopies.min_degree();
    -            let s_range = self.homotopies().range();
    -            let min = Bidegree::s_t(s_range.start as u32 + 1, min_t);
    -            let max = self.max().restrict(s_range.end as u32);
    -            sseq::coordinates::iter_s_t(&|b| self.compute_homotopy_step(b), min, max);
    -        }
    +        let min_t = self.homotopies()[shift.s() as i32].homotopies.min_degree();
    +        let s_range = self.homotopies().range();
    +        let min = Bidegree::s_t(s_range.start as u32 + 1, min_t);
    +        let max = self.max().restrict(s_range.end as u32);
    +        sseq::coordinates::iter_s_t(&|b| self.compute_homotopy_step(b), min, max);
         }
     
         fn extend_all(&self) {
             self.initialize_homotopies();
             self.compute_composites();
    -        #[cfg(feature = "concurrent")]
    -        self.compute_intermediates();
    +        self.compute_intermediates();
             self.compute_homotopies();
         }
     }
    diff --git a/docs/src/ext/utils.rs.html b/docs/src/ext/utils.rs.html
    index b2d517f88..43c516d7d 100644
    --- a/docs/src/ext/utils.rs.html
    +++ b/docs/src/ext/utils.rs.html
    @@ -1,4 +1,4 @@
    -utils.rs - source
    +utils.rs - source
     
     
     
    diff --git a/docs/src/ext/yoneda.rs.html b/docs/src/ext/yoneda.rs.html
    index 3586fbf42..8d56b9789 100644
    --- a/docs/src/ext/yoneda.rs.html
    +++ b/docs/src/ext/yoneda.rs.html
    @@ -1,4 +1,4 @@
    -yoneda.rs - source
    +yoneda.rs - source
     
     
     
    diff --git a/docs/src/ext_m_n/ext_m_n.rs.html b/docs/src/ext_m_n/ext_m_n.rs.html
    index 1a29e8e8a..7a3c48af5 100644
    --- a/docs/src/ext_m_n/ext_m_n.rs.html
    +++ b/docs/src/ext_m_n/ext_m_n.rs.html
    @@ -1,4 +1,4 @@
    -ext_m_n.rs - source
    +ext_m_n.rs - source
     
     
     
    diff --git a/docs/src/filtration_one/filtration_one.rs.html b/docs/src/filtration_one/filtration_one.rs.html
    index 9caa974b6..1e1ac3c55 100644
    --- a/docs/src/filtration_one/filtration_one.rs.html
    +++ b/docs/src/filtration_one/filtration_one.rs.html
    @@ -1,4 +1,4 @@
    -filtration_one.rs - source
    +filtration_one.rs - source
     
     
     
    diff --git a/docs/src/fp/constants.rs.html b/docs/src/fp/constants.rs.html
    index bf27c499f..ab1345096 100644
    --- a/docs/src/fp/constants.rs.html
    +++ b/docs/src/fp/constants.rs.html
    @@ -1,4 +1,4 @@
    -constants.rs - source
    +constants.rs - source
     
     
     
    diff --git a/docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-81686b76175bef8a/out/constants.rs.html b/docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-664134690232b2b2/out/constants.rs.html
    similarity index 79%
    rename from docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-81686b76175bef8a/out/constants.rs.html
    rename to docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-664134690232b2b2/out/constants.rs.html
    index 06fdecb97..b19143ea6 100644
    --- a/docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-81686b76175bef8a/out/constants.rs.html
    +++ b/docs/src/fp/home/runner/work/sseq/sseq/ext/target/debug/build/fp-664134690232b2b2/out/constants.rs.html
    @@ -1,4 +1,4 @@
    -constants.rs - source
    +constants.rs - source
     
     
     
    diff --git a/docs/src/fp/lib.rs.html b/docs/src/fp/lib.rs.html
    index 21987706c..2fc82cc30 100644
    --- a/docs/src/fp/lib.rs.html
    +++ b/docs/src/fp/lib.rs.html
    @@ -1,4 +1,4 @@
    -lib.rs - source
    +lib.rs - source
     
     
     
    diff --git a/docs/src/fp/limb.rs.html b/docs/src/fp/limb.rs.html
    index 23eef45f5..5f732ead1 100644
    --- a/docs/src/fp/limb.rs.html
    +++ b/docs/src/fp/limb.rs.html
    @@ -1,4 +1,4 @@
    -limb.rs - source
    +limb.rs - source
     
     
     
    diff --git a/docs/src/fp/matrix/m4ri.rs.html b/docs/src/fp/matrix/m4ri.rs.html
    index aafc5cef7..d7dd1e245 100644
    --- a/docs/src/fp/matrix/m4ri.rs.html
    +++ b/docs/src/fp/matrix/m4ri.rs.html
    @@ -1,4 +1,4 @@
    -m4ri.rs - source
    +m4ri.rs - source
     
     
     
    diff --git a/docs/src/fp/matrix/matrix_inner.rs.html b/docs/src/fp/matrix/matrix_inner.rs.html
    index 34562a30d..8245a3fa8 100644
    --- a/docs/src/fp/matrix/matrix_inner.rs.html
    +++ b/docs/src/fp/matrix/matrix_inner.rs.html
    @@ -1,4 +1,4 @@
    -matrix_inner.rs - source
    +matrix_inner.rs - source
     
     
     
    @@ -1277,6 +1277,8 @@
     1252
     1253
     1254
    +1255
    +1256
     
    use super::{QuasiInverse, Subspace};
     use crate::matrix::m4ri::M4riTable;
     use crate::prime::{self, ValidPrime};
    @@ -1287,8 +1289,8 @@
     use std::ops::{Index, IndexMut};
     
     use itertools::Itertools;
    -#[cfg(feature = "concurrent")]
    -use rayon::prelude::*;
    +
    +use maybe_rayon::prelude::*;
     
     /// A matrix! In particular, a matrix with values in F_p. The way we store matrices means it is
     /// easier to perform row operations than column operations, and the way we use matrices means we
    @@ -1560,9 +1562,10 @@
             self.vectors.iter_mut()
         }
     
    -    #[cfg(feature = "concurrent")]
    -    pub fn par_iter_mut(&mut self) -> impl IndexedParallelIterator<Item = &mut FpVector> + '_ {
    -        self.vectors.par_iter_mut()
    +    pub fn maybe_par_iter_mut(
    +        &mut self,
    +    ) -> impl MaybeIndexedParallelIterator<Item = &mut FpVector> + '_ {
    +        self.vectors.maybe_par_iter_mut()
         }
     }
     
    @@ -2439,12 +2442,13 @@
                 .map(move |x| x.slice_mut(start, end))
         }
     
    -    #[cfg(feature = "concurrent")]
    -    pub fn par_iter_mut(&mut self) -> impl IndexedParallelIterator<Item = SliceMut> + '_ {
    +    pub fn maybe_par_iter_mut(
    +        &mut self,
    +    ) -> impl MaybeIndexedParallelIterator<Item = SliceMut> + '_ {
             let start = self.col_start;
             let end = self.col_end;
             self.vectors
    -            .par_iter_mut()
    +            .maybe_par_iter_mut()
                 .map(move |x| x.slice_mut(start, end))
         }
     
    diff --git a/docs/src/fp/matrix/mod.rs.html b/docs/src/fp/matrix/mod.rs.html
    index 9c8a897ed..dc5084bb2 100644
    --- a/docs/src/fp/matrix/mod.rs.html
    +++ b/docs/src/fp/matrix/mod.rs.html
    @@ -1,4 +1,4 @@
    -mod.rs - source
    +mod.rs - source
     
     
     
    diff --git a/docs/src/fp/matrix/quasi_inverse.rs.html b/docs/src/fp/matrix/quasi_inverse.rs.html
    index 6e6e75bcb..94293dcfb 100644
    --- a/docs/src/fp/matrix/quasi_inverse.rs.html
    +++ b/docs/src/fp/matrix/quasi_inverse.rs.html
    @@ -1,4 +1,4 @@
    -quasi_inverse.rs - source
    +quasi_inverse.rs - source
     
     
     
    diff --git a/docs/src/fp/matrix/subquotient.rs.html b/docs/src/fp/matrix/subquotient.rs.html
    index 5a5ffd69d..67d4f16a7 100644
    --- a/docs/src/fp/matrix/subquotient.rs.html
    +++ b/docs/src/fp/matrix/subquotient.rs.html
    @@ -1,4 +1,4 @@
    -subquotient.rs - source
    +subquotient.rs - source
     
     
     
    diff --git a/docs/src/fp/matrix/subspace.rs.html b/docs/src/fp/matrix/subspace.rs.html
    index c2fef8186..64ccdea99 100644
    --- a/docs/src/fp/matrix/subspace.rs.html
    +++ b/docs/src/fp/matrix/subspace.rs.html
    @@ -1,4 +1,4 @@
    -subspace.rs - source
    +subspace.rs - source
     
     
     
    diff --git a/docs/src/fp/prime.rs.html b/docs/src/fp/prime.rs.html
    index 8ca8b4628..03ec1cc8a 100644
    --- a/docs/src/fp/prime.rs.html
    +++ b/docs/src/fp/prime.rs.html
    @@ -1,4 +1,4 @@
    -prime.rs - source
    +prime.rs - source
     
     
     
    @@ -616,11 +616,7 @@
     591
     592
     593
    -594
    -595
    -596
    -
    #[cfg(feature = "json")]
    -use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
    +
    use serde::{de::Error, Deserialize, Deserializer, Serialize, Serializer};
     use std::convert::TryFrom;
     
     use crate::constants::{
    @@ -734,8 +730,7 @@
         }
     }
     
    -#[cfg(feature = "json")]
    -impl Serialize for ValidPrime {
    +impl Serialize for ValidPrime {
         fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
         where
             S: Serializer,
    @@ -744,8 +739,7 @@
         }
     }
     
    -#[cfg(feature = "json")]
    -impl<'de> Deserialize<'de> for ValidPrime {
    +impl<'de> Deserialize<'de> for ValidPrime {
         fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
         where
             D: Deserializer<'de>,
    diff --git a/docs/src/fp/simd/mod.rs.html b/docs/src/fp/simd/mod.rs.html
    index 63342d1e9..514b2ce42 100644
    --- a/docs/src/fp/simd/mod.rs.html
    +++ b/docs/src/fp/simd/mod.rs.html
    @@ -1,4 +1,4 @@
    -mod.rs - source
    +mod.rs - source
     
     
     
    diff --git a/docs/src/fp/simd/x86_64.rs.html b/docs/src/fp/simd/x86_64.rs.html
    index 5440aadee..8f1f0cd08 100644
    --- a/docs/src/fp/simd/x86_64.rs.html
    +++ b/docs/src/fp/simd/x86_64.rs.html
    @@ -1,4 +1,4 @@
    -x86_64.rs - source
    +x86_64.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/impl_fpvectorp.rs.html b/docs/src/fp/vector/impl_fpvectorp.rs.html
    index 39955deac..421178d1d 100644
    --- a/docs/src/fp/vector/impl_fpvectorp.rs.html
    +++ b/docs/src/fp/vector/impl_fpvectorp.rs.html
    @@ -1,4 +1,4 @@
    -impl_fpvectorp.rs - source
    +impl_fpvectorp.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/impl_slicemutp.rs.html b/docs/src/fp/vector/impl_slicemutp.rs.html
    index 2fccee591..b9ebdb142 100644
    --- a/docs/src/fp/vector/impl_slicemutp.rs.html
    +++ b/docs/src/fp/vector/impl_slicemutp.rs.html
    @@ -1,4 +1,4 @@
    -impl_slicemutp.rs - source
    +impl_slicemutp.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/impl_slicep.rs.html b/docs/src/fp/vector/impl_slicep.rs.html
    index e47b632b7..475352237 100644
    --- a/docs/src/fp/vector/impl_slicep.rs.html
    +++ b/docs/src/fp/vector/impl_slicep.rs.html
    @@ -1,4 +1,4 @@
    -impl_slicep.rs - source
    +impl_slicep.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/inner.rs.html b/docs/src/fp/vector/inner.rs.html
    index 34a05e030..9b5043fcb 100644
    --- a/docs/src/fp/vector/inner.rs.html
    +++ b/docs/src/fp/vector/inner.rs.html
    @@ -1,4 +1,4 @@
    -inner.rs - source
    +inner.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/iter.rs.html b/docs/src/fp/vector/iter.rs.html
    index a38b3a88f..2aed05c87 100644
    --- a/docs/src/fp/vector/iter.rs.html
    +++ b/docs/src/fp/vector/iter.rs.html
    @@ -1,4 +1,4 @@
    -iter.rs - source
    +iter.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/mod.rs.html b/docs/src/fp/vector/mod.rs.html
    index f45973c5d..be24e8659 100644
    --- a/docs/src/fp/vector/mod.rs.html
    +++ b/docs/src/fp/vector/mod.rs.html
    @@ -1,4 +1,4 @@
    -mod.rs - source
    +mod.rs - source
     
     
     
    diff --git a/docs/src/fp/vector/vector_generic.rs.html b/docs/src/fp/vector/vector_generic.rs.html
    index a4b26a8a6..e71447a22 100644
    --- a/docs/src/fp/vector/vector_generic.rs.html
    +++ b/docs/src/fp/vector/vector_generic.rs.html
    @@ -1,4 +1,4 @@
    -vector_generic.rs - source
    +vector_generic.rs - source
     
     
     
    @@ -501,8 +501,6 @@
     476
     477
     478
    -479
    -480
     
    //! This module is provides wrappers around the contents of [`crate::vector::inner`]. The main
     //! purpose is to put [`FpVectorP`] for different `p` into a single enum. It does the same for the
     //! various slice structs.
    @@ -517,8 +515,8 @@
     use std::mem::size_of;
     
     use itertools::Itertools;
    -#[cfg(feature = "json")]
    -use serde::{Deserialize, Deserializer, Serialize, Serializer};
    +
    +use serde::{Deserialize, Deserializer, Serialize, Serializer};
     
     use crate::limb::{entries_per_limb, Limb};
     use crate::prime::ValidPrime;
    @@ -933,8 +931,7 @@
     impl_try_into!(_5, 5);
     impl_try_into!(_7, 7);
     
    -#[cfg(feature = "json")]
    -impl Serialize for FpVector {
    +impl Serialize for FpVector {
         fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
         where
             S: Serializer,
    @@ -943,8 +940,7 @@
         }
     }
     
    -#[cfg(feature = "json")]
    -impl<'de> Deserialize<'de> for FpVector {
    +impl<'de> Deserialize<'de> for FpVector {
         fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
         where
             D: Deserializer<'de>,
    diff --git a/docs/src/lift_hom/lift_hom.rs.html b/docs/src/lift_hom/lift_hom.rs.html
    index a73c34dee..d2ce8b98b 100644
    --- a/docs/src/lift_hom/lift_hom.rs.html
    +++ b/docs/src/lift_hom/lift_hom.rs.html
    @@ -1,4 +1,4 @@
    -lift_hom.rs - source
    +lift_hom.rs - source
     
     
     
    diff --git a/docs/src/mahowald_invariant/mahowald_invariant.rs.html b/docs/src/mahowald_invariant/mahowald_invariant.rs.html
    index 63418760b..506f4f3fc 100644
    --- a/docs/src/mahowald_invariant/mahowald_invariant.rs.html
    +++ b/docs/src/mahowald_invariant/mahowald_invariant.rs.html
    @@ -1,4 +1,4 @@
    -mahowald_invariant.rs - source
    +mahowald_invariant.rs - source
     
     
     
    diff --git a/docs/src/massey/massey.rs.html b/docs/src/massey/massey.rs.html
    index 673c599e9..fedc028ca 100644
    --- a/docs/src/massey/massey.rs.html
    +++ b/docs/src/massey/massey.rs.html
    @@ -1,4 +1,4 @@
    -massey.rs - source
    +massey.rs - source
     
     
     
    diff --git a/docs/src/maybe_rayon/concurrent.rs.html b/docs/src/maybe_rayon/concurrent.rs.html
    new file mode 100644
    index 000000000..46684d661
    --- /dev/null
    +++ b/docs/src/maybe_rayon/concurrent.rs.html
    @@ -0,0 +1,154 @@
    +concurrent.rs - source
    +
    +
    +
    +
    +
    +
    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +22
    +23
    +24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    +62
    +63
    +64
    +
    pub mod prelude {
    +    use rayon::prelude::*;
    +
    +    pub use rayon::iter::{IndexedParallelIterator, ParallelIterator};
    +
    +    pub trait MaybeParallelIterator: ParallelIterator {}
    +
    +    pub trait MaybeIndexedParallelIterator: IndexedParallelIterator {}
    +
    +    pub trait MaybeIntoParallelIterator: IntoParallelIterator {
    +        fn maybe_into_par_iter(self) -> Self::Iter;
    +    }
    +
    +    pub trait MaybeIntoParallelRefMutIterator<'data>: IntoParallelRefMutIterator<'data> {
    +        fn maybe_par_iter_mut(&'data mut self) -> Self::Iter;
    +    }
    +
    +    // Implementations
    +
    +    impl<I: ParallelIterator> MaybeParallelIterator for I {}
    +
    +    impl<I: IndexedParallelIterator> MaybeIndexedParallelIterator for I {}
    +
    +    impl<I: IntoParallelIterator> MaybeIntoParallelIterator for I {
    +        fn maybe_into_par_iter(self) -> Self::Iter {
    +            self.into_par_iter()
    +        }
    +    }
    +
    +    impl<'data, I: IntoParallelRefMutIterator<'data> + ?Sized>
    +        MaybeIntoParallelRefMutIterator<'data> for I
    +    {
    +        fn maybe_par_iter_mut(&'data mut self) -> Self::Iter {
    +            self.par_iter_mut()
    +        }
    +    }
    +}
    +
    +pub fn join<A, B, RA, RB>(oper_a: A, oper_b: B) -> (RA, RB)
    +where
    +    A: FnOnce() -> RA + Send,
    +    B: FnOnce() -> RB + Send,
    +    RA: Send,
    +    RB: Send,
    +{
    +    rayon::join(oper_a, oper_b)
    +}
    +
    +pub type Scope<'scope> = rayon::Scope<'scope>;
    +
    +pub fn scope<'scope, OP, R>(op: OP) -> R
    +where
    +    OP: FnOnce(&Scope<'scope>) -> R + Send,
    +    R: Send,
    +{
    +    rayon::scope(op)
    +}
    +
    +pub fn in_place_scope<'scope, OP, R>(op: OP) -> R
    +where
    +    OP: FnOnce(&Scope<'scope>) -> R,
    +{
    +    rayon::in_place_scope(op)
    +}
    +
    \ No newline at end of file diff --git a/docs/src/maybe_rayon/lib.rs.html b/docs/src/maybe_rayon/lib.rs.html new file mode 100644 index 000000000..c0f7ad856 --- /dev/null +++ b/docs/src/maybe_rayon/lib.rs.html @@ -0,0 +1,44 @@ +lib.rs - source + + + + + + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    #[cfg(feature = "concurrent")]
    +pub mod concurrent;
    +#[cfg(feature = "concurrent")]
    +pub use concurrent::*;
    +
    +#[cfg(not(feature = "concurrent"))]
    +pub mod sequential;
    +#[cfg(not(feature = "concurrent"))]
    +pub use sequential::*;
    +
    \ No newline at end of file diff --git a/docs/src/num_gens/num_gens.rs.html b/docs/src/num_gens/num_gens.rs.html index e0ebd737c..6ae724c1a 100644 --- a/docs/src/num_gens/num_gens.rs.html +++ b/docs/src/num_gens/num_gens.rs.html @@ -1,4 +1,4 @@ -num_gens.rs - source +num_gens.rs - source diff --git a/docs/src/once/lib.rs.html b/docs/src/once/lib.rs.html index 8aad08e97..ac5b5cd7c 100644 --- a/docs/src/once/lib.rs.html +++ b/docs/src/once/lib.rs.html @@ -1,4 +1,4 @@ -lib.rs - source +lib.rs - source @@ -928,9 +928,6 @@ 903 904 905 -906 -907 -908
    extern crate alloc;
     
     use core::ops::{Index, IndexMut};
    @@ -943,8 +940,7 @@
     use alloc::alloc::Layout;
     use std::ptr::NonNull;
     
    -#[cfg(feature = "concurrent")]
    -use rayon::iter::{IndexedParallelIterator, IntoParallelIterator, ParallelIterator};
    +use maybe_rayon::prelude::*;
     
     const USIZE_LEN: u32 = 0usize.count_zeros();
     
    @@ -1511,23 +1507,22 @@
         }
     }
     
    -#[cfg(feature = "concurrent")]
    -impl<T: Send + Sync> OnceVec<T> {
    -    /// A parallel version of `extend`, where the function `f` is run for different indices
    -    /// simultaneously using [`rayon`].
    +impl<T: Send + Sync> OnceVec<T> {
    +    /// A parallel version of `extend`. If the `concurrent` feature is enabled, the function `f`
    +    /// will be run for different indices simultaneously using [`rayon`].
         ///
         /// # Example
         #[cfg_attr(miri, doc = "```ignore")]
         #[cfg_attr(not(miri), doc = "```")]
         /// # use once::OnceVec;
         /// let v: OnceVec<usize> = OnceVec::new();
    -    /// v.par_extend(5, |i| i + 5);
    +    /// v.maybe_par_extend(5, |i| i + 5);
         /// assert_eq!(v.len(), 6);
         /// for (i, &n) in v.iter().enumerate() {
         ///     assert_eq!(n, i + 5);
         /// }
         /// ```
    -    pub fn par_extend(&self, new_max: usize, f: impl Fn(usize) -> T + Send + Sync) {
    +    pub fn maybe_par_extend(&self, new_max: usize, f: impl Fn(usize) -> T + Send + Sync) {
             let ooo = self.lock();
             assert!(ooo.0.is_empty());
     
    @@ -1540,7 +1535,7 @@
                 // This is safe since we have taken the lock and have made no unsafe references.
                 self.allocate_for(new_max);
     
    -            (old_len..=new_max).into_par_iter().for_each(|i| {
    +            (old_len..=new_max).maybe_into_par_iter().for_each(|i| {
                     // These pointers are all non-aliasing so they can be written concurrently.
                     std::ptr::write(self.entry_ptr(i), f(i));
                 });
    @@ -1742,35 +1737,34 @@
         }
     }
     
    -#[cfg(feature = "concurrent")]
    -impl<T: Send + Sync> OnceBiVec<T> {
    -    /// A parallel version of `extend`, where the function `f` is run for different indices
    -    /// simultaneously using [`rayon`].
    +impl<T: Send + Sync> OnceBiVec<T> {
    +    /// A parallel version of `extend`. If the `concurrent` feature is enabled, the function `f`
    +    /// will be run for different indices simultaneously using [`rayon`].
         ///
         /// # Example
         /// ```
         /// # use once::OnceBiVec;
         /// let v: OnceBiVec<i32> = OnceBiVec::new(-4);
    -    /// v.par_extend(5, |i| i + 5);
    +    /// v.maybe_par_extend(5, |i| i + 5);
         /// assert_eq!(v.len(), 6);
         /// for (i, &n) in v.iter_enum() {
         ///     assert_eq!(n, i + 5);
         /// }
         /// ```
    -    pub fn par_extend(&self, new_max: i32, f: impl (Fn(i32) -> T) + Send + Sync) {
    +    pub fn maybe_par_extend(&self, new_max: i32, f: impl (Fn(i32) -> T) + Send + Sync) {
             if new_max < self.min_degree {
                 return;
             }
             self.data
    -            .par_extend((new_max - self.min_degree) as usize, |i| {
    +            .maybe_par_extend((new_max - self.min_degree) as usize, |i| {
                     f(i as i32 + self.min_degree)
                 });
         }
     
    -    pub fn par_iter_enum(
    +    pub fn maybe_par_iter_enum(
             &self,
    -    ) -> impl ParallelIterator<Item = (i32, &T)> + IndexedParallelIterator {
    -        self.range().into_par_iter().map(|i| (i, &self[i]))
    +    ) -> impl MaybeParallelIterator<Item = (i32, &T)> + MaybeIndexedParallelIterator {
    +        self.range().maybe_into_par_iter().map(|i| (i, &self[i]))
         }
     }
     
    diff --git a/docs/src/query/lib.rs.html b/docs/src/query/lib.rs.html
    index be475d10d..a50b01276 100644
    --- a/docs/src/query/lib.rs.html
    +++ b/docs/src/query/lib.rs.html
    @@ -1,4 +1,4 @@
    -lib.rs - source
    +lib.rs - source
     
     
     
    diff --git a/docs/src/resolution_size/resolution_size.rs.html b/docs/src/resolution_size/resolution_size.rs.html
    index 538ce78c5..7e1a44ffb 100644
    --- a/docs/src/resolution_size/resolution_size.rs.html
    +++ b/docs/src/resolution_size/resolution_size.rs.html
    @@ -1,4 +1,4 @@
    -resolution_size.rs - source
    +resolution_size.rs - source
     
     
     
    diff --git a/docs/src/resolve/resolve.rs.html b/docs/src/resolve/resolve.rs.html
    index 025f330bb..3a69a0447 100644
    --- a/docs/src/resolve/resolve.rs.html
    +++ b/docs/src/resolve/resolve.rs.html
    @@ -1,4 +1,4 @@
    -resolve.rs - source
    +resolve.rs - source
     
     
     
    diff --git a/docs/src/resolve_through_stem/resolve_through_stem.rs.html b/docs/src/resolve_through_stem/resolve_through_stem.rs.html
    index f6c89ced3..aa280fdd4 100644
    --- a/docs/src/resolve_through_stem/resolve_through_stem.rs.html
    +++ b/docs/src/resolve_through_stem/resolve_through_stem.rs.html
    @@ -1,4 +1,4 @@
    -resolve_through_stem.rs - source
    +resolve_through_stem.rs - source
     
     
     
    diff --git a/docs/src/resolve_unstable/resolve_unstable.rs.html b/docs/src/resolve_unstable/resolve_unstable.rs.html
    index 273cea8db..78af8b630 100644
    --- a/docs/src/resolve_unstable/resolve_unstable.rs.html
    +++ b/docs/src/resolve_unstable/resolve_unstable.rs.html
    @@ -1,4 +1,4 @@
    -resolve_unstable.rs - source
    +resolve_unstable.rs - source
     
     
     
    diff --git a/docs/src/save_bruner/save_bruner.rs.html b/docs/src/save_bruner/save_bruner.rs.html
    index 1e6810002..0741652a8 100644
    --- a/docs/src/save_bruner/save_bruner.rs.html
    +++ b/docs/src/save_bruner/save_bruner.rs.html
    @@ -1,4 +1,4 @@
    -save_bruner.rs - source
    +save_bruner.rs - source
     
     
     
    diff --git a/docs/src/secondary/secondary.rs.html b/docs/src/secondary/secondary.rs.html
    index 15fe55f05..190b13db2 100644
    --- a/docs/src/secondary/secondary.rs.html
    +++ b/docs/src/secondary/secondary.rs.html
    @@ -1,4 +1,4 @@
    -secondary.rs - source
    +secondary.rs - source
     
     
     
    diff --git a/docs/src/secondary_massey/secondary_massey.rs.html b/docs/src/secondary_massey/secondary_massey.rs.html
    index b50c81347..434e2c6c3 100644
    --- a/docs/src/secondary_massey/secondary_massey.rs.html
    +++ b/docs/src/secondary_massey/secondary_massey.rs.html
    @@ -1,4 +1,4 @@
    -secondary_massey.rs - source
    +secondary_massey.rs - source
     
     
     
    @@ -513,28 +513,6 @@
     488
     489
     490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
    -502
    -503
    -504
    -505
    -506
    -507
    -508
    -509
    -510
    -511
    -512
     
    //! Computes massey products in $\Mod_{C\tau^2}$.
     //!
     //! # Usage
    @@ -706,19 +684,11 @@
         if is_unit {
             res_lift.extend_all();
         } else {
    -        #[cfg(feature = "concurrent")]
    -        rayon::join(|| res_lift.extend_all(), || unit_lift.extend_all());
    -
    -        #[cfg(not(feature = "concurrent"))]
    -        {
    -            res_lift.extend_all();
    -            unit_lift.extend_all();
    -        }
    +        maybe_rayon::join(|| res_lift.extend_all(), || unit_lift.extend_all());
         }
     
         // Now extend homomorphisms
    -    #[cfg(feature = "concurrent")]
    -    rayon::scope(|s| {
    +    maybe_rayon::scope(|s| {
             s.spawn(|_| {
                 a.underlying().extend_all();
                 a.extend_all();
    @@ -735,20 +705,6 @@
             }
         });
     
    -    #[cfg(not(feature = "concurrent"))]
    -    {
    -        a.underlying().extend_all();
    -        a.extend_all();
    -        b.underlying().extend_all();
    -        b.extend_all();
    -        if let Some(a_tau) = &a_tau {
    -            a_tau.extend_all();
    -        }
    -        if let Some(b_tau) = &b_tau {
    -            b_tau.extend_all();
    -        }
    -    }
    -
         let res_sseq = Arc::new(res_lift.e3_page());
         let unit_sseq = if is_unit {
             Arc::clone(&res_sseq)
    diff --git a/docs/src/secondary_product/secondary_product.rs.html b/docs/src/secondary_product/secondary_product.rs.html
    index fe0de1f23..f535d5131 100644
    --- a/docs/src/secondary_product/secondary_product.rs.html
    +++ b/docs/src/secondary_product/secondary_product.rs.html
    @@ -1,4 +1,4 @@
    -secondary_product.rs - source
    +secondary_product.rs - source
     
     
     
    diff --git a/docs/src/sq0/sq0.rs.html b/docs/src/sq0/sq0.rs.html
    index 75a9051e5..8d9b9f984 100644
    --- a/docs/src/sq0/sq0.rs.html
    +++ b/docs/src/sq0/sq0.rs.html
    @@ -1,4 +1,4 @@
    -sq0.rs - source
    +sq0.rs - source
     
     
     
    diff --git a/docs/src/sseq/bigraded.rs.html b/docs/src/sseq/bigraded.rs.html
    index 7434c97d4..d7769676b 100644
    --- a/docs/src/sseq/bigraded.rs.html
    +++ b/docs/src/sseq/bigraded.rs.html
    @@ -1,4 +1,4 @@
    -bigraded.rs - source
    +bigraded.rs - source
     
     
     
    diff --git a/docs/src/sseq/coordinates/bidegree.rs.html b/docs/src/sseq/coordinates/bidegree.rs.html
    index e480701da..df563a9f3 100644
    --- a/docs/src/sseq/coordinates/bidegree.rs.html
    +++ b/docs/src/sseq/coordinates/bidegree.rs.html
    @@ -1,4 +1,4 @@
    -bidegree.rs - source
    +bidegree.rs - source
     
     
     
    @@ -115,19 +115,15 @@
     90
     91
     92
    -93
    -94
     
    use std::{
         fmt::{self, Display, Formatter},
         ops::{Add, Sub},
     };
     
    -#[cfg(feature = "json")]
    -use serde::{Deserialize, Serialize};
    +use serde::{Deserialize, Serialize};
     
     /// Type synonym for (s, t) bidegrees.
    -#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
    -#[cfg_attr(feature = "json", derive(Serialize, Deserialize))]
    +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
     pub struct Bidegree {
         /// Homological degree
         s: u32,
    diff --git a/docs/src/sseq/coordinates/element.rs.html b/docs/src/sseq/coordinates/element.rs.html
    index c7e9c00f2..61f84b54b 100644
    --- a/docs/src/sseq/coordinates/element.rs.html
    +++ b/docs/src/sseq/coordinates/element.rs.html
    @@ -1,4 +1,4 @@
    -element.rs - source
    +element.rs - source
     
     
     
    diff --git a/docs/src/sseq/coordinates/generator.rs.html b/docs/src/sseq/coordinates/generator.rs.html
    index e11129963..5eadc0fee 100644
    --- a/docs/src/sseq/coordinates/generator.rs.html
    +++ b/docs/src/sseq/coordinates/generator.rs.html
    @@ -1,4 +1,4 @@
    -generator.rs - source
    +generator.rs - source
     
     
     
    @@ -103,19 +103,15 @@
     78
     79
     80
    -81
    -82
     
    use super::{Bidegree, BidegreeElement};
     
     use std::fmt::{self, Display, Formatter};
     
    -#[cfg(feature = "json")]
    -use serde::{Deserialize, Serialize};
    +use serde::{Deserialize, Serialize};
     
     /// A *basis* element of a bigraded vector space. Most commonly used to index elements of spectral
     /// sequences.
    -#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
    -#[cfg_attr(feature = "json", derive(Serialize, Deserialize))]
    +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
     pub struct BidegreeGenerator {
         /// Bidegree of the element
         degree: Bidegree,
    diff --git a/docs/src/sseq/coordinates/mod.rs.html b/docs/src/sseq/coordinates/mod.rs.html
    index 27afcf4cc..31d20a9d0 100644
    --- a/docs/src/sseq/coordinates/mod.rs.html
    +++ b/docs/src/sseq/coordinates/mod.rs.html
    @@ -1,4 +1,4 @@
    -mod.rs - source
    +mod.rs - source
     
     
     
    @@ -116,7 +116,6 @@
     91
     92
     93
    -94
     
    pub mod bidegree;
     pub mod element;
     pub mod generator;
    @@ -127,6 +126,8 @@
     pub use generator::BidegreeGenerator;
     pub use range::BidegreeRange;
     
    +use maybe_rayon::prelude::*;
    +
     /// Given a function `f(s, t)`, compute it for every `s` in `[min_s, max_s]` and every `t` in
     /// `[min_t, max_t(s)]`.  Further, we only compute `f(s, t)` when `f(s - 1, t')` has been computed
     /// for all `t' < t`.
    @@ -143,19 +144,16 @@
     /// # Arguments:
     ///  - `max_s`: This is exclusive
     ///  - `max_t`: This is exclusive
    -#[cfg(feature = "concurrent")]
     pub fn iter_s_t<T: Sync>(
         f: &(impl Fn(Bidegree) -> std::ops::Range<i32> + Sync),
         min: Bidegree,
         max: BidegreeRange<T>,
     ) {
    -    use rayon::prelude::*;
    -
    -    rayon::scope(|scope| {
    +    maybe_rayon::scope(|scope| {
             // Rust does not support recursive closures, so we have to pass everything along as
             // arguments.
             fn run<'a, S: Sync>(
    -            scope: &rayon::Scope<'a>,
    +            scope: &maybe_rayon::Scope<'a>,
                 f: &'a (impl Fn(Bidegree) -> std::ops::Range<i32> + Sync + 'a),
                 max: BidegreeRange<'a, S>,
                 current: Bidegree,
    @@ -168,22 +166,22 @@
                     if !ret.is_empty() {
                         // We spawn a new scope to avoid recursion, which may blow the stack
                         scope.spawn(move |scope| {
    -                        ret.into_par_iter()
    +                        ret.maybe_into_par_iter()
                                 .for_each(|t| run(scope, f, max, Bidegree::s_t(current.s() + 1, t)));
                         });
                     }
                 }
             }
     
    -        rayon::join(
    +        maybe_rayon::join(
                 || {
                     (min.t()..max.t(min.s()))
    -                    .into_par_iter()
    +                    .maybe_into_par_iter()
                         .for_each(|t| run(scope, f, max, Bidegree::s_t(min.s(), t)))
                 },
                 || {
                     (min.s() + 1..max.s())
    -                    .into_par_iter()
    +                    .maybe_into_par_iter()
                         .for_each(|s| run(scope, f, max, Bidegree::s_t(s, min.t())))
                 },
             );
    diff --git a/docs/src/sseq/coordinates/range.rs.html b/docs/src/sseq/coordinates/range.rs.html
    index dc13762d3..8c7cb8ccb 100644
    --- a/docs/src/sseq/coordinates/range.rs.html
    +++ b/docs/src/sseq/coordinates/range.rs.html
    @@ -1,4 +1,4 @@
    -range.rs - source
    +range.rs - source
     
     
     
    diff --git a/docs/src/sseq/differential.rs.html b/docs/src/sseq/differential.rs.html
    index 97f5b4161..51cdb165d 100644
    --- a/docs/src/sseq/differential.rs.html
    +++ b/docs/src/sseq/differential.rs.html
    @@ -1,4 +1,4 @@
    -differential.rs - source
    +differential.rs - source
     
     
     
    diff --git a/docs/src/sseq/lib.rs.html b/docs/src/sseq/lib.rs.html
    index d13b9b27d..1e89ca4d4 100644
    --- a/docs/src/sseq/lib.rs.html
    +++ b/docs/src/sseq/lib.rs.html
    @@ -1,4 +1,4 @@
    -lib.rs - source
    +lib.rs - source
     
     
     
    diff --git a/docs/src/sseq/sseq.rs.html b/docs/src/sseq/sseq.rs.html
    index c19a6e42d..f25d31300 100644
    --- a/docs/src/sseq/sseq.rs.html
    +++ b/docs/src/sseq/sseq.rs.html
    @@ -1,4 +1,4 @@
    -sseq.rs - source
    +sseq.rs - source
     
     
     
    diff --git a/docs/src/steenrod/steenrod.rs.html b/docs/src/steenrod/steenrod.rs.html
    index e6eea18fa..49dee1010 100644
    --- a/docs/src/steenrod/steenrod.rs.html
    +++ b/docs/src/steenrod/steenrod.rs.html
    @@ -1,4 +1,4 @@
    -steenrod.rs - source
    +steenrod.rs - source
     
     
     
    diff --git a/docs/src/tensor/tensor.rs.html b/docs/src/tensor/tensor.rs.html
    index 310ae8640..96d266eca 100644
    --- a/docs/src/tensor/tensor.rs.html
    +++ b/docs/src/tensor/tensor.rs.html
    @@ -1,4 +1,4 @@
    -tensor.rs - source
    +tensor.rs - source
     
     
     
    diff --git a/docs/src/unstable_chart/unstable_chart.rs.html b/docs/src/unstable_chart/unstable_chart.rs.html
    index 65d862a62..b019e9ca1 100644
    --- a/docs/src/unstable_chart/unstable_chart.rs.html
    +++ b/docs/src/unstable_chart/unstable_chart.rs.html
    @@ -1,4 +1,4 @@
    -unstable_chart.rs - source
    +unstable_chart.rs - source
     
     
     
    diff --git a/docs/src/unstable_suspension/unstable_suspension.rs.html b/docs/src/unstable_suspension/unstable_suspension.rs.html
    index 8abd88612..11f940418 100644
    --- a/docs/src/unstable_suspension/unstable_suspension.rs.html
    +++ b/docs/src/unstable_suspension/unstable_suspension.rs.html
    @@ -1,4 +1,4 @@
    -unstable_suspension.rs - source
    +unstable_suspension.rs - source
     
     
     
    diff --git a/docs/src/yoneda/yoneda.rs.html b/docs/src/yoneda/yoneda.rs.html
    index 35b9c10ff..f2e29e9a6 100644
    --- a/docs/src/yoneda/yoneda.rs.html
    +++ b/docs/src/yoneda/yoneda.rs.html
    @@ -1,4 +1,4 @@
    -yoneda.rs - source
    +yoneda.rs - source
     
     
     
    diff --git a/docs/sseq/all.html b/docs/sseq/all.html
    index 3ffb19304..ec2180617 100644
    --- a/docs/sseq/all.html
    +++ b/docs/sseq/all.html
    @@ -1,4 +1,4 @@
    -List of all items in this crate
    +List of all items in this crate
     
     
     
    @@ -23,4 +23,4 @@
         });
     
     
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/sseq/bigraded/index.html b/docs/sseq/bigraded/index.html index af8a5947d..61deef267 100644 --- a/docs/sseq/bigraded/index.html +++ b/docs/sseq/bigraded/index.html @@ -1,4 +1,4 @@ -sseq::bigraded - Rust +sseq::bigraded - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/sseq/bigraded/struct.DenseBigradedModule.html b/docs/sseq/bigraded/struct.DenseBigradedModule.html index 6c8a84442..50494f3e9 100644 --- a/docs/sseq/bigraded/struct.DenseBigradedModule.html +++ b/docs/sseq/bigraded/struct.DenseBigradedModule.html @@ -1,4 +1,4 @@ -DenseBigradedModule in sseq::bigraded - Rust +DenseBigradedModule in sseq::bigraded - Rust @@ -23,19 +23,19 @@ }); -
    pub struct DenseBigradedModule {
    -    dimensions: OnceBiVec<OnceBiVec<usize>>,
    -    min_y: i32,
    -}

    Fields§

    §dimensions: OnceBiVec<OnceBiVec<usize>>§min_y: i32

    Implementations§

    source§

    impl DenseBigradedModule

    source

    pub fn new(min_x: i32, min_y: i32) -> Self

    source

    pub const fn min_x(&self) -> i32

    source

    pub const fn min_y(&self) -> i32

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&self, x: i32, y: i32, dim: usize)

    This can only be set when bidegrees to the left and bottom of (x, y) have been set.

    -
    source

    pub fn get_dimension(&self, x: i32, y: i32) -> Option<usize>

    The dimension in a bidegree, None if not yet defined

    -
    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct DenseBigradedModule {
    +    dimensions: OnceBiVec<OnceBiVec<usize>>,
    +    min_y: i32,
    +}

    Fields§

    §dimensions: OnceBiVec<OnceBiVec<usize>>§min_y: i32

    Implementations§

    source§

    impl DenseBigradedModule

    source

    pub fn new(min_x: i32, min_y: i32) -> Self

    source

    pub const fn min_x(&self) -> i32

    source

    pub const fn min_y(&self) -> i32

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&self, x: i32, y: i32, dim: usize)

    This can only be set when bidegrees to the left and bottom of (x, y) have been set.

    +
    source

    pub fn get_dimension(&self, x: i32, y: i32) -> Option<usize>

    The dimension in a bidegree, None if not yet defined

    +
    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/coordinates/bidegree/index.html b/docs/sseq/coordinates/bidegree/index.html index a6c038711..f5eb4a5a3 100644 --- a/docs/sseq/coordinates/bidegree/index.html +++ b/docs/sseq/coordinates/bidegree/index.html @@ -1,4 +1,4 @@ -sseq::coordinates::bidegree - Rust +sseq::coordinates::bidegree - Rust @@ -23,4 +23,4 @@ }); -

    Module sseq::coordinates::bidegree

    source ·

    Structs

    • Type synonym for (s, t) bidegrees.
    \ No newline at end of file +

    Module sseq::coordinates::bidegree

    source ·

    Structs

    • Type synonym for (s, t) bidegrees.
    \ No newline at end of file diff --git a/docs/sseq/coordinates/bidegree/struct.Bidegree.html b/docs/sseq/coordinates/bidegree/struct.Bidegree.html index c24c6d331..adf94c141 100644 --- a/docs/sseq/coordinates/bidegree/struct.Bidegree.html +++ b/docs/sseq/coordinates/bidegree/struct.Bidegree.html @@ -1,4 +1,4 @@ -Bidegree in sseq::coordinates::bidegree - Rust +Bidegree in sseq::coordinates::bidegree - Rust @@ -23,42 +23,42 @@ }); -
    pub struct Bidegree {
    -    s: u32,
    -    t: i32,
    +
    pub struct Bidegree {
    +    s: u32,
    +    t: i32,
     }
    Expand description

    Type synonym for (s, t) bidegrees.

    -

    Fields§

    §s: u32

    Homological degree

    -
    §t: i32

    Internal degree

    -

    Implementations§

    source§

    impl Bidegree

    source

    pub const fn s_t(s: u32, t: i32) -> Self

    source

    pub const fn t_s(t: i32, s: u32) -> Self

    source

    pub const fn n_s(n: i32, s: u32) -> Self

    source

    pub const fn zero() -> Self

    source

    pub fn s(&self) -> u32

    source

    pub fn t(&self) -> i32

    source

    pub fn n(&self) -> i32

    source

    pub fn try_subtract(&self, smaller: Bidegree) -> Option<Bidegree>

    Returns difference as a bidegree if the difference in homological degrees is nonnegative, +

    Fields§

    §s: u32

    Homological degree

    +
    §t: i32

    Internal degree

    +

    Implementations§

    source§

    impl Bidegree

    source

    pub const fn s_t(s: u32, t: i32) -> Self

    source

    pub const fn t_s(t: i32, s: u32) -> Self

    source

    pub const fn n_s(n: i32, s: u32) -> Self

    source

    pub const fn zero() -> Self

    source

    pub fn s(&self) -> u32

    source

    pub fn t(&self) -> i32

    source

    pub fn n(&self) -> i32

    source

    pub fn try_subtract(&self, smaller: Bidegree) -> Option<Bidegree>

    Returns difference as a bidegree if the difference in homological degrees is nonnegative, otherwise returns None.

    -
    source

    pub fn massey_bidegree(a: Bidegree, b: Bidegree, c: Bidegree) -> Bidegree

    Computes the bidegree containing the Massey product of elements in the given bidegrees.

    +
    source

    pub fn massey_bidegree(a: Bidegree, b: Bidegree, c: Bidegree) -> Bidegree

    Computes the bidegree containing the Massey product of elements in the given bidegrees.

    Panics

    Panics if every element is in homological degree 0. This is the only case that would result in a bidegree in negative homological degree.

    -

    Trait Implementations§

    source§

    impl Add<Bidegree> for Bidegree

    §

    type Output = Bidegree

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Bidegree) -> Self

    Performs the + operation. Read more
    source§

    impl Clone for Bidegree

    source§

    fn clone(&self) -> Bidegree

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Bidegree

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Bidegree

    source§

    fn default() -> Bidegree

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Bidegree

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Bidegree

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Bidegree

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Bidegree> for Bidegree

    source§

    fn eq(&self, other: &Bidegree) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Bidegree

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Sub<Bidegree> for Bidegree

    §

    type Output = Bidegree

    The resulting type after applying the - operator.
    source§

    fn sub(self, other: Bidegree) -> Self

    Performs the - operation. Read more
    source§

    impl Copy for Bidegree

    source§

    impl Eq for Bidegree

    source§

    impl StructuralEq for Bidegree

    source§

    impl StructuralPartialEq for Bidegree

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere - T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where - H: Hash + ?Sized, - B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl Add<Bidegree> for Bidegree

    §

    type Output = Bidegree

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Bidegree) -> Self

    Performs the + operation. Read more
    source§

    impl Clone for Bidegree

    source§

    fn clone(&self) -> Bidegree

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Bidegree

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Bidegree

    source§

    fn default() -> Bidegree

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Bidegree

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Bidegree

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for Bidegree

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl PartialEq<Bidegree> for Bidegree

    source§

    fn eq(&self, other: &Bidegree) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Bidegree

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Sub<Bidegree> for Bidegree

    §

    type Output = Bidegree

    The resulting type after applying the - operator.
    source§

    fn sub(self, other: Bidegree) -> Self

    Performs the - operation. Read more
    source§

    impl Copy for Bidegree

    source§

    impl Eq for Bidegree

    source§

    impl StructuralEq for Bidegree

    source§

    impl StructuralPartialEq for Bidegree

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<T> CallHasher for Twhere + T: Hash + ?Sized,

    §

    fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Checks if this value is equivalent to the given key. Read more
    §

    impl<Q, K> Equivalent<K> for Qwhere + Q: Eq + ?Sized, + K: Borrow<Q> + ?Sized,

    §

    fn equivalent(&self, key: &K) -> bool

    Compare self to key and return true if they are equal.
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere - T: for<'de> Deserialize<'de>,

    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/sseq/coordinates/element/index.html b/docs/sseq/coordinates/element/index.html index 8148150cb..d979e7b4f 100644 --- a/docs/sseq/coordinates/element/index.html +++ b/docs/sseq/coordinates/element/index.html @@ -1,4 +1,4 @@ -sseq::coordinates::element - Rust +sseq::coordinates::element - Rust @@ -23,5 +23,5 @@ }); -

    Module sseq::coordinates::element

    source ·

    Structs

    -
    source

    pub fn to_string_module<const U: bool, A: MuAlgebra<U>>( +

    source

    pub fn to_string_module<const U: bool, A: MuAlgebra<U>>( &self, module: &MuFreeModule<U, A>, - compact: bool -) -> String

    An algebra-aware string representation. This assumes that the element belongs to module, + compact: bool +) -> String

    An algebra-aware string representation. This assumes that the element belongs to module, and uses the string representation of its underlying algebra’s operations.

    -

    Trait Implementations§

    source§

    impl<'a> Clone for BidegreeElement<'a>

    source§

    fn clone(&self) -> BidegreeElement<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Debug for BidegreeElement<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BidegreeElement<'_>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl TryFrom<BidegreeElement<'_>> for BidegreeGenerator

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: BidegreeElement<'_>) -> Result<Self, Self::Error>

    Performs the conversion.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for BidegreeElement<'a>

    §

    impl<'a> Send for BidegreeElement<'a>

    §

    impl<'a> Sync for BidegreeElement<'a>

    §

    impl<'a> Unpin for BidegreeElement<'a>

    §

    impl<'a> UnwindSafe for BidegreeElement<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Trait Implementations§

    source§

    impl<'a> Clone for BidegreeElement<'a>

    source§

    fn clone(&self) -> BidegreeElement<'a>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'a> Debug for BidegreeElement<'a>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BidegreeElement<'_>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl TryFrom<BidegreeElement<'_>> for BidegreeGenerator

    §

    type Error = ()

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: BidegreeElement<'_>) -> Result<Self, Self::Error>

    Performs the conversion.

    Auto Trait Implementations§

    §

    impl<'a> RefUnwindSafe for BidegreeElement<'a>

    §

    impl<'a> Send for BidegreeElement<'a>

    §

    impl<'a> Sync for BidegreeElement<'a>

    §

    impl<'a> Unpin for BidegreeElement<'a>

    §

    impl<'a> UnwindSafe for BidegreeElement<'a>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere - T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere - T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/coordinates/fn.iter_s_t.html b/docs/sseq/coordinates/fn.iter_s_t.html index 93e265f7e..c6b31b2e9 100644 --- a/docs/sseq/coordinates/fn.iter_s_t.html +++ b/docs/sseq/coordinates/fn.iter_s_t.html @@ -1,4 +1,4 @@ -iter_s_t in sseq::coordinates - Rust +iter_s_t in sseq::coordinates - Rust @@ -23,8 +23,8 @@ }); -

    Function sseq::coordinates::iter_s_t

    source ·
    pub fn iter_s_t<T: Sync>(
    -    f: &(impl Fn(Bidegree) -> Range<i32> + Sync),
    +

    Function sseq::coordinates::iter_s_t

    source ·
    pub fn iter_s_t<T: Sync>(
    +    f: &(impl Fn(Bidegree) -> Range<i32> + Sync),
         min: Bidegree,
         max: BidegreeRange<'_, T>
     )
    Expand description

    Given a function f(s, t), compute it for every s in [min_s, max_s] and every t in @@ -34,7 +34,7 @@ f(s, t') has already been computed for every t' < T.

    While iter_s_t could have had kept track of that data, it is usually the case that f would compute something and write it to a OnceBiVec, and -OnceBiVec::push_ooo would return this range for us.

    +OnceBiVec::push_ooo would return this range for us.

    This uses [rayon] under the hood, and f should feel free to use further rayon parallelism.

    Arguments:

    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T> ToOwned for Twhere + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for Twhere + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    source§

    impl<T> DeserializeOwned for Twhere + T: for<'de> Deserialize<'de>,

    \ No newline at end of file diff --git a/docs/sseq/coordinates/index.html b/docs/sseq/coordinates/index.html index 4e2756d23..1fb39e1f5 100644 --- a/docs/sseq/coordinates/index.html +++ b/docs/sseq/coordinates/index.html @@ -1,4 +1,4 @@ -sseq::coordinates - Rust +sseq::coordinates - Rust @@ -23,6 +23,6 @@ }); -

    Module sseq::coordinates

    source ·

    Re-exports

    Modules

    Functions

    \ No newline at end of file diff --git a/docs/sseq/differential/index.html b/docs/sseq/differential/index.html index 946f03f51..df4d43bb7 100644 --- a/docs/sseq/differential/index.html +++ b/docs/sseq/differential/index.html @@ -1,4 +1,4 @@ -sseq::differential - Rust +sseq::differential - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/sseq/differential/struct.Differential.html b/docs/sseq/differential/struct.Differential.html index b7bdf216b..606d59207 100644 --- a/docs/sseq/differential/struct.Differential.html +++ b/docs/sseq/differential/struct.Differential.html @@ -1,4 +1,4 @@ -Differential in sseq::differential - Rust +Differential in sseq::differential - Rust @@ -23,13 +23,13 @@ }); -
    pub struct Differential {
    -    pub matrix: Matrix,
    -    first_empty_row: usize,
    -    source_dim: usize,
    -    target_dim: usize,
    -    error: bool,
    -}

    Fields§

    §matrix: Matrix§first_empty_row: usize§source_dim: usize§target_dim: usize§error: bool

    Implementations§

    source§

    impl Differential

    source

    pub fn new(p: ValidPrime, source_dim: usize, target_dim: usize) -> Self

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, source: Slice<'_>, target: Option<Slice<'_>>) -> bool

    Add a differential

    +
    pub struct Differential {
    +    pub matrix: Matrix,
    +    first_empty_row: usize,
    +    source_dim: usize,
    +    target_dim: usize,
    +    error: bool,
    +}

    Fields§

    §matrix: Matrix§first_empty_row: usize§source_dim: usize§target_dim: usize§error: bool

    Implementations§

    source§

    impl Differential

    source

    pub fn new(p: ValidPrime, source_dim: usize, target_dim: usize) -> Self

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, source: Slice<'_>, target: Option<Slice<'_>>) -> bool

    Add a differential

    Return

    Whether a new differential was indeed added. If false, the differential is already existent.

    @@ -39,26 +39,26 @@
    Arguments
  • target: The target of the differential. If None, the differential is zero. This should be reduced by the known images of earlier differentials.
  • -
    source

    pub fn get_source_target_pairs(&self) -> Vec<(FpVector, FpVector)>

    An iterator of differentials in the form (source, target)

    -
    source

    pub fn reduce_target(&mut self, zeros: &Subspace)

    Given a subspace of the target space, project the target vectors to the complement.

    -
    source

    pub fn evaluate(&self, source: Slice<'_>, target: SliceMut<'_>)

    This evaluates the differential on source, adding the result to target. This assumes +

    source

    pub fn get_source_target_pairs(&self) -> Vec<(FpVector, FpVector)>

    An iterator of differentials in the form (source, target)

    +
    source

    pub fn reduce_target(&mut self, zeros: &Subspace)

    Given a subspace of the target space, project the target vectors to the complement.

    +
    source

    pub fn evaluate(&self, source: Slice<'_>, target: SliceMut<'_>)

    This evaluates the differential on source, adding the result to target. This assumes all unspecified differentials are zero. More precisely, it assumes every non-pivot column of the differential matrix has zero differential. This may or may not be actually true (e.g. if we only know d(a + b) = c, it might be that d(a) = c and d(b) = 0, or vice versa, or neither. Here we assume d(a) = c and d(b) = 0.

    -
    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn inconsistent(&self) -> bool

    Whether the current set of differentials is inconsistent. This should be called only after +

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn inconsistent(&self) -> bool

    Whether the current set of differentials is inconsistent. This should be called only after reduce_target is called.

    -
    source

    pub fn quasi_inverse(&self, result: SliceMut<'_>, value: Slice<'_>)

    Find the differential that hits value, and write the result to result.

    +
    source

    pub fn quasi_inverse(&self, result: SliceMut<'_>, value: Slice<'_>)

    Find the differential that hits value, and write the result to result.

    This computes the quasi-inverse from scratch and allocates two matrices, and should not be used in a hot path.

    -

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/index.html b/docs/sseq/index.html index d4a5fc625..568a71036 100644 --- a/docs/sseq/index.html +++ b/docs/sseq/index.html @@ -1,4 +1,4 @@ -sseq - Rust +sseq - Rust @@ -23,4 +23,4 @@ }); -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/sseq/sseq/index.html b/docs/sseq/sseq/index.html index 66f0fffa0..ca7990aed 100644 --- a/docs/sseq/sseq/index.html +++ b/docs/sseq/sseq/index.html @@ -1,4 +1,4 @@ -sseq::sseq - Rust +sseq::sseq - Rust @@ -23,4 +23,4 @@ }); -

    Module sseq::sseq

    source ·

    Structs

    Traits

    \ No newline at end of file +

    Module sseq::sseq

    source ·

    Structs

    Traits

    \ No newline at end of file diff --git a/docs/sseq/sseq/struct.Adams.html b/docs/sseq/sseq/struct.Adams.html index b58865af0..4be8ad2fb 100644 --- a/docs/sseq/sseq/struct.Adams.html +++ b/docs/sseq/sseq/struct.Adams.html @@ -1,4 +1,4 @@ -Adams in sseq::sseq - Rust +Adams in sseq::sseq - Rust @@ -23,14 +23,14 @@ }); -

    Struct sseq::sseq::Adams

    source ·
    pub struct Adams;

    Trait Implementations§

    source§

    impl SseqProfile for Adams

    source§

    const MIN_R: i32 = 2i32

    source§

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn differential_length(_diff_x: i32, diff_y: i32) -> i32

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Adams

    §

    impl Send for Adams

    §

    impl Sync for Adams

    §

    impl Unpin for Adams

    §

    impl UnwindSafe for Adams

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Struct sseq::sseq::Adams

    source ·
    pub struct Adams;

    Trait Implementations§

    source§

    impl SseqProfile for Adams

    source§

    const MIN_R: i32 = 2i32

    source§

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn differential_length(_diff_x: i32, diff_y: i32) -> i32

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Adams

    §

    impl Send for Adams

    §

    impl Sync for Adams

    §

    impl Unpin for Adams

    §

    impl UnwindSafe for Adams

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/sseq/struct.Product.html b/docs/sseq/sseq/struct.Product.html index 078574c9c..0427342b7 100644 --- a/docs/sseq/sseq/struct.Product.html +++ b/docs/sseq/sseq/struct.Product.html @@ -1,4 +1,4 @@ -Product in sseq::sseq - Rust +Product in sseq::sseq - Rust @@ -23,20 +23,20 @@ }); -

    Struct sseq::sseq::Product

    source ·
    pub struct Product {
    -    pub x: i32,
    -    pub y: i32,
    -    pub left: bool,
    -    pub matrices: BiVec<BiVec<Option<Matrix>>>,
    -}

    Fields§

    §x: i32§y: i32§left: bool

    Whether the product acts on the left or not. This affects the sign in the Leibniz rule.

    -
    §matrices: BiVec<BiVec<Option<Matrix>>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Struct sseq::sseq::Product

    source ·
    pub struct Product {
    +    pub x: i32,
    +    pub y: i32,
    +    pub left: bool,
    +    pub matrices: BiVec<BiVec<Option<Matrix>>>,
    +}

    Fields§

    §x: i32§y: i32§left: bool

    Whether the product acts on the left or not. This affects the sign in the Leibniz rule.

    +
    §matrices: BiVec<BiVec<Option<Matrix>>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/sseq/struct.Sseq.html b/docs/sseq/sseq/struct.Sseq.html index 5dfca32bb..8ea6f6a37 100644 --- a/docs/sseq/sseq/struct.Sseq.html +++ b/docs/sseq/sseq/struct.Sseq.html @@ -1,4 +1,4 @@ -Sseq in sseq::sseq - Rust +Sseq in sseq::sseq - Rust @@ -23,19 +23,19 @@ }); -

    Struct sseq::sseq::Sseq

    source ·
    pub struct Sseq<P: SseqProfile = Adams> {
    -    p: ValidPrime,
    -    classes: Arc<DenseBigradedModule>,
    -    differentials: BiVec<BiVec<BiVec<Differential>>>,
    -    permanent_classes: BiVec<BiVec<Subspace>>,
    -    page_data: BiVec<BiVec<BiVec<Subquotient>>>,
    -    invalid: BiVec<BiVec<bool>>,
    -    profile: PhantomData<P>,
    -}

    Fields§

    §p: ValidPrime§classes: Arc<DenseBigradedModule>

    The first page of the spectral sequence

    -
    §differentials: BiVec<BiVec<BiVec<Differential>>>

    x -> y -> r -> differential

    +

    Struct sseq::sseq::Sseq

    source ·
    pub struct Sseq<P: SseqProfile = Adams> {
    +    p: ValidPrime,
    +    classes: Arc<DenseBigradedModule>,
    +    differentials: BiVec<BiVec<BiVec<Differential>>>,
    +    permanent_classes: BiVec<BiVec<Subspace>>,
    +    page_data: BiVec<BiVec<BiVec<Subquotient>>>,
    +    invalid: BiVec<BiVec<bool>>,
    +    profile: PhantomData<P>,
    +}

    Fields§

    §p: ValidPrime§classes: Arc<DenseBigradedModule>

    The first page of the spectral sequence

    +
    §differentials: BiVec<BiVec<BiVec<Differential>>>

    x -> y -> r -> differential

    If the bidegree is valid (see Sseq::invalid), then the differential is reduced.

    -
    §permanent_classes: BiVec<BiVec<Subspace>>

    x -> y -> permanent_classes

    -
    §page_data: BiVec<BiVec<BiVec<Subquotient>>>

    x -> y -> r -> E_r^{x, y} as a subquotient of the original bidegree.

    +
    §permanent_classes: BiVec<BiVec<Subspace>>

    x -> y -> permanent_classes

    +
    §page_data: BiVec<BiVec<BiVec<Subquotient>>>

    x -> y -> r -> E_r^{x, y} as a subquotient of the original bidegree.

    The “quotient” part of the subquotient is always accurate, but the “sub” part may not be. The invalid field tracks which bidegrees are valid.

    This is always the full ambient space when r = P::MIN_R, but we set min_degree to @@ -44,50 +44,50 @@

    Invariants:

    • if differential[x][y][r] is defined, then page_data[x][y][r + 1] and page_data[tx][ty][r + 1] are always defined,
    -
    §invalid: BiVec<BiVec<bool>>

    x -> y -> validity. A bidegree is invalid if the page_data is no longer accurate.

    -
    §profile: PhantomData<P>

    Implementations§

    source§

    impl<P: SseqProfile> Sseq<P>

    source

    pub fn new(p: ValidPrime, min_x: i32, min_y: i32) -> Self

    source

    pub fn min_x(&self) -> i32

    source

    pub fn min_y(&self) -> i32

    source

    pub fn classes(&self) -> Arc<DenseBigradedModule>

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&mut self, x: i32, y: i32, dim: usize)

    source

    pub fn clear(&mut self)

    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    source

    pub fn add_permanent_class(&mut self, x: i32, y: i32, class: Slice<'_>) -> bool

    §invalid: BiVec<BiVec<bool>>

    x -> y -> validity. A bidegree is invalid if the page_data is no longer accurate.

    +
    §profile: PhantomData<P>

    Implementations§

    source§

    impl<P: SseqProfile> Sseq<P>

    source

    pub fn new(p: ValidPrime, min_x: i32, min_y: i32) -> Self

    source

    pub fn min_x(&self) -> i32

    source

    pub fn min_y(&self) -> i32

    source

    pub fn classes(&self) -> Arc<DenseBigradedModule>

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&mut self, x: i32, y: i32, dim: usize)

    source

    pub fn clear(&mut self)

    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    source

    pub fn add_permanent_class(&mut self, x: i32, y: i32, class: Slice<'_>) -> bool

    Returns

    Whether a new permanent class was added

    -
    source

    fn extend_differential(&mut self, r: i32, x: i32, y: i32)

    Ensure self.differentials[x][y][r] is defined. Must call extend_page_data on the source +

    source

    fn extend_differential(&mut self, r: i32, x: i32, y: i32)

    Ensure self.differentials[x][y][r] is defined. Must call extend_page_data on the source and target after this.

    -
    source

    fn extend_page_data(&mut self, r: i32, x: i32, y: i32)

    Ensure self.page_data[x][y][r] is defined

    +
    source

    fn extend_page_data(&mut self, r: i32, x: i32, y: i32)

    Ensure self.page_data[x][y][r] is defined

    source

    pub fn add_differential( &mut self, - r: i32, - x: i32, - y: i32, - source: Slice<'_>, - target: Slice<'_> -) -> bool

    Add a $d_r$ differential from bidegree $(x, y)$, with the given source and target + r: i32, + x: i32, + y: i32, + source: Slice<'_>, + target: Slice<'_> +) -> bool

    Add a $d_r$ differential from bidegree $(x, y)$, with the given source and target classes.

    Return

    Whether the differential is new

    -
    source

    pub fn invalid(&self, x: i32, y: i32) -> bool

    source

    pub fn update(&mut self)

    source

    pub fn update_bidegree(&mut self, x: i32, y: i32) -> BiVec<Vec<Vec<u32>>>

    This returns the vec of differentials to draw on each page.

    -
    source

    pub fn complete(&self, x: i32, y: i32) -> bool

    Whether the calcuations at bidegree (x, y) are complete. This means all classes on the +

    source

    pub fn invalid(&self, x: i32, y: i32) -> bool

    source

    pub fn update(&mut self)

    source

    pub fn update_bidegree(&mut self, x: i32, y: i32) -> BiVec<Vec<Vec<u32>>>

    This returns the vec of differentials to draw on each page.

    +
    source

    pub fn complete(&self, x: i32, y: i32) -> bool

    Whether the calcuations at bidegree (x, y) are complete. This means all classes on the final page are known to be permanent.

    -
    source

    pub fn inconsistent(&self, x: i32, y: i32) -> bool

    Whether there is an inconsistent differential involving bidegree (x, y).

    -
    source

    pub fn differentials(&self, x: i32, y: i32) -> &BiVec<Differential>

    source

    pub fn differentials_hitting( +

    source

    pub fn inconsistent(&self, x: i32, y: i32) -> bool

    Whether there is an inconsistent differential involving bidegree (x, y).

    +
    source

    pub fn differentials(&self, x: i32, y: i32) -> &BiVec<Differential>

    source

    pub fn differentials_hitting( &self, - x: i32, - y: i32 -) -> impl Iterator<Item = (i32, &Differential)> + '_

    source

    pub fn permanent_classes(&self, x: i32, y: i32) -> &Subspace

    source

    pub fn page_data(&self, x: i32, y: i32) -> &BiVec<Subquotient>

    source

    pub fn multiply( + x: i32, + y: i32 +) -> impl Iterator<Item = (i32, &Differential)> + '_

    source

    pub fn permanent_classes(&self, x: i32, y: i32) -> &Subspace

    source

    pub fn page_data(&self, x: i32, y: i32) -> &BiVec<Subquotient>

    source

    pub fn multiply( &self, - x: i32, - y: i32, - class: Slice<'_>, + x: i32, + y: i32, + class: Slice<'_>, prod: &Product -) -> Option<(i32, i32, FpVector)>

    Compute the product between product and the class class at (x, y). Returns None if +) -> Option<(i32, i32, FpVector)>

    Compute the product between product and the class class at (x, y). Returns None if the product is not yet computed.

    source

    pub fn leibniz( &mut self, - r: i32, - x: i32, - y: i32, - class: Slice<'_>, + r: i32, + x: i32, + y: i32, + class: Slice<'_>, source_product: &Product, - target_product: Option<&Product> -) -> Option<(i32, i32, i32, FpVector)>

    Apply the Leibniz rule to obtain new differentials. The differential we start with is a d_r + target_product: Option<&Product> +) -> Option<(i32, i32, i32, FpVector)>

    Apply the Leibniz rule to obtain new differentials. The differential we start with is a d_r differential from (x, y) with source s and target t. If the source is permanent, then r -should be set to i32::MAX.

    +should be set to i32::MAX.

    Arguments
    • source_product the product to multiply the class with
    • @@ -102,24 +102,24 @@
      Return
    source

    pub fn write_to_graph<'a, T: Backend>( &self, g: T, - r: i32, - differentials: bool, - products: impl Iterator<Item = &'a (String, Product)> + Clone, - header: impl FnOnce(&mut T) -> Result<(), T::Error> -) -> Result<(), T::Error>

    This shifts the sseq horizontally so that the minimum x is 0.

    -

    Auto Trait Implementations§

    §

    impl<P> RefUnwindSafe for Sseq<P>where - P: RefUnwindSafe,

    §

    impl<P> Send for Sseq<P>where - P: Send,

    §

    impl<P> Sync for Sseq<P>where - P: Sync,

    §

    impl<P> Unpin for Sseq<P>where - P: Unpin,

    §

    impl<P> UnwindSafe for Sseq<P>where - P: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + r: i32, + differentials: bool, + products: impl Iterator<Item = &'a (String, Product)> + Clone, + header: impl FnOnce(&mut T) -> Result<(), T::Error> +) -> Result<(), T::Error>

    This shifts the sseq horizontally so that the minimum x is 0.

    +

    Auto Trait Implementations§

    §

    impl<P> RefUnwindSafe for Sseq<P>where + P: RefUnwindSafe,

    §

    impl<P> Send for Sseq<P>where + P: Send,

    §

    impl<P> Sync for Sseq<P>where + P: Sync,

    §

    impl<P> Unpin for Sseq<P>where + P: Unpin,

    §

    impl<P> UnwindSafe for Sseq<P>where + P: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/sseq/trait.SseqProfile.html b/docs/sseq/sseq/trait.SseqProfile.html index 92d27b3de..382fb2e3f 100644 --- a/docs/sseq/sseq/trait.SseqProfile.html +++ b/docs/sseq/sseq/trait.SseqProfile.html @@ -1,4 +1,4 @@ -SseqProfile in sseq::sseq - Rust +SseqProfile in sseq::sseq - Rust @@ -23,12 +23,12 @@ }); -

    Trait sseq::sseq::SseqProfile

    source ·
    pub trait SseqProfile {
    -    const MIN_R: i32;
    +

    Trait sseq::sseq::SseqProfile

    source ·
    pub trait SseqProfile {
    +    const MIN_R: i32;
     
         // Required methods
    -    fn profile(r: i32, x: i32, y: i32) -> (i32, i32);
    -    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32);
    -    fn differential_length(diff_x: i32, diff_y: i32) -> i32;
    +    fn profile(r: i32, x: i32, y: i32) -> (i32, i32);
    +    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32);
    +    fn differential_length(diff_x: i32, diff_y: i32) -> i32;
     }
    Expand description

    The direction of the differentials

    -

    Required Associated Constants§

    Required Methods§

    source

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn differential_length(diff_x: i32, diff_y: i32) -> i32

    Implementors§

    \ No newline at end of file +

    Required Associated Constants§

    Required Methods§

    source

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn differential_length(diff_x: i32, diff_y: i32) -> i32

    Implementors§

    \ No newline at end of file diff --git a/docs/sseq/struct.Adams.html b/docs/sseq/struct.Adams.html index 2a6a04d24..971f3e388 100644 --- a/docs/sseq/struct.Adams.html +++ b/docs/sseq/struct.Adams.html @@ -1,4 +1,4 @@ -Adams in sseq - Rust +Adams in sseq - Rust @@ -23,14 +23,14 @@ }); -

    Struct sseq::Adams

    source ·
    pub struct Adams;

    Trait Implementations§

    source§

    impl SseqProfile for Adams

    source§

    const MIN_R: i32 = 2i32

    source§

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn differential_length(_diff_x: i32, diff_y: i32) -> i32

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Adams

    §

    impl Send for Adams

    §

    impl Sync for Adams

    §

    impl Unpin for Adams

    §

    impl UnwindSafe for Adams

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Struct sseq::Adams

    source ·
    pub struct Adams;

    Trait Implementations§

    source§

    impl SseqProfile for Adams

    source§

    const MIN_R: i32 = 2i32

    source§

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source§

    fn differential_length(_diff_x: i32, diff_y: i32) -> i32

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Adams

    §

    impl Send for Adams

    §

    impl Sync for Adams

    §

    impl Unpin for Adams

    §

    impl UnwindSafe for Adams

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/struct.DenseBigradedModule.html b/docs/sseq/struct.DenseBigradedModule.html index 9d383b952..19a0f4ee3 100644 --- a/docs/sseq/struct.DenseBigradedModule.html +++ b/docs/sseq/struct.DenseBigradedModule.html @@ -1,4 +1,4 @@ -DenseBigradedModule in sseq - Rust +DenseBigradedModule in sseq - Rust @@ -23,19 +23,19 @@ }); -
    pub struct DenseBigradedModule {
    -    dimensions: OnceBiVec<OnceBiVec<usize>>,
    -    min_y: i32,
    -}

    Fields§

    §dimensions: OnceBiVec<OnceBiVec<usize>>§min_y: i32

    Implementations§

    source§

    impl DenseBigradedModule

    source

    pub fn new(min_x: i32, min_y: i32) -> Self

    source

    pub const fn min_x(&self) -> i32

    source

    pub const fn min_y(&self) -> i32

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&self, x: i32, y: i32, dim: usize)

    This can only be set when bidegrees to the left and bottom of (x, y) have been set.

    -
    source

    pub fn get_dimension(&self, x: i32, y: i32) -> Option<usize>

    The dimension in a bidegree, None if not yet defined

    -
    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +
    pub struct DenseBigradedModule {
    +    dimensions: OnceBiVec<OnceBiVec<usize>>,
    +    min_y: i32,
    +}

    Fields§

    §dimensions: OnceBiVec<OnceBiVec<usize>>§min_y: i32

    Implementations§

    source§

    impl DenseBigradedModule

    source

    pub fn new(min_x: i32, min_y: i32) -> Self

    source

    pub const fn min_x(&self) -> i32

    source

    pub const fn min_y(&self) -> i32

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&self, x: i32, y: i32, dim: usize)

    This can only be set when bidegrees to the left and bottom of (x, y) have been set.

    +
    source

    pub fn get_dimension(&self, x: i32, y: i32) -> Option<usize>

    The dimension in a bidegree, None if not yet defined

    +
    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/struct.Differential.html b/docs/sseq/struct.Differential.html index 307130dcf..75d61f03d 100644 --- a/docs/sseq/struct.Differential.html +++ b/docs/sseq/struct.Differential.html @@ -1,4 +1,4 @@ -Differential in sseq - Rust +Differential in sseq - Rust @@ -23,13 +23,13 @@ }); -

    Struct sseq::Differential

    source ·
    pub struct Differential {
    -    pub matrix: Matrix,
    -    first_empty_row: usize,
    -    source_dim: usize,
    -    target_dim: usize,
    -    error: bool,
    -}

    Fields§

    §matrix: Matrix§first_empty_row: usize§source_dim: usize§target_dim: usize§error: bool

    Implementations§

    source§

    impl Differential

    source

    pub fn new(p: ValidPrime, source_dim: usize, target_dim: usize) -> Self

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, source: Slice<'_>, target: Option<Slice<'_>>) -> bool

    Add a differential

    +

    Struct sseq::Differential

    source ·
    pub struct Differential {
    +    pub matrix: Matrix,
    +    first_empty_row: usize,
    +    source_dim: usize,
    +    target_dim: usize,
    +    error: bool,
    +}

    Fields§

    §matrix: Matrix§first_empty_row: usize§source_dim: usize§target_dim: usize§error: bool

    Implementations§

    source§

    impl Differential

    source

    pub fn new(p: ValidPrime, source_dim: usize, target_dim: usize) -> Self

    source

    pub fn set_to_zero(&mut self)

    source

    pub fn add(&mut self, source: Slice<'_>, target: Option<Slice<'_>>) -> bool

    Add a differential

    Return

    Whether a new differential was indeed added. If false, the differential is already existent.

    @@ -39,26 +39,26 @@
    Arguments
  • target: The target of the differential. If None, the differential is zero. This should be reduced by the known images of earlier differentials.
  • -
    source

    pub fn get_source_target_pairs(&self) -> Vec<(FpVector, FpVector)>

    An iterator of differentials in the form (source, target)

    -
    source

    pub fn reduce_target(&mut self, zeros: &Subspace)

    Given a subspace of the target space, project the target vectors to the complement.

    -
    source

    pub fn evaluate(&self, source: Slice<'_>, target: SliceMut<'_>)

    This evaluates the differential on source, adding the result to target. This assumes +

    source

    pub fn get_source_target_pairs(&self) -> Vec<(FpVector, FpVector)>

    An iterator of differentials in the form (source, target)

    +
    source

    pub fn reduce_target(&mut self, zeros: &Subspace)

    Given a subspace of the target space, project the target vectors to the complement.

    +
    source

    pub fn evaluate(&self, source: Slice<'_>, target: SliceMut<'_>)

    This evaluates the differential on source, adding the result to target. This assumes all unspecified differentials are zero. More precisely, it assumes every non-pivot column of the differential matrix has zero differential. This may or may not be actually true (e.g. if we only know d(a + b) = c, it might be that d(a) = c and d(b) = 0, or vice versa, or neither. Here we assume d(a) = c and d(b) = 0.

    -
    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn inconsistent(&self) -> bool

    Whether the current set of differentials is inconsistent. This should be called only after +

    source

    pub fn prime(&self) -> ValidPrime

    source

    pub fn inconsistent(&self) -> bool

    Whether the current set of differentials is inconsistent. This should be called only after reduce_target is called.

    -
    source

    pub fn quasi_inverse(&self, result: SliceMut<'_>, value: Slice<'_>)

    Find the differential that hits value, and write the result to result.

    +
    source

    pub fn quasi_inverse(&self, result: SliceMut<'_>, value: Slice<'_>)

    Find the differential that hits value, and write the result to result.

    This computes the quasi-inverse from scratch and allocates two matrices, and should not be used in a hot path.

    -

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/struct.Product.html b/docs/sseq/struct.Product.html index b5602026e..51522c19f 100644 --- a/docs/sseq/struct.Product.html +++ b/docs/sseq/struct.Product.html @@ -1,4 +1,4 @@ -Product in sseq - Rust +Product in sseq - Rust @@ -23,20 +23,20 @@ }); -

    Struct sseq::Product

    source ·
    pub struct Product {
    -    pub x: i32,
    -    pub y: i32,
    -    pub left: bool,
    -    pub matrices: BiVec<BiVec<Option<Matrix>>>,
    -}

    Fields§

    §x: i32§y: i32§left: bool

    Whether the product acts on the left or not. This affects the sign in the Leibniz rule.

    -
    §matrices: BiVec<BiVec<Option<Matrix>>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    Struct sseq::Product

    source ·
    pub struct Product {
    +    pub x: i32,
    +    pub y: i32,
    +    pub left: bool,
    +    pub matrices: BiVec<BiVec<Option<Matrix>>>,
    +}

    Fields§

    §x: i32§y: i32§left: bool

    Whether the product acts on the left or not. This affects the sign in the Leibniz rule.

    +
    §matrices: BiVec<BiVec<Option<Matrix>>>

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/struct.Sseq.html b/docs/sseq/struct.Sseq.html index 07a868d07..dc463e59f 100644 --- a/docs/sseq/struct.Sseq.html +++ b/docs/sseq/struct.Sseq.html @@ -1,4 +1,4 @@ -Sseq in sseq - Rust +Sseq in sseq - Rust @@ -23,19 +23,19 @@ }); -

    Struct sseq::Sseq

    source ·
    pub struct Sseq<P: SseqProfile = Adams> {
    -    p: ValidPrime,
    -    classes: Arc<DenseBigradedModule>,
    -    differentials: BiVec<BiVec<BiVec<Differential>>>,
    -    permanent_classes: BiVec<BiVec<Subspace>>,
    -    page_data: BiVec<BiVec<BiVec<Subquotient>>>,
    -    invalid: BiVec<BiVec<bool>>,
    -    profile: PhantomData<P>,
    -}

    Fields§

    §p: ValidPrime§classes: Arc<DenseBigradedModule>

    The first page of the spectral sequence

    -
    §differentials: BiVec<BiVec<BiVec<Differential>>>

    x -> y -> r -> differential

    +

    Struct sseq::Sseq

    source ·
    pub struct Sseq<P: SseqProfile = Adams> {
    +    p: ValidPrime,
    +    classes: Arc<DenseBigradedModule>,
    +    differentials: BiVec<BiVec<BiVec<Differential>>>,
    +    permanent_classes: BiVec<BiVec<Subspace>>,
    +    page_data: BiVec<BiVec<BiVec<Subquotient>>>,
    +    invalid: BiVec<BiVec<bool>>,
    +    profile: PhantomData<P>,
    +}

    Fields§

    §p: ValidPrime§classes: Arc<DenseBigradedModule>

    The first page of the spectral sequence

    +
    §differentials: BiVec<BiVec<BiVec<Differential>>>

    x -> y -> r -> differential

    If the bidegree is valid (see Sseq::invalid), then the differential is reduced.

    -
    §permanent_classes: BiVec<BiVec<Subspace>>

    x -> y -> permanent_classes

    -
    §page_data: BiVec<BiVec<BiVec<Subquotient>>>

    x -> y -> r -> E_r^{x, y} as a subquotient of the original bidegree.

    +
    §permanent_classes: BiVec<BiVec<Subspace>>

    x -> y -> permanent_classes

    +
    §page_data: BiVec<BiVec<BiVec<Subquotient>>>

    x -> y -> r -> E_r^{x, y} as a subquotient of the original bidegree.

    The “quotient” part of the subquotient is always accurate, but the “sub” part may not be. The invalid field tracks which bidegrees are valid.

    This is always the full ambient space when r = P::MIN_R, but we set min_degree to @@ -44,50 +44,50 @@

    Invariants:

    • if differential[x][y][r] is defined, then page_data[x][y][r + 1] and page_data[tx][ty][r + 1] are always defined,
    -
    §invalid: BiVec<BiVec<bool>>

    x -> y -> validity. A bidegree is invalid if the page_data is no longer accurate.

    -
    §profile: PhantomData<P>

    Implementations§

    source§

    impl<P: SseqProfile> Sseq<P>

    source

    pub fn new(p: ValidPrime, min_x: i32, min_y: i32) -> Self

    source

    pub fn min_x(&self) -> i32

    source

    pub fn min_y(&self) -> i32

    source

    pub fn classes(&self) -> Arc<DenseBigradedModule>

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&mut self, x: i32, y: i32, dim: usize)

    source

    pub fn clear(&mut self)

    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    source

    pub fn add_permanent_class(&mut self, x: i32, y: i32, class: Slice<'_>) -> bool

    §invalid: BiVec<BiVec<bool>>

    x -> y -> validity. A bidegree is invalid if the page_data is no longer accurate.

    +
    §profile: PhantomData<P>

    Implementations§

    source§

    impl<P: SseqProfile> Sseq<P>

    source

    pub fn new(p: ValidPrime, min_x: i32, min_y: i32) -> Self

    source

    pub fn min_x(&self) -> i32

    source

    pub fn min_y(&self) -> i32

    source

    pub fn classes(&self) -> Arc<DenseBigradedModule>

    source

    pub fn range(&self, x: i32) -> Range<i32>

    source

    pub fn max_x(&self) -> i32

    source

    pub fn max_y(&self) -> i32

    source

    pub fn defined(&self, x: i32, y: i32) -> bool

    source

    pub fn set_dimension(&mut self, x: i32, y: i32, dim: usize)

    source

    pub fn clear(&mut self)

    source

    pub fn dimension(&self, x: i32, y: i32) -> usize

    source

    pub fn add_permanent_class(&mut self, x: i32, y: i32, class: Slice<'_>) -> bool

    Returns

    Whether a new permanent class was added

    -
    source

    fn extend_differential(&mut self, r: i32, x: i32, y: i32)

    Ensure self.differentials[x][y][r] is defined. Must call extend_page_data on the source +

    source

    fn extend_differential(&mut self, r: i32, x: i32, y: i32)

    Ensure self.differentials[x][y][r] is defined. Must call extend_page_data on the source and target after this.

    -
    source

    fn extend_page_data(&mut self, r: i32, x: i32, y: i32)

    Ensure self.page_data[x][y][r] is defined

    +
    source

    fn extend_page_data(&mut self, r: i32, x: i32, y: i32)

    Ensure self.page_data[x][y][r] is defined

    source

    pub fn add_differential( &mut self, - r: i32, - x: i32, - y: i32, - source: Slice<'_>, - target: Slice<'_> -) -> bool

    Add a $d_r$ differential from bidegree $(x, y)$, with the given source and target + r: i32, + x: i32, + y: i32, + source: Slice<'_>, + target: Slice<'_> +) -> bool

    Add a $d_r$ differential from bidegree $(x, y)$, with the given source and target classes.

    Return

    Whether the differential is new

    -
    source

    pub fn invalid(&self, x: i32, y: i32) -> bool

    source

    pub fn update(&mut self)

    source

    pub fn update_bidegree(&mut self, x: i32, y: i32) -> BiVec<Vec<Vec<u32>>>

    This returns the vec of differentials to draw on each page.

    -
    source

    pub fn complete(&self, x: i32, y: i32) -> bool

    Whether the calcuations at bidegree (x, y) are complete. This means all classes on the +

    source

    pub fn invalid(&self, x: i32, y: i32) -> bool

    source

    pub fn update(&mut self)

    source

    pub fn update_bidegree(&mut self, x: i32, y: i32) -> BiVec<Vec<Vec<u32>>>

    This returns the vec of differentials to draw on each page.

    +
    source

    pub fn complete(&self, x: i32, y: i32) -> bool

    Whether the calcuations at bidegree (x, y) are complete. This means all classes on the final page are known to be permanent.

    -
    source

    pub fn inconsistent(&self, x: i32, y: i32) -> bool

    Whether there is an inconsistent differential involving bidegree (x, y).

    -
    source

    pub fn differentials(&self, x: i32, y: i32) -> &BiVec<Differential>

    source

    pub fn differentials_hitting( +

    source

    pub fn inconsistent(&self, x: i32, y: i32) -> bool

    Whether there is an inconsistent differential involving bidegree (x, y).

    +
    source

    pub fn differentials(&self, x: i32, y: i32) -> &BiVec<Differential>

    source

    pub fn differentials_hitting( &self, - x: i32, - y: i32 -) -> impl Iterator<Item = (i32, &Differential)> + '_

    source

    pub fn permanent_classes(&self, x: i32, y: i32) -> &Subspace

    source

    pub fn page_data(&self, x: i32, y: i32) -> &BiVec<Subquotient>

    source

    pub fn multiply( + x: i32, + y: i32 +) -> impl Iterator<Item = (i32, &Differential)> + '_

    source

    pub fn permanent_classes(&self, x: i32, y: i32) -> &Subspace

    source

    pub fn page_data(&self, x: i32, y: i32) -> &BiVec<Subquotient>

    source

    pub fn multiply( &self, - x: i32, - y: i32, - class: Slice<'_>, + x: i32, + y: i32, + class: Slice<'_>, prod: &Product -) -> Option<(i32, i32, FpVector)>

    Compute the product between product and the class class at (x, y). Returns None if +) -> Option<(i32, i32, FpVector)>

    Compute the product between product and the class class at (x, y). Returns None if the product is not yet computed.

    source

    pub fn leibniz( &mut self, - r: i32, - x: i32, - y: i32, - class: Slice<'_>, + r: i32, + x: i32, + y: i32, + class: Slice<'_>, source_product: &Product, - target_product: Option<&Product> -) -> Option<(i32, i32, i32, FpVector)>

    Apply the Leibniz rule to obtain new differentials. The differential we start with is a d_r + target_product: Option<&Product> +) -> Option<(i32, i32, i32, FpVector)>

    Apply the Leibniz rule to obtain new differentials. The differential we start with is a d_r differential from (x, y) with source s and target t. If the source is permanent, then r -should be set to i32::MAX.

    +should be set to i32::MAX.

    Arguments
    • source_product the product to multiply the class with
    • @@ -102,24 +102,24 @@
      Return
    source

    pub fn write_to_graph<'a, T: Backend>( &self, g: T, - r: i32, - differentials: bool, - products: impl Iterator<Item = &'a (String, Product)> + Clone, - header: impl FnOnce(&mut T) -> Result<(), T::Error> -) -> Result<(), T::Error>

    This shifts the sseq horizontally so that the minimum x is 0.

    -

    Auto Trait Implementations§

    §

    impl<P> RefUnwindSafe for Sseq<P>where - P: RefUnwindSafe,

    §

    impl<P> Send for Sseq<P>where - P: Send,

    §

    impl<P> Sync for Sseq<P>where - P: Sync,

    §

    impl<P> Unpin for Sseq<P>where - P: Unpin,

    §

    impl<P> UnwindSafe for Sseq<P>where - P: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    + r: i32, + differentials: bool, + products: impl Iterator<Item = &'a (String, Product)> + Clone, + header: impl FnOnce(&mut T) -> Result<(), T::Error> +) -> Result<(), T::Error>

    This shifts the sseq horizontally so that the minimum x is 0.

    +

    Auto Trait Implementations§

    §

    impl<P> RefUnwindSafe for Sseq<P>where + P: RefUnwindSafe,

    §

    impl<P> Send for Sseq<P>where + P: Send,

    §

    impl<P> Sync for Sseq<P>where + P: Sync,

    §

    impl<P> Unpin for Sseq<P>where + P: Unpin,

    §

    impl<P> UnwindSafe for Sseq<P>where + P: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = mem::align_of::<T>()

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file +From<T> for U chooses to do.

    +
    §

    impl<T> Pointable for T

    §

    const ALIGN: usize = _

    The alignment of pointer.
    §

    type Init = T

    The type for initializers.
    §

    unsafe fn init(init: <T as Pointable>::Init) -> usize

    Initializes a with the given initializer. Read more
    §

    unsafe fn deref<'a>(ptr: usize) -> &'a T

    Dereferences the given pointer. Read more
    §

    unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

    Mutably dereferences the given pointer. Read more
    §

    unsafe fn drop(ptr: usize)

    Drops the object pointed to by the given pointer. Read more
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/docs/sseq/trait.SseqProfile.html b/docs/sseq/trait.SseqProfile.html index b2853ab05..62997ba7b 100644 --- a/docs/sseq/trait.SseqProfile.html +++ b/docs/sseq/trait.SseqProfile.html @@ -1,4 +1,4 @@ -SseqProfile in sseq - Rust +SseqProfile in sseq - Rust @@ -23,12 +23,12 @@ }); -

    Trait sseq::SseqProfile

    source ·
    pub trait SseqProfile {
    -    const MIN_R: i32;
    +

    Trait sseq::SseqProfile

    source ·
    pub trait SseqProfile {
    +    const MIN_R: i32;
     
         // Required methods
    -    fn profile(r: i32, x: i32, y: i32) -> (i32, i32);
    -    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32);
    -    fn differential_length(diff_x: i32, diff_y: i32) -> i32;
    +    fn profile(r: i32, x: i32, y: i32) -> (i32, i32);
    +    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32);
    +    fn differential_length(diff_x: i32, diff_y: i32) -> i32;
     }
    Expand description

    The direction of the differentials

    -

    Required Associated Constants§

    Required Methods§

    source

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn differential_length(diff_x: i32, diff_y: i32) -> i32

    Implementors§

    \ No newline at end of file +

    Required Associated Constants§

    Required Methods§

    source

    fn profile(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn profile_inverse(r: i32, x: i32, y: i32) -> (i32, i32)

    source

    fn differential_length(diff_x: i32, diff_y: i32) -> i32

    Implementors§

    \ No newline at end of file diff --git a/docs/static.files/ayu-fd19013d6ce078bf.css b/docs/static.files/ayu-fd19013d6ce078bf.css deleted file mode 100644 index ba3aa60e0..000000000 --- a/docs/static.files/ayu-fd19013d6ce078bf.css +++ /dev/null @@ -1 +0,0 @@ - :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#src-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.src .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus,#src-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/dark-0a43001d3fc2282c.css b/docs/static.files/dark-0a43001d3fc2282c.css deleted file mode 100644 index 81032b2fa..000000000 --- a/docs/static.files/dark-0a43001d3fc2282c.css +++ /dev/null @@ -1 +0,0 @@ -:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);} \ No newline at end of file diff --git a/docs/static.files/light-1596385f77d47ef2.css b/docs/static.files/light-1596385f77d47ef2.css deleted file mode 100644 index 50adde5b0..000000000 --- a/docs/static.files/light-1596385f77d47ef2.css +++ /dev/null @@ -1 +0,0 @@ -:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);} \ No newline at end of file diff --git a/docs/static.files/main-0795b7d26be81095.js b/docs/static.files/main-0795b7d26be81095.js deleted file mode 100644 index 87b433898..000000000 --- a/docs/static.files/main-0795b7d26be81095.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss(getVar("static-root-path")+getVar("settings-css"));loadScript(getVar("static-root-path")+getVar("settings-js"));preLoadCss(getVar("static-root-path")+getVar("theme-light-css"));preLoadCss(getVar("static-root-path")+getVar("theme-dark-css"));preLoadCss(getVar("static-root-path")+getVar("theme-ayu-css"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

    "+searchState.loadingText+"

    ";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
    "+window.NOTABLE_TRAITS[notable_ty]+"
    "}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointermove=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
    "+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
    "+x[1]+"
    ").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

    Keyboard Shortcuts

    "+shortcuts+"
    ";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for functions that accept or return \ - slices and \ - arrays by writing \ - square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

    "+x+"

    ").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

    Search Tricks

    "+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=function(switchFocus){hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=function(){onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/docs/static.files/main-c5bd66d33317d69f.js b/docs/static.files/main-c5bd66d33317d69f.js new file mode 100644 index 000000000..43133d66e --- /dev/null +++ b/docs/static.files/main-c5bd66d33317d69f.js @@ -0,0 +1,12 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar&&locationTitle){const mobileTitle=document.createElement("h2");mobileTitle.innerHTML=locationTitle.innerHTML;mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

    "+searchState.loadingText+"

    ";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
    "+window.NOTABLE_TRAITS[notable_ty]+"
    "}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
    "+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
    "+x[1]+"
    ").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

    Keyboard Shortcuts

    "+shortcuts+"
    ";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

    "+x+"

    ").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

    Search Tricks

    "+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/docs/static.files/noscript-5d8b3c7633ad77ba.css b/docs/static.files/noscript-5d8b3c7633ad77ba.css new file mode 100644 index 000000000..8c63ef065 --- /dev/null +++ b/docs/static.files/noscript-5d8b3c7633ad77ba.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}@media (prefers-color-scheme:dark){:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}} \ No newline at end of file diff --git a/docs/static.files/noscript-cffde32267a19fd6.css b/docs/static.files/noscript-cffde32267a19fd6.css deleted file mode 100644 index 12d3f6dd5..000000000 --- a/docs/static.files/noscript-cffde32267a19fd6.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;} \ No newline at end of file diff --git a/docs/static.files/rustdoc-cb6f1f67f1bcd037.css b/docs/static.files/rustdoc-cb6f1f67f1bcd037.css deleted file mode 100644 index ac787240c..000000000 --- a/docs/static.files/rustdoc-cb6f1f67f1bcd037.css +++ /dev/null @@ -1,8 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}p:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#search-tabs .count{display:block;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/docs/static.files/rustdoc-fa3bb1812debf86c.css b/docs/static.files/rustdoc-fa3bb1812debf86c.css new file mode 100644 index 000000000..2dd5cebca --- /dev/null +++ b/docs/static.files/rustdoc-fa3bb1812debf86c.css @@ -0,0 +1,10 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"]{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a,:root[data-theme="ayu"] #source-sidebar>.title{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/docs/static.files/search-6dfdfced5eff6596.js b/docs/static.files/search-6dfdfced5eff6596.js deleted file mode 100644 index 90d0eb753..000000000 --- a/docs/static.files/search-6dfdfced5eff6596.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict";(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return-1}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:-1,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:-1,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,literalSearch:false,error:null,correction:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem){return unifyFunctionTypes(fnType.generics,queryElem.generics)}function unifyFunctionTypes(fnTypes,queryElems){if(queryElems.length===0){return true}if(!fnTypes||fnTypes.length===0){return false}const queryElemSet=new Map();const addQueryElemToQueryElemSet=function addQueryElemToQueryElemSet(queryElem){let currentQueryElemList;if(queryElemSet.has(queryElem.id)){currentQueryElemList=queryElemSet.get(queryElem.id)}else{currentQueryElemList=[];queryElemSet.set(queryElem.id,currentQueryElemList)}currentQueryElemList.push(queryElem)};for(const queryElem of queryElems){addQueryElemToQueryElemSet(queryElem)}const fnTypeSet=new Map();const addFnTypeToFnTypeSet=function addFnTypeToFnTypeSet(fnType){const queryContainsArrayOrSliceElem=queryElemSet.has(typeNameIdOfArrayOrSlice);if(fnType.id===-1||!(queryElemSet.has(fnType.id)||(fnType.id===typeNameIdOfSlice&&queryContainsArrayOrSliceElem)||(fnType.id===typeNameIdOfArray&&queryContainsArrayOrSliceElem))){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentQueryElemList=queryElemSet.get(fnType.id)||[];let matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)});if(matchIdx===-1&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)&&queryContainsArrayOrSliceElem){currentQueryElemList=queryElemSet.get(typeNameIdOfArrayOrSlice)||[];matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)})}if(matchIdx===-1){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentFnTypeList;if(fnTypeSet.has(fnType.id)){currentFnTypeList=fnTypeSet.get(fnType.id)}else{currentFnTypeList=[];fnTypeSet.set(fnType.id,currentFnTypeList)}currentFnTypeList.push(fnType)};for(const fnType of fnTypes){addFnTypeToFnTypeSet(fnType)}const doHandleQueryElemList=(currentFnTypeList,queryElemList)=>{if(queryElemList.length===0){return true}const queryElem=queryElemList.pop();const l=currentFnTypeList.length;for(let i=0;i{if(!fnTypeSet.has(id)){if(id===typeNameIdOfArrayOrSlice){return handleQueryElemList(typeNameIdOfSlice,queryElemList)||handleQueryElemList(typeNameIdOfArray,queryElemList)}return false}const currentFnTypeList=fnTypeSet.get(id);if(currentFnTypeList.length0?checkIfInList(row.generics,elem):false}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem)}return true}return checkIfInList(row.generics,elem)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems)){return}if(!unifyFunctionTypes(row.type.output,parsedQuery.returned)){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);function convertNameToId(elem){if(typeNameIdMap.has(elem.name)){elem.id=typeNameIdMap.get(elem.name)}else if(!parsedQuery.literalSearch){let match=-1;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.name,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==-1){parsedQuery.correction=matchName}elem.id=match}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
    \ -${item.alias} - see \ -
    `}resultName.insertAdjacentHTML("beforeend",`
    ${alias}\ -${item.displayPath}${name}\ -
    `);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
    "+"Try on DuckDuckGo?

    "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
    "}let output=`

    Results${crates}

    `;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

    Query parser error: "${error.join("")}".

    `;output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+"
    ";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    "}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
    "+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
    ";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

    "+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

    `}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;return types.map(type=>{let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}return{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:generics,}})}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){const pathIndex=functionSearchType[INPUTS_DATA];inputs=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){const pathIndex=functionSearchType[OUTPUT_DATA];output=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}return{inputs,output,}}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];typeNameIdMap=new Map();const charA="A".charCodeAt(0);let currentIndex=0;let id=0;typeNameIdOfArray=buildTypeMapIndex("array");typeNameIdOfSlice=buildTypeMapIndex("slice");typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),deprecated:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const deprecatedItems=new Set(crateCorpus.c);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];let len=paths.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/docs/static.files/search-8be46b629f5f14a8.js b/docs/static.files/search-8be46b629f5f14a8.js new file mode 100644 index 000000000..4ecf5c55f --- /dev/null +++ b/docs/static.files/search-8be46b629f5f14a8.js @@ -0,0 +1,5 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias","generic",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const TY_GENERIC=itemTypes.indexOf("generic");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:null,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem,whereClause,mgensInout){return unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgensInout,mgens=>{if(mgensInout){for(const[fid,qid]of mgens.entries()){mgensInout.set(fid,qid)}}return true})}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb){let mgens=new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;let fl=fnTypesIn.length;let fnTypes=fnTypesIn.slice();const backtracking=[];let i=0;let j=0;const backtrack=()=>{while(backtracking.length!==0){const{fnTypesScratch,mgensScratch,queryElemsOffset,fnTypesOffset,unbox,}=backtracking.pop();mgens=new Map(mgensScratch);const fnType=fnTypesScratch[fnTypesOffset];const queryElem=queryElems[queryElemsOffset];if(unbox){if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}mgens.set(fnType.id,0)}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;fnTypes=fnTypesScratch.toSpliced(fnTypesOffset,1,...generics);fl=fnTypes.length;i=queryElemsOffset-1}else{if(fnType.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}mgens.set(fnType.id,queryElem.id)}fnTypes=fnTypesScratch.slice();fl=fnTypes.length;const tmp=fnTypes[queryElemsOffset];fnTypes[queryElemsOffset]=fnTypes[fnTypesOffset];fnTypes[fnTypesOffset]=tmp;i=queryElemsOffset}return true}return false};for(i=0;i!==ql;++i){const queryElem=queryElems[i];const matchCandidates=[];let fnTypesScratch=null;let mgensScratch=null;for(j=i;j!==fl;++j){const fnType=fnTypes[j];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}unifyFunctionTypes(fnType.generics,queryElem.generics,whereClause,mgens,mgensScratch=>{matchCandidates.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:false,});return false})}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){if(!fnTypesScratch){fnTypesScratch=fnTypes.slice()}if(!mgensScratch){mgensScratch=new Map(mgens)}backtracking.push({fnTypesScratch,mgensScratch,queryElemsOffset:i,fnTypesOffset:j,unbox:true,})}}if(matchCandidates.length===0){if(backtrack()){continue}else{return false}}const{fnTypesOffset:candidate,mgensScratch:mgensNew}=matchCandidates.pop();if(fnTypes[candidate].id<0&&queryElems[i].id<0){mgens.set(fnTypes[candidate].id,queryElems[i].id)}for(const[fid,qid]of mgensNew){mgens.set(fid,qid)}const tmp=fnTypes[candidate];fnTypes[candidate]=fnTypes[i];fnTypes[i]=tmp;for(const otherCandidate of matchCandidates){backtracking.push(otherCandidate)}while(i===(ql-1)&&solutionCb&&!solutionCb(mgens)){if(!backtrack()){return false}}}return true}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgens.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}else if(fnType.id!==null){if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(fnType.id!==queryElem.id){return false}if(fnType.generics.length===0&&queryElem.generics.length!==0){return false}const queryElemPathLength=queryElem.pathWithoutLast.length;if(queryElemPathLength>0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i=0){if(!whereClause){return false}if(mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause)}else if(fnType.generics&&fnType.generics.length>0){return checkIfInList(fnType.generics,queryElem,whereClause)}return false}function checkIfInList(list,elem,whereClause){for(const entry of list){if(checkType(entry,elem,whereClause)){return true}}return false}function checkType(row,elem,whereClause){if(row.id===null){return row.generics.length>0?checkIfInList(row.generics,elem,whereClause):false}if(row.id<0&&elem.id>=0){const gid=(-row.id)-1;return checkIfInList(whereClause[gid],elem,whereClause)}if(row.id<0&&elem.id<0){return true}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem,whereClause,new Map())}return true}return checkIfInList(row.generics,elem,whereClause)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens)})){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem){if(typeNameIdMap.has(elem.pathLast)){elem.id=typeNameIdMap.get(elem.pathLast)}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.pathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
    \ +${item.alias} - see \ +
    `}resultName.insertAdjacentHTML("beforeend",`
    ${alias}\ +${item.displayPath}${name}\ +
    `);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
    "+"Try on DuckDuckGo?

    "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
    "}let output=`

    Results${crates}

    `;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

    Query parser error: "${error.join("")}".

    `;output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+"
    ";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
    "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    "}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
    "+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
    ";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

    "+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

    `}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

    "+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

    `}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.map(type=>buildItemSearchType(type,lowercasePaths))}function buildItemSearchType(type,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}if(pathIndex<0){return{id:pathIndex,ty:TY_GENERIC,path:null,generics,}}if(pathIndex===0){return{id:null,ty:null,path:null,generics,}}const item=lowercasePaths[pathIndex-1];return{id:buildTypeMapIndex(item.name),ty:item.ty,path:item.path,generics,}}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}lowercasePaths.push({ty:ty,name:name.toLowerCase(),path:path});paths[i]={ty:ty,name:name,path:path}}lastPath="";len=itemTypes.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/docs/static.files/settings-de11bff964e9d4e5.js b/docs/static.files/settings-74424d7eec62a23e.js similarity index 70% rename from docs/static.files/settings-de11bff964e9d4e5.js rename to docs/static.files/settings-74424d7eec62a23e.js index cc508a861..3014f75c5 100644 --- a/docs/static.files/settings-de11bff964e9d4e5.js +++ b/docs/static.files/settings-74424d7eec62a23e.js @@ -1,4 +1,4 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\
    ${setting_name}
    `;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ @@ -14,4 +14,4 @@ \ ${setting_name}\ \ -
    `}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
    ${buildSettingsPageSections(settings)}
    `;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=function(event){if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file +
    `}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
    ${buildSettingsPageSections(settings)}
    `;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/docs/static.files/settings-8c76f75bfb6bd192.css b/docs/static.files/settings-8c76f75bfb6bd192.css deleted file mode 100644 index 5241bb861..000000000 --- a/docs/static.files/settings-8c76f75bfb6bd192.css +++ /dev/null @@ -1,3 +0,0 @@ -.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;} \ No newline at end of file diff --git a/docs/static.files/storage-db41da1a38ea3cb8.js b/docs/static.files/storage-db41da1a38ea3cb8.js deleted file mode 100644 index b87281359..000000000 --- a/docs/static.files/storage-db41da1a38ea3cb8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}let newHref;if(newThemeName==="light"||newThemeName==="dark"||newThemeName==="ayu"){newHref=getVar("static-root-path")+getVar("theme-"+newThemeName+"-css")}else{newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css"}if(!window.currentTheme){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/docs/static.files/storage-fec3eaa3851e447d.js b/docs/static.files/storage-fec3eaa3851e447d.js new file mode 100644 index 000000000..a687118f3 --- /dev/null +++ b/docs/static.files/storage-fec3eaa3851e447d.js @@ -0,0 +1 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/docs/steenrod/all.html b/docs/steenrod/all.html index e6aff6bfa..e1d7a2aa5 100644 --- a/docs/steenrod/all.html +++ b/docs/steenrod/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/steenrod/index.html b/docs/steenrod/index.html index 7e74bf0c4..7293c51bb 100644 --- a/docs/steenrod/index.html +++ b/docs/steenrod/index.html @@ -1,4 +1,4 @@ -steenrod - Rust +steenrod - Rust @@ -23,4 +23,4 @@ }); -

    Crate steenrod

    source ·
    \ No newline at end of file +

    Crate steenrod

    source ·
    \ No newline at end of file diff --git a/docs/tensor/all.html b/docs/tensor/all.html index e23267ed2..848d647e3 100644 --- a/docs/tensor/all.html +++ b/docs/tensor/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/tensor/index.html b/docs/tensor/index.html index 15cd63069..e497b931a 100644 --- a/docs/tensor/index.html +++ b/docs/tensor/index.html @@ -1,4 +1,4 @@ -tensor - Rust +tensor - Rust @@ -23,4 +23,4 @@ }); -

    Crate tensor

    source ·
    \ No newline at end of file +

    Crate tensor

    source ·
    \ No newline at end of file diff --git a/docs/unstable_chart/all.html b/docs/unstable_chart/all.html index 330619fbd..c81b42053 100644 --- a/docs/unstable_chart/all.html +++ b/docs/unstable_chart/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/unstable_chart/index.html b/docs/unstable_chart/index.html index 970882e78..12756b1f0 100644 --- a/docs/unstable_chart/index.html +++ b/docs/unstable_chart/index.html @@ -1,4 +1,4 @@ -unstable_chart - Rust +unstable_chart - Rust @@ -23,7 +23,7 @@ }); -

    Crate unstable_chart

    source ·
    Expand description

    Computes the suspension map between different unstable Ext groups.

    +

    Crate unstable_chart

    source ·
    Expand description

    Computes the suspension map between different unstable Ext groups.

    Given an unstable Steenrod module $M$, compute the unstable Ext groups of $\Sigma^k M$ for all $k$ up till the stable range. Each result is printed in the form

    diff --git a/docs/unstable_suspension/all.html b/docs/unstable_suspension/all.html index 036e36b33..e64e1b56b 100644 --- a/docs/unstable_suspension/all.html +++ b/docs/unstable_suspension/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/unstable_suspension/index.html b/docs/unstable_suspension/index.html index 9e23b6046..31a416d46 100644 --- a/docs/unstable_suspension/index.html +++ b/docs/unstable_suspension/index.html @@ -1,4 +1,4 @@ -unstable_suspension - Rust +unstable_suspension - Rust @@ -23,7 +23,7 @@ }); -
    Expand description

    Computes the suspension map between different unstable Ext groups.

    +
    Expand description

    Computes the suspension map between different unstable Ext groups.

    Given an unstable Steenrod module $M$, compute the unstable Ext groups of $\Sigma^k M$ for all $k$ up till the stable range. Each result is printed in the form

    diff --git a/docs/yoneda/all.html b/docs/yoneda/all.html index ec904bfc5..20801f043 100644 --- a/docs/yoneda/all.html +++ b/docs/yoneda/all.html @@ -1,4 +1,4 @@ -List of all items in this crate +List of all items in this crate @@ -23,4 +23,4 @@ }); -

    List of all items

    \ No newline at end of file +

    List of all items

    \ No newline at end of file diff --git a/docs/yoneda/index.html b/docs/yoneda/index.html index df3d68893..7e6ad0a7d 100644 --- a/docs/yoneda/index.html +++ b/docs/yoneda/index.html @@ -1,4 +1,4 @@ -yoneda - Rust +yoneda - Rust @@ -23,4 +23,4 @@ }); -

    Crate yoneda

    source ·
    \ No newline at end of file +

    Crate yoneda

    source ·
    \ No newline at end of file diff --git a/index.js b/index.js index 4b1cfb96c..819a8f3a8 100644 --- a/index.js +++ b/index.js @@ -278,11 +278,18 @@ messageHandler.Error = m => { document.getElementById('json-upload').addEventListener('change', () => { const file = document.getElementById('json-upload').files[0]; const fileReader = new FileReader(); + fileReader.onload = e => { - // Remove whitespace to shorten URL - const json = JSON.stringify(JSON.parse(e.target.result)); - window.location = `?module_json=${encodeURIComponent(json)}`; + try { + // Remove whitespace to shorten URL + const json = JSON.stringify(JSON.parse(e.target.result)); + window.location = `?module_json=${encodeURIComponent(json)}`; + } catch (error) { + alert('Invalid JSON file: ' + error.message); + console.error('Error parsing JSON:', error); + } }; + fileReader.readAsText(file, 'UTF-8'); }); diff --git a/sseq_gui_wasm_bg.wasm b/sseq_gui_wasm_bg.wasm index 39e1f216fb10bef68431bb73d1b5389064e9b2ba..6069ed840486eecede4a49cb84603a371ba78e19 100644 GIT binary patch literal 859614 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%0Ays0ngdBm%cmp=7de%6=s?TixbTO~M9uw^ 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𝔰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
    {kMrmg4%6TiO>t2{84ng| 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 literal 840191 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

    (ZKFRFkTBDopo}IB9%NpIr)5ERN6UBA6 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