scikit-complexity 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scikit_complexity-0.2.0.dist-info/METADATA +317 -0
- scikit_complexity-0.2.0.dist-info/RECORD +1748 -0
- scikit_complexity-0.2.0.dist-info/WHEEL +4 -0
- scikit_complexity-0.2.0.dist-info/entry_points.txt +4 -0
- scikit_complexity-0.2.0.dist-info/licenses/LICENSE +21 -0
- skcomplex/__init__.py +1 -0
- skcomplex/analysis/__init__.py +101 -0
- skcomplex/analysis/_alignment.py +263 -0
- skcomplex/analysis/_automata.py +658 -0
- skcomplex/analysis/_base.py +841 -0
- skcomplex/analysis/_clusters.py +298 -0
- skcomplex/analysis/_coarse_grain.py +183 -0
- skcomplex/analysis/_collapse.py +318 -0
- skcomplex/analysis/_complexity.py +129 -0
- skcomplex/analysis/_computational_mechanics.py +220 -0
- skcomplex/analysis/_correlation.py +364 -0
- skcomplex/analysis/_defects.py +111 -0
- skcomplex/analysis/_discovery.py +101 -0
- skcomplex/analysis/_displacement.py +135 -0
- skcomplex/analysis/_distribution.py +327 -0
- skcomplex/analysis/_domains.py +220 -0
- skcomplex/analysis/_embedding.py +235 -0
- skcomplex/analysis/_emergence.py +503 -0
- skcomplex/analysis/_entropy.py +425 -0
- skcomplex/analysis/_ergodicity.py +228 -0
- skcomplex/analysis/_events.py +301 -0
- skcomplex/analysis/_fit.py +368 -0
- skcomplex/analysis/_groups.py +205 -0
- skcomplex/analysis/_information.py +488 -0
- skcomplex/analysis/_invariants.py +409 -0
- skcomplex/analysis/_irreversibility.py +421 -0
- skcomplex/analysis/_kramers_moyal.py +104 -0
- skcomplex/analysis/_large_deviations.py +378 -0
- skcomplex/analysis/_linearization.py +231 -0
- skcomplex/analysis/_local_information.py +166 -0
- skcomplex/analysis/_loops.py +394 -0
- skcomplex/analysis/_lyapunov.py +342 -0
- skcomplex/analysis/_markov.py +303 -0
- skcomplex/analysis/_mode_decomposition.py +209 -0
- skcomplex/analysis/_motifs.py +239 -0
- skcomplex/analysis/_neighbors.py +303 -0
- skcomplex/analysis/_networks.py +286 -0
- skcomplex/analysis/_operator.py +312 -0
- skcomplex/analysis/_partial_information.py +118 -0
- skcomplex/analysis/_passage.py +244 -0
- skcomplex/analysis/_recurrence.py +202 -0
- skcomplex/analysis/_reservoirs.py +387 -0
- skcomplex/analysis/_rolling.py +168 -0
- skcomplex/analysis/_scaling.py +370 -0
- skcomplex/analysis/_sections.py +225 -0
- skcomplex/analysis/_signatures.py +250 -0
- skcomplex/analysis/_sparse_identification.py +398 -0
- skcomplex/analysis/_spectrum.py +164 -0
- skcomplex/analysis/_stability.py +547 -0
- skcomplex/analysis/_surrogates.py +127 -0
- skcomplex/analysis/_symbolic.py +639 -0
- skcomplex/analysis/types.py +43 -0
- skcomplex/base.py +159 -0
- skcomplex/core/__init__.py +1 -0
- skcomplex/core/base.py +150 -0
- skcomplex/core/elements/__init__.py +21 -0
- skcomplex/core/elements/_base.py +84 -0
- skcomplex/core/elements/_compartment.py +52 -0
- skcomplex/core/elements/_density.py +52 -0
- skcomplex/core/elements/_element.py +80 -0
- skcomplex/core/elements/_field.py +192 -0
- skcomplex/core/elements/_group.py +241 -0
- skcomplex/core/elements/_lattice.py +115 -0
- skcomplex/core/elements/_point.py +66 -0
- skcomplex/core/interactions/__init__.py +89 -0
- skcomplex/core/interactions/_advection.py +134 -0
- skcomplex/core/interactions/_base.py +361 -0
- skcomplex/core/interactions/_cascade.py +195 -0
- skcomplex/core/interactions/_choice.py +320 -0
- skcomplex/core/interactions/_conservation.py +164 -0
- skcomplex/core/interactions/_coupling.py +741 -0
- skcomplex/core/interactions/_crossing.py +136 -0
- skcomplex/core/interactions/_diffusion.py +99 -0
- skcomplex/core/interactions/_encounter.py +201 -0
- skcomplex/core/interactions/_euler_lagrange.py +183 -0
- skcomplex/core/interactions/_evolution.py +520 -0
- skcomplex/core/interactions/_feedback.py +79 -0
- skcomplex/core/interactions/_gradient.py +293 -0
- skcomplex/core/interactions/_grouping.py +399 -0
- skcomplex/core/interactions/_hamiltonian.py +191 -0
- skcomplex/core/interactions/_hyperedge.py +96 -0
- skcomplex/core/interactions/_imitation.py +357 -0
- skcomplex/core/interactions/_impulse.py +133 -0
- skcomplex/core/interactions/_interaction.py +58 -0
- skcomplex/core/interactions/_jump.py +201 -0
- skcomplex/core/interactions/_life_cycle.py +424 -0
- skcomplex/core/interactions/_local_rule.py +134 -0
- skcomplex/core/interactions/_map.py +239 -0
- skcomplex/core/interactions/_matching.py +701 -0
- skcomplex/core/interactions/_movement.py +377 -0
- skcomplex/core/interactions/_neighbor.py +88 -0
- skcomplex/core/interactions/_optimization.py +206 -0
- skcomplex/core/interactions/_pair.py +82 -0
- skcomplex/core/interactions/_pair_coupling.py +169 -0
- skcomplex/core/interactions/_rate.py +240 -0
- skcomplex/core/interactions/_reaction.py +466 -0
- skcomplex/core/interactions/_reinforcement.py +226 -0
- skcomplex/core/interactions/_relaxation.py +103 -0
- skcomplex/core/interactions/_sampling.py +177 -0
- skcomplex/core/interactions/_satisfiability.py +145 -0
- skcomplex/core/interactions/_sign_adjustment.py +222 -0
- skcomplex/core/interactions/_topology.py +215 -0
- skcomplex/core/interactions/_training.py +184 -0
- skcomplex/core/interactions/_transfer.py +669 -0
- skcomplex/core/interactions/_transition.py +427 -0
- skcomplex/core/laws/__init__.py +60 -0
- skcomplex/core/laws/_base.py +194 -0
- skcomplex/core/laws/_bilinear.py +91 -0
- skcomplex/core/laws/_boundary.py +59 -0
- skcomplex/core/laws/_cascade.py +79 -0
- skcomplex/core/laws/_crossing.py +87 -0
- skcomplex/core/laws/_dissipator.py +79 -0
- skcomplex/core/laws/_drive.py +56 -0
- skcomplex/core/laws/_emission.py +81 -0
- skcomplex/core/laws/_encounter.py +96 -0
- skcomplex/core/laws/_equation.py +105 -0
- skcomplex/core/laws/_extremal.py +94 -0
- skcomplex/core/laws/_flux.py +108 -0
- skcomplex/core/laws/_fractional_noise.py +65 -0
- skcomplex/core/laws/_generator.py +66 -0
- skcomplex/core/laws/_gradient_step.py +89 -0
- skcomplex/core/laws/_jump.py +137 -0
- skcomplex/core/laws/_local_rule.py +92 -0
- skcomplex/core/laws/_match.py +321 -0
- skcomplex/core/laws/_noise.py +125 -0
- skcomplex/core/laws/_rate.py +82 -0
- skcomplex/core/laws/_rule.py +82 -0
- skcomplex/core/laws/_sample.py +65 -0
- skcomplex/core/laws/_transfer.py +165 -0
- skcomplex/core/laws/_transition.py +77 -0
- skcomplex/core/laws/_update.py +121 -0
- skcomplex/core/laws/utils/__init__.py +142 -0
- skcomplex/core/laws/utils/_agents.py +127 -0
- skcomplex/core/laws/utils/_components.py +63 -0
- skcomplex/core/laws/utils/_conditions.py +198 -0
- skcomplex/core/laws/utils/_contractions.py +74 -0
- skcomplex/core/laws/utils/_delays.py +170 -0
- skcomplex/core/laws/utils/_history.py +167 -0
- skcomplex/core/laws/utils/_local_operators.py +68 -0
- skcomplex/core/laws/utils/_lookups.py +40 -0
- skcomplex/core/laws/utils/_moments.py +122 -0
- skcomplex/core/laws/utils/_operators.py +237 -0
- skcomplex/core/laws/utils/_phase.py +126 -0
- skcomplex/core/laws/utils/_pointwise.py +160 -0
- skcomplex/core/laws/utils/_reductions.py +942 -0
- skcomplex/core/laws/utils/_signals.py +214 -0
- skcomplex/core/laws/utils/_tables.py +4 -0
- skcomplex/core/laws/utils/_tensors.py +235 -0
- skcomplex/core/spaces/__init__.py +52 -0
- skcomplex/core/spaces/_adjacency.py +34 -0
- skcomplex/core/spaces/_base.py +218 -0
- skcomplex/core/spaces/_box.py +41 -0
- skcomplex/core/spaces/_cayley.py +352 -0
- skcomplex/core/spaces/_cone.py +65 -0
- skcomplex/core/spaces/_continuous.py +93 -0
- skcomplex/core/spaces/_continuous_time.py +27 -0
- skcomplex/core/spaces/_discrete_time.py +53 -0
- skcomplex/core/spaces/_generator.py +51 -0
- skcomplex/core/spaces/_lattice.py +194 -0
- skcomplex/core/spaces/_lattice_neighborhood.py +50 -0
- skcomplex/core/spaces/_memory.py +45 -0
- skcomplex/core/spaces/_mesh.py +71 -0
- skcomplex/core/spaces/_moore.py +49 -0
- skcomplex/core/spaces/_nearest.py +41 -0
- skcomplex/core/spaces/_network.py +256 -0
- skcomplex/core/spaces/_phase.py +136 -0
- skcomplex/core/spaces/_radius.py +40 -0
- skcomplex/core/spaces/_static_time.py +34 -0
- skcomplex/core/spaces/_triangular.py +37 -0
- skcomplex/core/spaces/_von_neumann.py +51 -0
- skcomplex/core/specs/__init__.py +25 -0
- skcomplex/core/specs/_census_record_spec.py +72 -0
- skcomplex/core/specs/_census_spec.py +40 -0
- skcomplex/core/specs/_compiled_agents_spec.py +62 -0
- skcomplex/core/specs/_compiled_element_spec.py +59 -0
- skcomplex/core/specs/_compiled_interaction_spec.py +33 -0
- skcomplex/core/specs/_lattice_context_spec.py +40 -0
- skcomplex/core/specs/_lattice_state_spec.py +49 -0
- skcomplex/core/specs/_node_spec.py +64 -0
- skcomplex/core/specs/_operator_view_spec.py +135 -0
- skcomplex/core/specs/_scenario_spec.py +45 -0
- skcomplex/core/specs/_subsystem_spec.py +24 -0
- skcomplex/core/system.py +140 -0
- skcomplex/core/types.py +249 -0
- skcomplex/engine/__init__.py +5 -0
- skcomplex/engine/_utils.py +278 -0
- skcomplex/engine/backends/__init__.py +13 -0
- skcomplex/engine/backends/_base.py +329 -0
- skcomplex/engine/backends/_jax.py +285 -0
- skcomplex/engine/backends/_numba.py +601 -0
- skcomplex/engine/backends/_numba_components.py +67 -0
- skcomplex/engine/backends/_numba_loops.py +163 -0
- skcomplex/engine/backends/_numba_neighbours.py +435 -0
- skcomplex/engine/backends/_numba_printer.py +1023 -0
- skcomplex/engine/backends/_numba_stencils.py +66 -0
- skcomplex/engine/backends/_numpy.py +215 -0
- skcomplex/engine/compile/__init__.py +27 -0
- skcomplex/engine/compile/_base.py +582 -0
- skcomplex/engine/compile/_bound_renewal_spec.py +47 -0
- skcomplex/engine/compile/_compilation.py +351 -0
- skcomplex/engine/compile/_compile.py +100 -0
- skcomplex/engine/compile/_complex.py +216 -0
- skcomplex/engine/compile/_draw_lowering.py +373 -0
- skcomplex/engine/compile/_field_lowering.py +1668 -0
- skcomplex/engine/compile/_flows.py +691 -0
- skcomplex/engine/compile/_forms.py +48 -0
- skcomplex/engine/compile/_laws.py +42 -0
- skcomplex/engine/compile/_learning_compiler.py +481 -0
- skcomplex/engine/compile/_member_reductions.py +206 -0
- skcomplex/engine/compile/_members.py +244 -0
- skcomplex/engine/compile/_observables.py +940 -0
- skcomplex/engine/compile/_observer.py +185 -0
- skcomplex/engine/compile/_pass_compiler.py +1534 -0
- skcomplex/engine/compile/_probe.py +78 -0
- skcomplex/engine/compile/_renewal_law.py +70 -0
- skcomplex/engine/compile/passes/__init__.py +34 -0
- skcomplex/engine/compile/passes/_agents.py +111 -0
- skcomplex/engine/compile/passes/_agents_problem.py +143 -0
- skcomplex/engine/compile/passes/_census.py +808 -0
- skcomplex/engine/compile/passes/_check_fractional_noise.py +107 -0
- skcomplex/engine/compile/passes/_collect.py +31 -0
- skcomplex/engine/compile/passes/_compile_encounters.py +301 -0
- skcomplex/engine/compile/passes/_complex.py +198 -0
- skcomplex/engine/compile/passes/_conserved_noise.py +224 -0
- skcomplex/engine/compile/passes/_core.py +116 -0
- skcomplex/engine/compile/passes/_declare_renewals.py +84 -0
- skcomplex/engine/compile/passes/_draws.py +29 -0
- skcomplex/engine/compile/passes/_encounter_functions.py +60 -0
- skcomplex/engine/compile/passes/_encounter_jacobian.py +25 -0
- skcomplex/engine/compile/passes/_encounter_problem.py +32 -0
- skcomplex/engine/compile/passes/_events.py +204 -0
- skcomplex/engine/compile/passes/_expand_flows.py +32 -0
- skcomplex/engine/compile/passes/_field_functions.py +647 -0
- skcomplex/engine/compile/passes/_field_jacobian.py +38 -0
- skcomplex/engine/compile/passes/_field_problem.py +106 -0
- skcomplex/engine/compile/passes/_flatten.py +339 -0
- skcomplex/engine/compile/passes/_flows_problem.py +29 -0
- skcomplex/engine/compile/passes/_form.py +82 -0
- skcomplex/engine/compile/passes/_fractional_form.py +172 -0
- skcomplex/engine/compile/passes/_fractional_problem.py +91 -0
- skcomplex/engine/compile/passes/_functions.py +485 -0
- skcomplex/engine/compile/passes/_hilbert_space_error.py +10 -0
- skcomplex/engine/compile/passes/_hyperedges.py +598 -0
- skcomplex/engine/compile/passes/_jacobian.py +38 -0
- skcomplex/engine/compile/passes/_kernels.py +407 -0
- skcomplex/engine/compile/passes/_lattices.py +818 -0
- skcomplex/engine/compile/passes/_layout.py +667 -0
- skcomplex/engine/compile/passes/_lower_fields.py +225 -0
- skcomplex/engine/compile/passes/_lower_flows.py +28 -0
- skcomplex/engine/compile/passes/_markov.py +329 -0
- skcomplex/engine/compile/passes/_mask_requests.py +121 -0
- skcomplex/engine/compile/passes/_members.py +30 -0
- skcomplex/engine/compile/passes/_noise.py +196 -0
- skcomplex/engine/compile/passes/_operator_compiler.py +843 -0
- skcomplex/engine/compile/passes/_orders.py +409 -0
- skcomplex/engine/compile/passes/_owners.py +90 -0
- skcomplex/engine/compile/passes/_particles.py +69 -0
- skcomplex/engine/compile/passes/_plan.py +130 -0
- skcomplex/engine/compile/passes/_problem.py +802 -0
- skcomplex/engine/compile/passes/_reduction_lowering.py +1193 -0
- skcomplex/engine/compile/passes/_reductions.py +84 -0
- skcomplex/engine/compile/passes/_renewal_problem.py +357 -0
- skcomplex/engine/compile/passes/_request_jumps.py +51 -0
- skcomplex/engine/compile/passes/_residences.py +140 -0
- skcomplex/engine/compile/passes/_rows.py +162 -0
- skcomplex/engine/compile/passes/_set_renewals_apart.py +29 -0
- skcomplex/engine/compile/passes/_set_rules_apart.py +28 -0
- skcomplex/engine/compile/passes/_specs.py +1317 -0
- skcomplex/engine/compile/passes/_split_requests.py +44 -0
- skcomplex/engine/compile/passes/_topology_functions.py +265 -0
- skcomplex/engine/compile/passes/_topology_problem.py +27 -0
- skcomplex/engine/compile/passes/_towards.py +66 -0
- skcomplex/engine/compile/passes/_unpack_matches.py +29 -0
- skcomplex/engine/compile/passes/_unpack_renewals.py +41 -0
- skcomplex/engine/problems/__init__.py +61 -0
- skcomplex/engine/problems/_base.py +150 -0
- skcomplex/engine/problems/_base_problem_spec.py +153 -0
- skcomplex/engine/problems/_block_spec.py +48 -0
- skcomplex/engine/problems/_born_spec.py +24 -0
- skcomplex/engine/problems/_cascade_kernel.py +134 -0
- skcomplex/engine/problems/_collision_kernel.py +147 -0
- skcomplex/engine/problems/_compiled_delay_spec.py +21 -0
- skcomplex/engine/problems/_compiled_request_spec.py +46 -0
- skcomplex/engine/problems/_control_problem_spec.py +90 -0
- skcomplex/engine/problems/_declarations_spec.py +126 -0
- skcomplex/engine/problems/_delayed_state_spec.py +50 -0
- skcomplex/engine/problems/_diffusive_limit_spec.py +50 -0
- skcomplex/engine/problems/_draw_kernel.py +128 -0
- skcomplex/engine/problems/_drive_kernel.py +65 -0
- skcomplex/engine/problems/_dynamics_spec.py +28 -0
- skcomplex/engine/problems/_edge_row_search.py +78 -0
- skcomplex/engine/problems/_edge_search.py +64 -0
- skcomplex/engine/problems/_encounter_kernel.py +200 -0
- skcomplex/engine/problems/_event_kernel.py +70 -0
- skcomplex/engine/problems/_expression_printer.py +410 -0
- skcomplex/engine/problems/_extremal_kernel.py +125 -0
- skcomplex/engine/problems/_field_operator_kernel.py +105 -0
- skcomplex/engine/problems/_finite_volume_kernel.py +423 -0
- skcomplex/engine/problems/_flow_term_spec.py +45 -0
- skcomplex/engine/problems/_frame_spec.py +105 -0
- skcomplex/engine/problems/_jacobian_kernel.py +575 -0
- skcomplex/engine/problems/_kernel_spec.py +130 -0
- skcomplex/engine/problems/_kinetic_problem_spec.py +23 -0
- skcomplex/engine/problems/_law_kernel.py +604 -0
- skcomplex/engine/problems/_learning_problem_spec.py +67 -0
- skcomplex/engine/problems/_linear_term_spec.py +50 -0
- skcomplex/engine/problems/_loop_term_spec.py +44 -0
- skcomplex/engine/problems/_lowered_kernels_spec.py +59 -0
- skcomplex/engine/problems/_markov_kernel.py +68 -0
- skcomplex/engine/problems/_metric_search.py +155 -0
- skcomplex/engine/problems/_monte_carlo_kernel.py +213 -0
- skcomplex/engine/problems/_neighborhood_kernel.py +594 -0
- skcomplex/engine/problems/_noise_term_spec.py +26 -0
- skcomplex/engine/problems/_observed_spec.py +22 -0
- skcomplex/engine/problems/_operator_kernel.py +102 -0
- skcomplex/engine/problems/_operator_lowering.py +323 -0
- skcomplex/engine/problems/_operator_problem_spec.py +138 -0
- skcomplex/engine/problems/_output_spec.py +78 -0
- skcomplex/engine/problems/_pair_search.py +86 -0
- skcomplex/engine/problems/_partials_spec.py +27 -0
- skcomplex/engine/problems/_partition_spec.py +39 -0
- skcomplex/engine/problems/_printed_spec.py +24 -0
- skcomplex/engine/problems/_problem_functions_spec.py +102 -0
- skcomplex/engine/problems/_problem_spec.py +365 -0
- skcomplex/engine/problems/_random_stream.py +49 -0
- skcomplex/engine/problems/_record_spec.py +22 -0
- skcomplex/engine/problems/_recorded_spec.py +21 -0
- skcomplex/engine/problems/_reduction_kernel.py +254 -0
- skcomplex/engine/problems/_reduction_schedule_spec.py +97 -0
- skcomplex/engine/problems/_reference_spec.py +114 -0
- skcomplex/engine/problems/_relation_spec.py +29 -0
- skcomplex/engine/problems/_renewal_kernel.py +250 -0
- skcomplex/engine/problems/_request_spec.py +27 -0
- skcomplex/engine/problems/_rule_kernel.py +227 -0
- skcomplex/engine/problems/_set_symbol_spec.py +28 -0
- skcomplex/engine/problems/_source_loader.py +113 -0
- skcomplex/engine/problems/_static_search.py +42 -0
- skcomplex/engine/problems/_steps.py +39 -0
- skcomplex/engine/problems/_sweep_spec.py +26 -0
- skcomplex/engine/problems/_symmetry_spec.py +29 -0
- skcomplex/engine/problems/_too_dense.py +8 -0
- skcomplex/engine/problems/_topology_kernel.py +589 -0
- skcomplex/engine/problems/_transfer_network.py +4 -0
- skcomplex/engine/problems/_transfer_network_spec.py +50 -0
- skcomplex/engine/problems/_transfer_state_spec.py +68 -0
- skcomplex/engine/runtime/__init__.py +22 -0
- skcomplex/engine/runtime/_as_fast_as_possible.py +17 -0
- skcomplex/engine/runtime/_base.py +137 -0
- skcomplex/engine/runtime/_conservation.py +125 -0
- skcomplex/engine/runtime/_invariants.py +100 -0
- skcomplex/engine/runtime/_real_time.py +55 -0
- skcomplex/engine/runtime/_recorder.py +84 -0
- skcomplex/engine/runtime/_simulations.py +665 -0
- skcomplex/engine/runtime/_trajectories.py +314 -0
- skcomplex/engine/solvers/__init__.py +95 -0
- skcomplex/engine/solvers/_base.py +372 -0
- skcomplex/engine/solvers/_caputo.py +194 -0
- skcomplex/engine/solvers/_collocation.py +334 -0
- skcomplex/engine/solvers/_convolution.py +155 -0
- skcomplex/engine/solvers/_cosimulation.py +400 -0
- skcomplex/engine/solvers/_crank_nicolson.py +32 -0
- skcomplex/engine/solvers/_defaults.py +34 -0
- skcomplex/engine/solvers/_etdrk4.py +86 -0
- skcomplex/engine/solvers/_euler_maruyama.py +161 -0
- skcomplex/engine/solvers/_event_locator.py +249 -0
- skcomplex/engine/solvers/_external.py +94 -0
- skcomplex/engine/solvers/_fractional_abm.py +126 -0
- skcomplex/engine/solvers/_fractional_euler_maruyama.py +322 -0
- skcomplex/engine/solvers/_gillespie.py +135 -0
- skcomplex/engine/solvers/_gradient_descent.py +353 -0
- skcomplex/engine/solvers/_grunwald_letnikov.py +83 -0
- skcomplex/engine/solvers/_heun.py +89 -0
- skcomplex/engine/solvers/_history.py +184 -0
- skcomplex/engine/solvers/_horizon_error.py +10 -0
- skcomplex/engine/solvers/_imex2.py +40 -0
- skcomplex/engine/solvers/_imex_euler.py +35 -0
- skcomplex/engine/solvers/_jump_trajectories.py +98 -0
- skcomplex/engine/solvers/_kinetics.py +242 -0
- skcomplex/engine/solvers/_l1.py +91 -0
- skcomplex/engine/solvers/_lammps.py +745 -0
- skcomplex/engine/solvers/_lammps_fix_spec.py +41 -0
- skcomplex/engine/solvers/_lattice.py +79 -0
- skcomplex/engine/solvers/_lindblad.py +70 -0
- skcomplex/engine/solvers/_maps.py +105 -0
- skcomplex/engine/solvers/_mesa.py +1624 -0
- skcomplex/engine/solvers/_milstein.py +93 -0
- skcomplex/engine/solvers/_monte_carlo.py +43 -0
- skcomplex/engine/solvers/_operator.py +212 -0
- skcomplex/engine/solvers/_optimal_control.py +368 -0
- skcomplex/engine/solvers/_pontryagin.py +298 -0
- skcomplex/engine/solvers/_renewal.py +90 -0
- skcomplex/engine/solvers/_renewals.py +190 -0
- skcomplex/engine/solvers/_rk4.py +263 -0
- skcomplex/engine/solvers/_root.py +176 -0
- skcomplex/engine/solvers/_rows.py +49 -0
- skcomplex/engine/solvers/_scipy_ode.py +602 -0
- skcomplex/engine/solvers/_sde.py +164 -0
- skcomplex/engine/solvers/_semi_lagrangian.py +213 -0
- skcomplex/engine/solvers/_solver.py +159 -0
- skcomplex/engine/solvers/_split.py +394 -0
- skcomplex/engine/solvers/_ssprk.py +147 -0
- skcomplex/engine/solvers/_strang_splitting.py +178 -0
- skcomplex/engine/solvers/_unitary.py +68 -0
- skcomplex/engine/solvers/_velocity_verlet.py +171 -0
- skcomplex/engine/solvers/_yoshida4.py +242 -0
- skcomplex/engine/types.py +90 -0
- skcomplex/engine/viz/__init__.py +35 -0
- skcomplex/engine/viz/_agents.py +223 -0
- skcomplex/engine/viz/_axes.py +146 -0
- skcomplex/engine/viz/_base.py +365 -0
- skcomplex/engine/viz/_bodies.py +334 -0
- skcomplex/engine/viz/_cayley.py +133 -0
- skcomplex/engine/viz/_expectation.py +208 -0
- skcomplex/engine/viz/_histograms.py +218 -0
- skcomplex/engine/viz/_images.py +307 -0
- skcomplex/engine/viz/_matrices.py +141 -0
- skcomplex/engine/viz/_meshes.py +149 -0
- skcomplex/engine/viz/_points.py +238 -0
- skcomplex/engine/viz/_rerun.py +527 -0
- skcomplex/engine/viz/_rings.py +127 -0
- skcomplex/engine/viz/_scalars.py +129 -0
- skcomplex/engine/viz/_sites.py +228 -0
- skcomplex/errors.py +112 -0
- skcomplex/experiments/__init__.py +36 -0
- skcomplex/experiments/_base.py +373 -0
- skcomplex/experiments/_basin_stability.py +153 -0
- skcomplex/experiments/_calibration.py +194 -0
- skcomplex/experiments/_experiment.py +327 -0
- skcomplex/experiments/_grid.py +36 -0
- skcomplex/experiments/_latin_hypercube.py +44 -0
- skcomplex/experiments/_morris.py +50 -0
- skcomplex/experiments/_one_at_a_time.py +28 -0
- skcomplex/experiments/_orbit_diagram.py +146 -0
- skcomplex/experiments/_random.py +44 -0
- skcomplex/experiments/_results.py +148 -0
- skcomplex/experiments/_rows.py +45 -0
- skcomplex/experiments/_saltelli.py +50 -0
- skcomplex/experiments/_sensitivity.py +122 -0
- skcomplex/experiments/_sobol.py +43 -0
- skcomplex/experiments/specs/__init__.py +1 -0
- skcomplex/experiments/specs/_task_spec.py +78 -0
- skcomplex/experiments/types.py +14 -0
- skcomplex/models/__init__.py +18 -0
- skcomplex/models/_catalog.py +243 -0
- skcomplex/models/_model_catalog.py +270 -0
- skcomplex/models/_model_entry.py +170 -0
- skcomplex/models/_model_listing.py +38 -0
- skcomplex/models/biology/__init__.py +1 -0
- skcomplex/models/biology/collective_behaviour/__init__.py +48 -0
- skcomplex/models/biology/collective_behaviour/_alarm.py +99 -0
- skcomplex/models/biology/collective_behaviour/_ant.py +101 -0
- skcomplex/models/biology/collective_behaviour/_ant_view.py +24 -0
- skcomplex/models/biology/collective_behaviour/_boid.py +104 -0
- skcomplex/models/biology/collective_behaviour/_boid_view.py +25 -0
- skcomplex/models/biology/collective_behaviour/_branch.py +41 -0
- skcomplex/models/biology/collective_behaviour/_decisions.py +149 -0
- skcomplex/models/biology/collective_behaviour/_flight.py +52 -0
- skcomplex/models/biology/collective_behaviour/_flocking.py +75 -0
- skcomplex/models/biology/collective_behaviour/_flocks.py +169 -0
- skcomplex/models/biology/collective_behaviour/_foraging.py +232 -0
- skcomplex/models/biology/collective_behaviour/_ground.py +67 -0
- skcomplex/models/biology/collective_behaviour/_leadership.py +207 -0
- skcomplex/models/biology/collective_behaviour/_morse_potential.py +87 -0
- skcomplex/models/biology/collective_behaviour/_pheromone.py +55 -0
- skcomplex/models/biology/collective_behaviour/_rats.py +41 -0
- skcomplex/models/biology/collective_behaviour/_schooling.py +102 -0
- skcomplex/models/biology/collective_behaviour/_self_propulsion.py +64 -0
- skcomplex/models/biology/collective_behaviour/_shoal_member_view.py +25 -0
- skcomplex/models/biology/collective_behaviour/_swimming.py +66 -0
- skcomplex/models/biology/collective_behaviour/_trail_choice.py +105 -0
- skcomplex/models/biology/collective_behaviour/_trails.py +245 -0
- skcomplex/models/biology/collective_behaviour/_walker.py +97 -0
- skcomplex/models/biology/collective_behaviour/_walker_view.py +23 -0
- skcomplex/models/biology/common/__init__.py +3 -0
- skcomplex/models/biology/common/excitable/__init__.py +7 -0
- skcomplex/models/biology/common/excitable/_fitzhugh_nagumo.py +121 -0
- skcomplex/models/biology/common/kinetics/__init__.py +7 -0
- skcomplex/models/biology/common/kinetics/_michaelis_menten.py +137 -0
- skcomplex/models/biology/common/networks/__init__.py +9 -0
- skcomplex/models/biology/common/networks/_edge_draw.py +95 -0
- skcomplex/models/biology/common/networks/_weighted_edge.py +48 -0
- skcomplex/models/biology/common/pharmacokinetics/__init__.py +7 -0
- skcomplex/models/biology/common/pharmacokinetics/_dosing.py +125 -0
- skcomplex/models/biology/common/populations/__init__.py +19 -0
- skcomplex/models/biology/common/populations/_exponential_growth.py +66 -0
- skcomplex/models/biology/common/populations/_gompertz_growth.py +75 -0
- skcomplex/models/biology/common/populations/_growth.py +176 -0
- skcomplex/models/biology/common/populations/_logistic_growth.py +92 -0
- skcomplex/models/biology/common/populations/_mortality.py +69 -0
- skcomplex/models/biology/common/populations/_population.py +41 -0
- skcomplex/models/biology/common/populations/_power_law_growth.py +71 -0
- skcomplex/models/biology/common/stigmergy/__init__.py +7 -0
- skcomplex/models/biology/common/stigmergy/_evaporation.py +95 -0
- skcomplex/models/biology/ecology/__init__.py +128 -0
- skcomplex/models/biology/ecology/_abundance.py +52 -0
- skcomplex/models/biology/ecology/_agent_predation.py +170 -0
- skcomplex/models/biology/ecology/_cell_quota.py +163 -0
- skcomplex/models/biology/ecology/_clustering.py +96 -0
- skcomplex/models/biology/ecology/_communities.py +234 -0
- skcomplex/models/biology/ecology/_competition.py +95 -0
- skcomplex/models/biology/ecology/_cow.py +49 -0
- skcomplex/models/biology/ecology/_cow_view.py +15 -0
- skcomplex/models/biology/ecology/_emotion_marks.py +65 -0
- skcomplex/models/biology/ecology/_factories.py +322 -0
- skcomplex/models/biology/ecology/_forager.py +116 -0
- skcomplex/models/biology/ecology/_forager_view.py +25 -0
- skcomplex/models/biology/ecology/_fronts.py +128 -0
- skcomplex/models/biology/ecology/_generalized_lotka_volterra.py +66 -0
- skcomplex/models/biology/ecology/_grass.py +96 -0
- skcomplex/models/biology/ecology/_grass_view.py +17 -0
- skcomplex/models/biology/ecology/_grazing.py +66 -0
- skcomplex/models/biology/ecology/_habitat_patch.py +49 -0
- skcomplex/models/biology/ecology/_herding.py +84 -0
- skcomplex/models/biology/ecology/_higher_order.py +102 -0
- skcomplex/models/biology/ecology/_hopping.py +68 -0
- skcomplex/models/biology/ecology/_instability.py +180 -0
- skcomplex/models/biology/ecology/_linear_growth.py +70 -0
- skcomplex/models/biology/ecology/_meadow.py +102 -0
- skcomplex/models/biology/ecology/_microbe.py +47 -0
- skcomplex/models/biology/ecology/_microbial_communities.py +90 -0
- skcomplex/models/biology/ecology/_mutualism.py +81 -0
- skcomplex/models/biology/ecology/_neutral.py +144 -0
- skcomplex/models/biology/ecology/_neutral_replacement.py +54 -0
- skcomplex/models/biology/ecology/_organism.py +63 -0
- skcomplex/models/biology/ecology/_organism_view.py +15 -0
- skcomplex/models/biology/ecology/_parasitism.py +78 -0
- skcomplex/models/biology/ecology/_pasture.py +83 -0
- skcomplex/models/biology/ecology/_pasture_view.py +16 -0
- skcomplex/models/biology/ecology/_pioneer_growth.py +101 -0
- skcomplex/models/biology/ecology/_plant.py +56 -0
- skcomplex/models/biology/ecology/_plant_view.py +16 -0
- skcomplex/models/biology/ecology/_predation.py +290 -0
- skcomplex/models/biology/ecology/_predation_interaction.py +71 -0
- skcomplex/models/biology/ecology/_predator.py +63 -0
- skcomplex/models/biology/ecology/_predator_prey_events.py +120 -0
- skcomplex/models/biology/ecology/_predator_view.py +17 -0
- skcomplex/models/biology/ecology/_prey.py +52 -0
- skcomplex/models/biology/ecology/_prey_view.py +15 -0
- skcomplex/models/biology/ecology/_rosenzweig_macarthur.py +91 -0
- skcomplex/models/biology/ecology/_seasonal_logistic_growth.py +71 -0
- skcomplex/models/biology/ecology/_sequential.py +114 -0
- skcomplex/models/biology/ecology/_sheep.py +63 -0
- skcomplex/models/biology/ecology/_sheep_view.py +17 -0
- skcomplex/models/biology/ecology/_speciation.py +71 -0
- skcomplex/models/biology/ecology/_stand.py +47 -0
- skcomplex/models/biology/ecology/_stigmergic_predator.py +98 -0
- skcomplex/models/biology/ecology/_stigmergic_prey.py +54 -0
- skcomplex/models/biology/ecology/_stigmergy.py +413 -0
- skcomplex/models/biology/ecology/_succession.py +92 -0
- skcomplex/models/biology/ecology/_successional_growth.py +88 -0
- skcomplex/models/biology/ecology/_triplet.py +55 -0
- skcomplex/models/biology/ecology/_wolf.py +63 -0
- skcomplex/models/biology/ecology/_wolf_sheep.py +156 -0
- skcomplex/models/biology/ecology/_wolf_view.py +17 -0
- skcomplex/models/biology/epidemiology/__init__.py +53 -0
- skcomplex/models/biology/epidemiology/_active_host.py +61 -0
- skcomplex/models/biology/epidemiology/_adaptive.py +316 -0
- skcomplex/models/biology/epidemiology/_agents.py +484 -0
- skcomplex/models/biology/epidemiology/_carrier.py +66 -0
- skcomplex/models/biology/epidemiology/_degree_class.py +65 -0
- skcomplex/models/biology/epidemiology/_factories.py +186 -0
- skcomplex/models/biology/epidemiology/_host.py +49 -0
- skcomplex/models/biology/epidemiology/_immunity_loss.py +84 -0
- skcomplex/models/biology/epidemiology/_infection.py +93 -0
- skcomplex/models/biology/epidemiology/_networks.py +170 -0
- skcomplex/models/biology/epidemiology/_outbreaks.py +216 -0
- skcomplex/models/biology/epidemiology/_person.py +103 -0
- skcomplex/models/biology/epidemiology/_person_view.py +23 -0
- skcomplex/models/biology/epidemiology/_recovery.py +92 -0
- skcomplex/models/biology/epidemiology/_recurrent.py +149 -0
- skcomplex/models/biology/epidemiology/_spreading.py +144 -0
- skcomplex/models/biology/epidemiology/_subpopulation.py +92 -0
- skcomplex/models/biology/epidemiology/_traveller.py +65 -0
- skcomplex/models/biology/epidemiology/_traveller_view.py +17 -0
- skcomplex/models/biology/epidemiology/_vaccination.py +184 -0
- skcomplex/models/biology/epidemiology/_walker.py +66 -0
- skcomplex/models/biology/epidemiology/_walker_view.py +17 -0
- skcomplex/models/biology/evolution/__init__.py +60 -0
- skcomplex/models/biology/evolution/_adaptive_climbing.py +106 -0
- skcomplex/models/biology/evolution/_catalysis.py +76 -0
- skcomplex/models/biology/evolution/_catalytic_link.py +21 -0
- skcomplex/models/biology/evolution/_chemical.py +111 -0
- skcomplex/models/biology/evolution/_climber.py +125 -0
- skcomplex/models/biology/evolution/_climber_view.py +19 -0
- skcomplex/models/biology/evolution/_coevolution.py +148 -0
- skcomplex/models/biology/evolution/_cyclic_species.py +44 -0
- skcomplex/models/biology/evolution/_dependency_field.py +56 -0
- skcomplex/models/biology/evolution/_finite_populations.py +287 -0
- skcomplex/models/biology/evolution/_games.py +143 -0
- skcomplex/models/biology/evolution/_genotype_class.py +42 -0
- skcomplex/models/biology/evolution/_individual.py +54 -0
- skcomplex/models/biology/evolution/_individual_view.py +16 -0
- skcomplex/models/biology/evolution/_locus.py +47 -0
- skcomplex/models/biology/evolution/_master_sequence.py +55 -0
- skcomplex/models/biology/evolution/_molecule.py +47 -0
- skcomplex/models/biology/evolution/_moran_step.py +83 -0
- skcomplex/models/biology/evolution/_networks.py +194 -0
- skcomplex/models/biology/evolution/_prebiotic.py +169 -0
- skcomplex/models/biology/evolution/_replicator.py +109 -0
- skcomplex/models/biology/evolution/_strategy.py +42 -0
- skcomplex/models/biology/evolution/_substitution.py +113 -0
- skcomplex/models/biology/evolution/_substitutions.py +126 -0
- skcomplex/models/biology/evolution/_tangled_nature_life_cycle.py +159 -0
- skcomplex/models/biology/evolution/_taxon.py +49 -0
- skcomplex/models/biology/neuroscience/__init__.py +63 -0
- skcomplex/models/biology/neuroscience/_conductances.py +193 -0
- skcomplex/models/biology/neuroscience/_delayed_synapse.py +70 -0
- skcomplex/models/biology/neuroscience/_excitable.py +178 -0
- skcomplex/models/biology/neuroscience/_fitz_hugh_nagumo_neuron.py +46 -0
- skcomplex/models/biology/neuroscience/_global_inhibition.py +71 -0
- skcomplex/models/biology/neuroscience/_hodgkin_huxley.py +103 -0
- skcomplex/models/biology/neuroscience/_inhibitor.py +62 -0
- skcomplex/models/biology/neuroscience/_inhibitor_drive.py +61 -0
- skcomplex/models/biology/neuroscience/_izhikevich.py +77 -0
- skcomplex/models/biology/neuroscience/_leaky_integrate_and_fire.py +80 -0
- skcomplex/models/biology/neuroscience/_mutual_inhibition.py +55 -0
- skcomplex/models/biology/neuroscience/_networks.py +235 -0
- skcomplex/models/biology/neuroscience/_neural_field_site.py +66 -0
- skcomplex/models/biology/neuroscience/_neural_fields.py +94 -0
- skcomplex/models/biology/neuroscience/_neurons.py +129 -0
- skcomplex/models/biology/neuroscience/_polyhomeostatic_neuron.py +93 -0
- skcomplex/models/biology/neuroscience/_populations.py +333 -0
- skcomplex/models/biology/neuroscience/_pulse_coupling.py +71 -0
- skcomplex/models/biology/neuroscience/_rate_unit.py +67 -0
- skcomplex/models/biology/neuroscience/_spike_reset.py +95 -0
- skcomplex/models/biology/neuroscience/_spiking_neuron.py +67 -0
- skcomplex/models/biology/neuroscience/_synapses.py +226 -0
- skcomplex/models/biology/neuroscience/_terman_wang.py +113 -0
- skcomplex/models/biology/neuroscience/_theta_neuron.py +66 -0
- skcomplex/models/biology/neuroscience/_wilson_cowan.py +122 -0
- skcomplex/models/biology/neuroscience/types.py +8 -0
- skcomplex/models/biology/oncology/__init__.py +212 -0
- skcomplex/models/biology/oncology/_androgen_receptor_prostate.py +240 -0
- skcomplex/models/biology/oncology/_androgen_suppression.py +109 -0
- skcomplex/models/biology/oncology/_angiogenesis.py +306 -0
- skcomplex/models/biology/oncology/_angiogenesis_immunotherapy_tumour.py +247 -0
- skcomplex/models/biology/oncology/_angiogenic_tumour.py +110 -0
- skcomplex/models/biology/oncology/_antiangiogenic.py +227 -0
- skcomplex/models/biology/oncology/_bone_marrow_blood.py +196 -0
- skcomplex/models/biology/oncology/_cell_cycle.py +85 -0
- skcomplex/models/biology/oncology/_cell_kinetics.py +285 -0
- skcomplex/models/biology/oncology/_cell_quota_prostate.py +207 -0
- skcomplex/models/biology/oncology/_cell_survival.py +72 -0
- skcomplex/models/biology/oncology/_checkpoint_tumour.py +161 -0
- skcomplex/models/biology/oncology/_chemoimmunotherapy_tumour.py +251 -0
- skcomplex/models/biology/oncology/_chemotherapy.py +565 -0
- skcomplex/models/biology/oncology/_chemovirotherapy_tumour.py +139 -0
- skcomplex/models/biology/oncology/_clonal_tumour.py +134 -0
- skcomplex/models/biology/oncology/_combination_therapy.py +989 -0
- skcomplex/models/biology/oncology/_delayed_vaccinated_tumour.py +341 -0
- skcomplex/models/biology/oncology/_dormant_cell_cycle.py +95 -0
- skcomplex/models/biology/oncology/_erythropoiesis.py +129 -0
- skcomplex/models/biology/oncology/_exponential_linear_growth.py +66 -0
- skcomplex/models/biology/oncology/_gene_viral_therapy.py +480 -0
- skcomplex/models/biology/oncology/_glioma_brain.py +165 -0
- skcomplex/models/biology/oncology/_growth.py +378 -0
- skcomplex/models/biology/oncology/_her2_tumour.py +156 -0
- skcomplex/models/biology/oncology/_hormone_therapy.py +985 -0
- skcomplex/models/biology/oncology/_immune_competition.py +241 -0
- skcomplex/models/biology/oncology/_immunotherapy.py +1001 -0
- skcomplex/models/biology/oncology/_intermittent_suppression.py +130 -0
- skcomplex/models/biology/oncology/_irradiated_tumour.py +105 -0
- skcomplex/models/biology/oncology/_irradiation.py +97 -0
- skcomplex/models/biology/oncology/_kirschner_panetta_tumour.py +132 -0
- skcomplex/models/biology/oncology/_leukaemia_stem_cells.py +150 -0
- skcomplex/models/biology/oncology/_linear_quadratic_survival.py +112 -0
- skcomplex/models/biology/oncology/_log_kill.py +81 -0
- skcomplex/models/biology/oncology/_metastasis_chemotherapy.py +211 -0
- skcomplex/models/biology/oncology/_multidrug_resistance.py +201 -0
- skcomplex/models/biology/oncology/_oncolytic_virus.py +68 -0
- skcomplex/models/biology/oncology/_oncolytic_virus_dendritic.py +155 -0
- skcomplex/models/biology/oncology/_optimal_chemotherapy.py +157 -0
- skcomplex/models/biology/oncology/_optimal_immunotherapy.py +137 -0
- skcomplex/models/biology/oncology/_optimal_therapy.py +208 -0
- skcomplex/models/biology/oncology/_piecewise_linear_prostate.py +147 -0
- skcomplex/models/biology/oncology/_radiation_competition.py +104 -0
- skcomplex/models/biology/oncology/_radiotherapy.py +311 -0
- skcomplex/models/biology/oncology/_resistance_switching.py +148 -0
- skcomplex/models/biology/oncology/_resting_hunting_chemotherapy.py +136 -0
- skcomplex/models/biology/oncology/_sirna_tgf_beta.py +189 -0
- skcomplex/models/biology/oncology/_sprout.py +65 -0
- skcomplex/models/biology/oncology/_sprout_view.py +17 -0
- skcomplex/models/biology/oncology/_stem_cell_differentiation.py +262 -0
- skcomplex/models/biology/oncology/_stem_cells.py +548 -0
- skcomplex/models/biology/oncology/_suppressed_tumour.py +338 -0
- skcomplex/models/biology/oncology/_tamoxifen_tumour.py +172 -0
- skcomplex/models/biology/oncology/_tcr_gene_therapy.py +98 -0
- skcomplex/models/biology/oncology/_therapy_switch.py +86 -0
- skcomplex/models/biology/oncology/_tissue.py +71 -0
- skcomplex/models/biology/oncology/_tumour_cell.py +85 -0
- skcomplex/models/biology/oncology/_tumour_cell_view.py +21 -0
- skcomplex/models/biology/oncology/_tumour_immune_chemotherapy.py +169 -0
- skcomplex/models/biology/oncology/_vaccinated_tumour.py +180 -0
- skcomplex/models/biology/oncology/_vascular_support.py +71 -0
- skcomplex/models/biology/oncology/_vascularized_spheroid.py +264 -0
- skcomplex/models/biology/oncology/_vasculature.py +42 -0
- skcomplex/models/biology/oncology/_vessel.py +49 -0
- skcomplex/models/biology/oncology/_vessel_view.py +15 -0
- skcomplex/models/biology/physiology/__init__.py +46 -0
- skcomplex/models/biology/physiology/_adaptivity.py +277 -0
- skcomplex/models/biology/physiology/_cardiac.py +167 -0
- skcomplex/models/biology/physiology/_chamber.py +71 -0
- skcomplex/models/biology/physiology/_circulation.py +97 -0
- skcomplex/models/biology/physiology/_coagulation.py +130 -0
- skcomplex/models/biology/physiology/_contour_cell.py +61 -0
- skcomplex/models/biology/physiology/_contour_uptake.py +61 -0
- skcomplex/models/biology/physiology/_exchange.py +165 -0
- skcomplex/models/biology/physiology/_exchanging_cell.py +83 -0
- skcomplex/models/biology/physiology/_fitz_hugh_nagumo.py +46 -0
- skcomplex/models/biology/physiology/_glucose_control.py +136 -0
- skcomplex/models/biology/physiology/_mackey_glass.py +81 -0
- skcomplex/models/biology/physiology/_pharmacokinetics.py +104 -0
- skcomplex/models/biology/physiology/_physiology.py +118 -0
- skcomplex/models/biology/physiology/_regulation.py +251 -0
- skcomplex/models/biology/physiology/_resistive_flow.py +67 -0
- skcomplex/models/biology/physiology/_toxicity.py +164 -0
- skcomplex/models/biology/systems_biology/__init__.py +52 -0
- skcomplex/models/biology/systems_biology/_boolean.py +141 -0
- skcomplex/models/biology/systems_biology/_boolean_function.py +84 -0
- skcomplex/models/biology/systems_biology/_boolean_models.py +206 -0
- skcomplex/models/biology/systems_biology/_boolean_node.py +41 -0
- skcomplex/models/biology/systems_biology/_cascades.py +178 -0
- skcomplex/models/biology/systems_biology/_clocks.py +274 -0
- skcomplex/models/biology/systems_biology/_generalized_mass_action.py +123 -0
- skcomplex/models/biology/systems_biology/_genes.py +296 -0
- skcomplex/models/biology/systems_biology/_min_proteins.py +230 -0
- skcomplex/models/biology/systems_biology/_networks.py +359 -0
- skcomplex/models/biology/systems_biology/_phosphorylation_loop.py +121 -0
- skcomplex/models/biology/systems_biology/_probabilistic.py +75 -0
- skcomplex/models/biology/systems_biology/_probabilistic_function.py +127 -0
- skcomplex/models/biology/systems_biology/_probabilistic_node.py +47 -0
- skcomplex/models/biology/systems_biology/_repression.py +104 -0
- skcomplex/models/biology/systems_biology/_s_system.py +88 -0
- skcomplex/models/biology/systems_biology/_species.py +44 -0
- skcomplex/models/biology/systems_biology/_threshold_function.py +63 -0
- skcomplex/models/biology/systems_biology/types.py +9 -0
- skcomplex/models/chemistry/__init__.py +1 -0
- skcomplex/models/chemistry/common/__init__.py +3 -0
- skcomplex/models/chemistry/common/kinetics/__init__.py +9 -0
- skcomplex/models/chemistry/common/kinetics/_brusselator.py +61 -0
- skcomplex/models/chemistry/common/kinetics/_cubic_autocatalysis.py +80 -0
- skcomplex/models/chemistry/kinetics/__init__.py +38 -0
- skcomplex/models/chemistry/kinetics/_catalyst_pellet.py +60 -0
- skcomplex/models/chemistry/kinetics/_cubic_autocatalysis.py +60 -0
- skcomplex/models/chemistry/kinetics/_cyclic.py +130 -0
- skcomplex/models/chemistry/kinetics/_hodgepodge.py +157 -0
- skcomplex/models/chemistry/kinetics/_nanoparticles.py +103 -0
- skcomplex/models/chemistry/kinetics/_oregonator.py +76 -0
- skcomplex/models/chemistry/kinetics/_oscillators.py +244 -0
- skcomplex/models/chemistry/kinetics/_pulsed_electrode.py +107 -0
- skcomplex/models/chemistry/kinetics/_reactions.py +332 -0
- skcomplex/models/chemistry/kinetics/_reactors.py +144 -0
- skcomplex/models/chemistry/pattern_formation/__init__.py +15 -0
- skcomplex/models/chemistry/pattern_formation/_brusselator.py +62 -0
- skcomplex/models/chemistry/pattern_formation/_gray_scott.py +68 -0
- skcomplex/models/chemistry/pattern_formation/_reaction_diffusion.py +268 -0
- skcomplex/models/chemistry/pattern_formation/_schnakenberg.py +67 -0
- skcomplex/models/computer_science/__init__.py +1 -0
- skcomplex/models/computer_science/automata/__init__.py +56 -0
- skcomplex/models/computer_science/automata/_automata.py +229 -0
- skcomplex/models/computer_science/automata/_automaton.py +202 -0
- skcomplex/models/computer_science/automata/_binary_cell.py +41 -0
- skcomplex/models/computer_science/automata/_codes.py +73 -0
- skcomplex/models/computer_science/automata/_diffusion_cell.py +47 -0
- skcomplex/models/computer_science/automata/_group_automata.py +449 -0
- skcomplex/models/computer_science/automata/_groups.py +132 -0
- skcomplex/models/computer_science/automata/_linear_automaton.py +128 -0
- skcomplex/models/computer_science/automata/_noisy_elementary_cell.py +46 -0
- skcomplex/models/computer_science/automata/_pascal_cell.py +41 -0
- skcomplex/models/computer_science/automata/_subshift.py +192 -0
- skcomplex/models/computer_science/automata/_variants.py +292 -0
- skcomplex/models/computer_science/evolutionary_computation/__init__.py +27 -0
- skcomplex/models/computer_science/evolutionary_computation/_annealed_candidate.py +39 -0
- skcomplex/models/computer_science/evolutionary_computation/_bit_string.py +55 -0
- skcomplex/models/computer_science/evolutionary_computation/_bit_string_view.py +13 -0
- skcomplex/models/computer_science/evolutionary_computation/_genetic_algorithms.py +92 -0
- skcomplex/models/computer_science/evolutionary_computation/_landscapes.py +82 -0
- skcomplex/models/computer_science/evolutionary_computation/_optimisers.py +217 -0
- skcomplex/models/computer_science/evolutionary_computation/_reproduction.py +129 -0
- skcomplex/models/computer_science/evolutionary_computation/_room_cleaning.py +170 -0
- skcomplex/models/computer_science/evolutionary_computation/_running_best.py +30 -0
- skcomplex/models/computer_science/evolutionary_computation/_running_best_update.py +58 -0
- skcomplex/models/computer_science/evolutionary_computation/_search_candidate.py +32 -0
- skcomplex/models/computer_science/evolutionary_computation/_strategy.py +54 -0
- skcomplex/models/computer_science/evolutionary_computation/_strategy_view.py +14 -0
- skcomplex/models/computer_science/neural_networks/__init__.py +34 -0
- skcomplex/models/computer_science/neural_networks/_binary_weight.py +32 -0
- skcomplex/models/computer_science/neural_networks/_diluted.py +159 -0
- skcomplex/models/computer_science/neural_networks/_echo_state.py +173 -0
- skcomplex/models/computer_science/neural_networks/_elman.py +160 -0
- skcomplex/models/computer_science/neural_networks/_hidden_unit.py +51 -0
- skcomplex/models/computer_science/neural_networks/_hopfield.py +134 -0
- skcomplex/models/computer_science/neural_networks/_hopfield_update.py +51 -0
- skcomplex/models/computer_science/neural_networks/_input_coupling.py +63 -0
- skcomplex/models/computer_science/neural_networks/_input_unit.py +39 -0
- skcomplex/models/computer_science/neural_networks/_neuron_view.py +14 -0
- skcomplex/models/computer_science/neural_networks/_output_unit.py +51 -0
- skcomplex/models/computer_science/neural_networks/_perceptron.py +72 -0
- skcomplex/models/computer_science/neural_networks/_readout_coupling.py +69 -0
- skcomplex/models/computer_science/neural_networks/_recurrence_coupling.py +66 -0
- skcomplex/models/economics/__init__.py +1 -0
- skcomplex/models/economics/common/__init__.py +3 -0
- skcomplex/models/economics/common/forecasting/__init__.py +7 -0
- skcomplex/models/economics/common/forecasting/_heuristics.py +51 -0
- skcomplex/models/economics/common/resources/__init__.py +7 -0
- skcomplex/models/economics/common/resources/_regrowth.py +70 -0
- skcomplex/models/economics/econophysics/__init__.py +58 -0
- skcomplex/models/economics/econophysics/_crowd_avoidance.py +80 -0
- skcomplex/models/economics/econophysics/_debt_exchange.py +74 -0
- skcomplex/models/economics/econophysics/_diner.py +59 -0
- skcomplex/models/economics/econophysics/_diner_view.py +17 -0
- skcomplex/models/economics/econophysics/_el_farol.py +114 -0
- skcomplex/models/economics/econophysics/_exchange.py +82 -0
- skcomplex/models/economics/econophysics/_game_state_spec.py +26 -0
- skcomplex/models/economics/econophysics/_kinetic.py +80 -0
- skcomplex/models/economics/econophysics/_kolkata.py +87 -0
- skcomplex/models/economics/econophysics/_minority.py +123 -0
- skcomplex/models/economics/econophysics/_minority_game.py +161 -0
- skcomplex/models/economics/econophysics/_minority_player.py +79 -0
- skcomplex/models/economics/econophysics/_minority_player_view.py +22 -0
- skcomplex/models/economics/econophysics/_patron.py +105 -0
- skcomplex/models/economics/econophysics/_patron_view.py +18 -0
- skcomplex/models/economics/econophysics/_predictor_pool.py +181 -0
- skcomplex/models/economics/econophysics/_predictor_pool_view.py +14 -0
- skcomplex/models/economics/econophysics/_restaurants.py +93 -0
- skcomplex/models/economics/econophysics/_saving_exchange.py +73 -0
- skcomplex/models/economics/econophysics/_saving_trader.py +47 -0
- skcomplex/models/economics/econophysics/_saving_trader_view.py +12 -0
- skcomplex/models/economics/econophysics/_wealth_exchange.py +114 -0
- skcomplex/models/economics/econophysics/_welfare.py +210 -0
- skcomplex/models/economics/econophysics/_welfare_policy.py +99 -0
- skcomplex/models/economics/finance/__init__.py +41 -0
- skcomplex/models/economics/finance/_arbitrage.py +139 -0
- skcomplex/models/economics/finance/_asset.py +42 -0
- skcomplex/models/economics/finance/_assets.py +44 -0
- skcomplex/models/economics/finance/_book.py +115 -0
- skcomplex/models/economics/finance/_contagion.py +116 -0
- skcomplex/models/economics/finance/_correlated_assets.py +69 -0
- skcomplex/models/economics/finance/_debt_rank_cascade.py +86 -0
- skcomplex/models/economics/finance/_geometric_brownian_motion.py +89 -0
- skcomplex/models/economics/finance/_gibrat_firm.py +82 -0
- skcomplex/models/economics/finance/_gibrat_firm_view.py +18 -0
- skcomplex/models/economics/finance/_growth_processes.py +195 -0
- skcomplex/models/economics/finance/_interbank.py +76 -0
- skcomplex/models/economics/finance/_interbank_view.py +14 -0
- skcomplex/models/economics/finance/_kesten_firm.py +88 -0
- skcomplex/models/economics/finance/_kesten_firm_view.py +16 -0
- skcomplex/models/economics/finance/_order_book.py +164 -0
- skcomplex/models/economics/finance/_reflecting_floor.py +66 -0
- skcomplex/models/economics/finance/_stock_trader.py +205 -0
- skcomplex/models/economics/finance/_stock_trader_view.py +24 -0
- skcomplex/models/economics/finance/_wealth.py +143 -0
- skcomplex/models/economics/innovation/__init__.py +23 -0
- skcomplex/models/economics/innovation/_adoption.py +233 -0
- skcomplex/models/economics/innovation/_bass.py +124 -0
- skcomplex/models/economics/innovation/_diversity.py +104 -0
- skcomplex/models/economics/innovation/_household_view.py +20 -0
- skcomplex/models/economics/innovation/_invention.py +140 -0
- skcomplex/models/economics/innovation/_part.py +64 -0
- skcomplex/models/economics/innovation/_part_view.py +12 -0
- skcomplex/models/economics/innovation/_redesign.py +88 -0
- skcomplex/models/economics/innovation/_technology.py +203 -0
- skcomplex/models/economics/innovation/_technology_view.py +14 -0
- skcomplex/models/economics/macroeconomics/__init__.py +70 -0
- skcomplex/models/economics/macroeconomics/_banking.py +148 -0
- skcomplex/models/economics/macroeconomics/_business.py +221 -0
- skcomplex/models/economics/macroeconomics/_business_view.py +24 -0
- skcomplex/models/economics/macroeconomics/_capital.py +122 -0
- skcomplex/models/economics/macroeconomics/_central_bank.py +80 -0
- skcomplex/models/economics/macroeconomics/_central_bank_view.py +13 -0
- skcomplex/models/economics/macroeconomics/_circuit.py +93 -0
- skcomplex/models/economics/macroeconomics/_commons.py +77 -0
- skcomplex/models/economics/macroeconomics/_credit.py +219 -0
- skcomplex/models/economics/macroeconomics/_credit_market.py +83 -0
- skcomplex/models/economics/macroeconomics/_depositor.py +114 -0
- skcomplex/models/economics/macroeconomics/_depositor_view.py +19 -0
- skcomplex/models/economics/macroeconomics/_economy.py +42 -0
- skcomplex/models/economics/macroeconomics/_estate.py +88 -0
- skcomplex/models/economics/macroeconomics/_firm.py +184 -0
- skcomplex/models/economics/macroeconomics/_firm_view.py +27 -0
- skcomplex/models/economics/macroeconomics/_firms.py +208 -0
- skcomplex/models/economics/macroeconomics/_firms_element.py +67 -0
- skcomplex/models/economics/macroeconomics/_food_market.py +84 -0
- skcomplex/models/economics/macroeconomics/_growth.py +109 -0
- skcomplex/models/economics/macroeconomics/_households.py +52 -0
- skcomplex/models/economics/macroeconomics/_income.py +59 -0
- skcomplex/models/economics/macroeconomics/_investing_firm_view.py +21 -0
- skcomplex/models/economics/macroeconomics/_labour_market.py +73 -0
- skcomplex/models/economics/macroeconomics/_lender.py +160 -0
- skcomplex/models/economics/macroeconomics/_lender_view.py +18 -0
- skcomplex/models/economics/macroeconomics/_metaphoria.py +257 -0
- skcomplex/models/economics/macroeconomics/_monetary.py +140 -0
- skcomplex/models/economics/macroeconomics/_monetary_bank.py +57 -0
- skcomplex/models/economics/macroeconomics/_optimal_growth.py +173 -0
- skcomplex/models/economics/macroeconomics/_people_spec.py +26 -0
- skcomplex/models/economics/macroeconomics/_plot.py +69 -0
- skcomplex/models/economics/macroeconomics/_plot_view.py +15 -0
- skcomplex/models/economics/macroeconomics/_policy_switch.py +78 -0
- skcomplex/models/economics/macroeconomics/_reserve_bank.py +118 -0
- skcomplex/models/economics/macroeconomics/_reserve_bank_view.py +14 -0
- skcomplex/models/economics/macroeconomics/_settler.py +291 -0
- skcomplex/models/economics/macroeconomics/_settler_view.py +56 -0
- skcomplex/models/economics/macroeconomics/_solow_growth.py +70 -0
- skcomplex/models/economics/macroeconomics/_trade.py +289 -0
- skcomplex/models/economics/markets/__init__.py +128 -0
- skcomplex/models/economics/markets/_auction_ledger.py +81 -0
- skcomplex/models/economics/markets/_barter.py +232 -0
- skcomplex/models/economics/markets/_barter_networks.py +169 -0
- skcomplex/models/economics/markets/_barter_trader.py +136 -0
- skcomplex/models/economics/markets/_barter_trader_view.py +16 -0
- skcomplex/models/economics/markets/_bilateral_barter.py +150 -0
- skcomplex/models/economics/markets/_brewery.py +67 -0
- skcomplex/models/economics/markets/_brock_hommes.py +115 -0
- skcomplex/models/economics/markets/_car.py +75 -0
- skcomplex/models/economics/markets/_car_view.py +14 -0
- skcomplex/models/economics/markets/_car_wash_operation.py +141 -0
- skcomplex/models/economics/markets/_cobweb.py +109 -0
- skcomplex/models/economics/markets/_commodities.py +286 -0
- skcomplex/models/economics/markets/_consumer_view.py +22 -0
- skcomplex/models/economics/markets/_cournot_adjustment.py +65 -0
- skcomplex/models/economics/markets/_cournot_best_response.py +88 -0
- skcomplex/models/economics/markets/_customer.py +147 -0
- skcomplex/models/economics/markets/_customer_view.py +16 -0
- skcomplex/models/economics/markets/_double_auction.py +141 -0
- skcomplex/models/economics/markets/_duopolist.py +54 -0
- skcomplex/models/economics/markets/_duopolist_view.py +13 -0
- skcomplex/models/economics/markets/_duopoly.py +85 -0
- skcomplex/models/economics/markets/_echelon.py +132 -0
- skcomplex/models/economics/markets/_employer.py +102 -0
- skcomplex/models/economics/markets/_employer_view.py +20 -0
- skcomplex/models/economics/markets/_exchange.py +171 -0
- skcomplex/models/economics/markets/_exchange_interaction.py +134 -0
- skcomplex/models/economics/markets/_factory.py +105 -0
- skcomplex/models/economics/markets/_fair_food.py +205 -0
- skcomplex/models/economics/markets/_forager.py +64 -0
- skcomplex/models/economics/markets/_forager_view.py +14 -0
- skcomplex/models/economics/markets/_goods_trader.py +68 -0
- skcomplex/models/economics/markets/_goods_traders.py +139 -0
- skcomplex/models/economics/markets/_heuristic_pricing.py +122 -0
- skcomplex/models/economics/markets/_heuristic_trader.py +108 -0
- skcomplex/models/economics/markets/_heuristic_trader_view.py +14 -0
- skcomplex/models/economics/markets/_inventory.py +212 -0
- skcomplex/models/economics/markets/_jobseeker.py +144 -0
- skcomplex/models/economics/markets/_jobseeker_view.py +26 -0
- skcomplex/models/economics/markets/_labour.py +188 -0
- skcomplex/models/economics/markets/_market.py +39 -0
- skcomplex/models/economics/markets/_market_state_spec.py +25 -0
- skcomplex/models/economics/markets/_oligopoly.py +167 -0
- skcomplex/models/economics/markets/_patch_map_spec.py +22 -0
- skcomplex/models/economics/markets/_perishables.py +150 -0
- skcomplex/models/economics/markets/_price_point.py +95 -0
- skcomplex/models/economics/markets/_prices.py +151 -0
- skcomplex/models/economics/markets/_pricing_firm.py +48 -0
- skcomplex/models/economics/markets/_pricing_firm_view.py +14 -0
- skcomplex/models/economics/markets/_pricing_game_spec.py +81 -0
- skcomplex/models/economics/markets/_produce.py +94 -0
- skcomplex/models/economics/markets/_product.py +97 -0
- skcomplex/models/economics/markets/_product_view.py +13 -0
- skcomplex/models/economics/markets/_queues.py +101 -0
- skcomplex/models/economics/markets/_resident.py +119 -0
- skcomplex/models/economics/markets/_resident_view.py +20 -0
- skcomplex/models/economics/markets/_retail_demand.py +52 -0
- skcomplex/models/economics/markets/_retailer.py +115 -0
- skcomplex/models/economics/markets/_shopper.py +115 -0
- skcomplex/models/economics/markets/_shopper_view.py +15 -0
- skcomplex/models/economics/markets/_shops.py +199 -0
- skcomplex/models/economics/markets/_stall.py +74 -0
- skcomplex/models/economics/markets/_stall_view.py +14 -0
- skcomplex/models/economics/markets/_store.py +171 -0
- skcomplex/models/economics/markets/_store_view.py +27 -0
- skcomplex/models/economics/markets/_sugar_patch.py +61 -0
- skcomplex/models/economics/markets/_sugar_patch_view.py +14 -0
- skcomplex/models/economics/markets/_sugarscape.py +250 -0
- skcomplex/models/economics/markets/_supply_chains.py +217 -0
- skcomplex/models/economics/markets/_supply_link.py +74 -0
- skcomplex/models/economics/markets/_till.py +79 -0
- skcomplex/models/economics/markets/_till_view.py +15 -0
- skcomplex/models/economics/markets/_washer.py +78 -0
- skcomplex/models/economics/markets/_zero_intelligence_buyer.py +99 -0
- skcomplex/models/economics/markets/_zero_intelligence_buyer_view.py +20 -0
- skcomplex/models/economics/markets/_zero_intelligence_seller.py +100 -0
- skcomplex/models/economics/markets/_zero_intelligence_seller_view.py +20 -0
- skcomplex/models/economics/resources/__init__.py +50 -0
- skcomplex/models/economics/resources/_bid_rent.py +104 -0
- skcomplex/models/economics/resources/_commons.py +218 -0
- skcomplex/models/economics/resources/_cow.py +69 -0
- skcomplex/models/economics/resources/_cow_view.py +13 -0
- skcomplex/models/economics/resources/_extraction.py +230 -0
- skcomplex/models/economics/resources/_farmer.py +93 -0
- skcomplex/models/economics/resources/_farmer_view.py +12 -0
- skcomplex/models/economics/resources/_fisheries.py +384 -0
- skcomplex/models/economics/resources/_fishery.py +91 -0
- skcomplex/models/economics/resources/_food.py +370 -0
- skcomplex/models/economics/resources/_grazing.py +148 -0
- skcomplex/models/economics/resources/_harvest.py +69 -0
- skcomplex/models/economics/resources/_harvesting.py +51 -0
- skcomplex/models/economics/resources/_herder.py +78 -0
- skcomplex/models/economics/resources/_herder_view.py +19 -0
- skcomplex/models/economics/resources/_land_cell.py +39 -0
- skcomplex/models/economics/resources/_land_use.py +73 -0
- skcomplex/models/economics/resources/_oil_economy.py +85 -0
- skcomplex/models/economics/resources/_optimal_harvesting.py +180 -0
- skcomplex/models/economics/resources/_pasture.py +98 -0
- skcomplex/models/economics/resources/_pasture_view.py +15 -0
- skcomplex/models/economics/resources/_plantations.py +359 -0
- skcomplex/models/economics/resources/_quota_regulator.py +84 -0
- skcomplex/models/economics/resources/_stock.py +67 -0
- skcomplex/models/engineering/__init__.py +1 -0
- skcomplex/models/engineering/circuits/__init__.py +23 -0
- skcomplex/models/engineering/circuits/_chua_circuit.py +48 -0
- skcomplex/models/engineering/circuits/_circuit.py +47 -0
- skcomplex/models/engineering/circuits/_circuits.py +387 -0
- skcomplex/models/engineering/circuits/_harvesters.py +150 -0
- skcomplex/models/engineering/circuits/_kicked_circuit.py +43 -0
- skcomplex/models/engineering/circuits/_memristor_circuit.py +48 -0
- skcomplex/models/engineering/circuits/_mixed_mode_chua_circuit.py +54 -0
- skcomplex/models/engineering/circuits/_multiscroll_chua_circuit.py +58 -0
- skcomplex/models/engineering/circuits/_tunnel_diode_circuit.py +45 -0
- skcomplex/models/engineering/common/__init__.py +6 -0
- skcomplex/models/engineering/common/mechanics/__init__.py +7 -0
- skcomplex/models/engineering/common/mechanics/_spring_damper.py +121 -0
- skcomplex/models/engineering/control/__init__.py +23 -0
- skcomplex/models/engineering/control/_cart_pendulum.py +119 -0
- skcomplex/models/engineering/control/_control.py +266 -0
- skcomplex/models/engineering/control/_controlled_process.py +72 -0
- skcomplex/models/engineering/control/_driven_oscillator.py +79 -0
- skcomplex/models/engineering/control/_integrator.py +39 -0
- skcomplex/models/engineering/control/_pid.py +106 -0
- skcomplex/models/engineering/control/_regulation.py +170 -0
- skcomplex/models/engineering/control/_room.py +51 -0
- skcomplex/models/engineering/control/_satellite.py +56 -0
- skcomplex/models/engineering/control/_state_feedback.py +82 -0
- skcomplex/models/engineering/control/_swinging_pendulum.py +60 -0
- skcomplex/models/engineering/power_systems/__init__.py +11 -0
- skcomplex/models/engineering/power_systems/_electromechanics.py +224 -0
- skcomplex/models/engineering/power_systems/_faraday_disk.py +93 -0
- skcomplex/models/engineering/power_systems/_grid_node.py +39 -0
- skcomplex/models/engineering/power_systems/_grids.py +89 -0
- skcomplex/models/engineering/power_systems/_rail_segment.py +80 -0
- skcomplex/models/engineering/power_systems/_regenerative_car.py +55 -0
- skcomplex/models/engineering/power_systems/_transmission_line.py +48 -0
- skcomplex/models/engineering/processes/__init__.py +13 -0
- skcomplex/models/engineering/processes/_irrigation_scheme.py +112 -0
- skcomplex/models/engineering/processes/_processes.py +115 -0
- skcomplex/models/engineering/processes/_relief_pipeline.py +79 -0
- skcomplex/models/engineering/processes/_rice_mill.py +112 -0
- skcomplex/models/engineering/processes/_stage.py +34 -0
- skcomplex/models/engineering/processes/_systems.py +316 -0
- skcomplex/models/engineering/processes/_tub.py +42 -0
- skcomplex/models/engineering/processes/_waste_system.py +101 -0
- skcomplex/models/engineering/robotics/__init__.py +12 -0
- skcomplex/models/engineering/robotics/_light_sensitive_robot.py +125 -0
- skcomplex/models/engineering/robotics/_robots.py +177 -0
- skcomplex/models/engineering/robotics/_swarm_robot.py +211 -0
- skcomplex/models/engineering/robotics/_swarm_robot_view.py +23 -0
- skcomplex/models/engineering/traffic/__init__.py +43 -0
- skcomplex/models/engineering/traffic/_arrival.py +117 -0
- skcomplex/models/engineering/traffic/_cab.py +170 -0
- skcomplex/models/engineering/traffic/_cab_view.py +21 -0
- skcomplex/models/engineering/traffic/_car.py +31 -0
- skcomplex/models/engineering/traffic/_car_following.py +245 -0
- skcomplex/models/engineering/traffic/_careless_braking.py +87 -0
- skcomplex/models/engineering/traffic/_continuum.py +429 -0
- skcomplex/models/engineering/traffic/_delayed_following.py +65 -0
- skcomplex/models/engineering/traffic/_driver.py +140 -0
- skcomplex/models/engineering/traffic/_driver_view.py +18 -0
- skcomplex/models/engineering/traffic/_drivers.py +133 -0
- skcomplex/models/engineering/traffic/_gas_kinetic_traffic.py +96 -0
- skcomplex/models/engineering/traffic/_intelligent_driver.py +90 -0
- skcomplex/models/engineering/traffic/_kerner_konhauser.py +42 -0
- skcomplex/models/engineering/traffic/_langevin.py +170 -0
- skcomplex/models/engineering/traffic/_langevin_driving.py +95 -0
- skcomplex/models/engineering/traffic/_lead_car.py +40 -0
- skcomplex/models/engineering/traffic/_lighthill_whitham_richards.py +30 -0
- skcomplex/models/engineering/traffic/_motorist.py +118 -0
- skcomplex/models/engineering/traffic/_motorist_view.py +18 -0
- skcomplex/models/engineering/traffic/_optimal_velocity.py +72 -0
- skcomplex/models/engineering/traffic/_payne.py +38 -0
- skcomplex/models/engineering/traffic/_rider.py +72 -0
- skcomplex/models/engineering/traffic/_rider_view.py +16 -0
- skcomplex/models/engineering/traffic/_ridesharing.py +179 -0
- skcomplex/models/engineering/traffic/_traffic.py +143 -0
- skcomplex/models/engineering/traffic/_traffic_moments.py +57 -0
- skcomplex/models/mathematics/__init__.py +1 -0
- skcomplex/models/mathematics/common/__init__.py +3 -0
- skcomplex/models/mathematics/common/flows/__init__.py +7 -0
- skcomplex/models/mathematics/common/flows/_lorenz.py +90 -0
- skcomplex/models/mathematics/dynamical_systems/__init__.py +90 -0
- skcomplex/models/mathematics/dynamical_systems/_baker_map.py +59 -0
- skcomplex/models/mathematics/dynamical_systems/_blow_up.py +64 -0
- skcomplex/models/mathematics/dynamical_systems/_cat_map.py +44 -0
- skcomplex/models/mathematics/dynamical_systems/_chaotic_ensembles.py +186 -0
- skcomplex/models/mathematics/dynamical_systems/_circle_map.py +49 -0
- skcomplex/models/mathematics/dynamical_systems/_cubic_walk.py +72 -0
- skcomplex/models/mathematics/dynamical_systems/_cusp.py +64 -0
- skcomplex/models/mathematics/dynamical_systems/_doubling_map.py +65 -0
- skcomplex/models/mathematics/dynamical_systems/_driven_flows.py +158 -0
- skcomplex/models/mathematics/dynamical_systems/_flows.py +179 -0
- skcomplex/models/mathematics/dynamical_systems/_henon_map.py +54 -0
- skcomplex/models/mathematics/dynamical_systems/_hopf.py +77 -0
- skcomplex/models/mathematics/dynamical_systems/_intermittency_map.py +44 -0
- skcomplex/models/mathematics/dynamical_systems/_jerk.py +72 -0
- skcomplex/models/mathematics/dynamical_systems/_koopman.py +118 -0
- skcomplex/models/mathematics/dynamical_systems/_logistic_map.py +44 -0
- skcomplex/models/mathematics/dynamical_systems/_maps.py +465 -0
- skcomplex/models/mathematics/dynamical_systems/_newton_map.py +44 -0
- skcomplex/models/mathematics/dynamical_systems/_normal_forms.py +154 -0
- skcomplex/models/mathematics/dynamical_systems/_rossler.py +83 -0
- skcomplex/models/mathematics/dynamical_systems/_saddle_node.py +59 -0
- skcomplex/models/mathematics/dynamical_systems/_skew_tent_map.py +63 -0
- skcomplex/models/mathematics/dynamical_systems/_standard_map.py +52 -0
- skcomplex/models/mathematics/dynamical_systems/_subcritical_forms.py +160 -0
- skcomplex/models/mathematics/dynamical_systems/_takens_bogdanov.py +74 -0
- skcomplex/models/mathematics/dynamical_systems/_tent_map.py +44 -0
- skcomplex/models/mathematics/dynamical_systems/_towel_map.py +59 -0
- skcomplex/models/mathematics/fractals/__init__.py +61 -0
- skcomplex/models/mathematics/fractals/_affine_spec.py +100 -0
- skcomplex/models/mathematics/fractals/_cantor_element.py +92 -0
- skcomplex/models/mathematics/fractals/_chaos_game.py +140 -0
- skcomplex/models/mathematics/fractals/_geometry_spec.py +84 -0
- skcomplex/models/mathematics/fractals/_geometry_visual.py +190 -0
- skcomplex/models/mathematics/fractals/_group_spec.py +24 -0
- skcomplex/models/mathematics/fractals/_koch_element.py +43 -0
- skcomplex/models/mathematics/fractals/_module_spec.py +47 -0
- skcomplex/models/mathematics/fractals/_patch_element.py +89 -0
- skcomplex/models/mathematics/fractals/_patch_kernel.py +200 -0
- skcomplex/models/mathematics/fractals/_patch_structure_spec.py +108 -0
- skcomplex/models/mathematics/fractals/_production_law.py +105 -0
- skcomplex/models/mathematics/fractals/_prototile_spec.py +53 -0
- skcomplex/models/mathematics/fractals/_quadratic.py +191 -0
- skcomplex/models/mathematics/fractals/_random_affine_map.py +100 -0
- skcomplex/models/mathematics/fractals/_rewriting_compiler.py +300 -0
- skcomplex/models/mathematics/fractals/_rewriting_error.py +10 -0
- skcomplex/models/mathematics/fractals/_rewriting_loops.py +180 -0
- skcomplex/models/mathematics/fractals/_rewriting_problem_spec.py +30 -0
- skcomplex/models/mathematics/fractals/_rewriting_solver.py +125 -0
- skcomplex/models/mathematics/fractals/_sierpinski_element.py +110 -0
- skcomplex/models/mathematics/fractals/_substitution.py +130 -0
- skcomplex/models/mathematics/fractals/_substitution_law.py +76 -0
- skcomplex/models/mathematics/fractals/_successor_spec.py +23 -0
- skcomplex/models/mathematics/fractals/_word_element.py +94 -0
- skcomplex/models/mathematics/fractals/_word_kernel.py +526 -0
- skcomplex/models/mathematics/fractals/_word_structure_spec.py +110 -0
- skcomplex/models/mathematics/fractals/_words.py +38 -0
- skcomplex/models/mathematics/fractals/types.py +12 -0
- skcomplex/models/mathematics/fractional_dynamics/__init__.py +29 -0
- skcomplex/models/mathematics/fractional_dynamics/_fractional.py +338 -0
- skcomplex/models/mathematics/fractional_dynamics/_oscillator.py +71 -0
- skcomplex/models/mathematics/fractional_dynamics/_relaxation.py +59 -0
- skcomplex/models/mathematics/fractional_dynamics/_van_der_pol.py +66 -0
- skcomplex/models/mathematics/networks/__init__.py +61 -0
- skcomplex/models/mathematics/networks/_copying_vertex.py +50 -0
- skcomplex/models/mathematics/networks/_ensemble_node.py +48 -0
- skcomplex/models/mathematics/networks/_ensembles.py +195 -0
- skcomplex/models/mathematics/networks/_failing.py +58 -0
- skcomplex/models/mathematics/networks/_giant_component.py +52 -0
- skcomplex/models/mathematics/networks/_growth.py +223 -0
- skcomplex/models/mathematics/networks/_hypergraphs.py +131 -0
- skcomplex/models/mathematics/networks/_link.py +21 -0
- skcomplex/models/mathematics/networks/_network_measures.py +59 -0
- skcomplex/models/mathematics/networks/_network_node.py +86 -0
- skcomplex/models/mathematics/networks/_network_walker.py +49 -0
- skcomplex/models/mathematics/networks/_network_walker_view.py +12 -0
- skcomplex/models/mathematics/networks/_node_content.py +47 -0
- skcomplex/models/mathematics/networks/_node_rank.py +57 -0
- skcomplex/models/mathematics/networks/_processes.py +148 -0
- skcomplex/models/mathematics/networks/_regulated_link.py +47 -0
- skcomplex/models/mathematics/networks/_regulated_node.py +43 -0
- skcomplex/models/mathematics/networks/_simplex.py +46 -0
- skcomplex/models/mathematics/networks/_simplex_ageing.py +46 -0
- skcomplex/models/mathematics/networks/_size_biased_move.py +44 -0
- skcomplex/models/mathematics/networks/_structure.py +170 -0
- skcomplex/models/mathematics/networks/_triad_vertex.py +64 -0
- skcomplex/models/mathematics/networks/_triadic.py +114 -0
- skcomplex/models/mathematics/networks/_triadic_regulation.py +65 -0
- skcomplex/models/mathematics/networks/_vertex.py +52 -0
- skcomplex/models/mathematics/networks/_walker_density.py +51 -0
- skcomplex/models/mathematics/stochastic_processes/__init__.py +62 -0
- skcomplex/models/mathematics/stochastic_processes/_ageing_walker.py +68 -0
- skcomplex/models/mathematics/stochastic_processes/_ageing_walker_view.py +15 -0
- skcomplex/models/mathematics/stochastic_processes/_bernoulli_trial.py +61 -0
- skcomplex/models/mathematics/stochastic_processes/_bernoulli_trial_view.py +14 -0
- skcomplex/models/mathematics/stochastic_processes/_branching.py +103 -0
- skcomplex/models/mathematics/stochastic_processes/_counting.py +88 -0
- skcomplex/models/mathematics/stochastic_processes/_fragment.py +91 -0
- skcomplex/models/mathematics/stochastic_processes/_fragment_view.py +13 -0
- skcomplex/models/mathematics/stochastic_processes/_hidden_markov_source.py +46 -0
- skcomplex/models/mathematics/stochastic_processes/_individual_view.py +13 -0
- skcomplex/models/mathematics/stochastic_processes/_intermittency.py +115 -0
- skcomplex/models/mathematics/stochastic_processes/_markov_source.py +41 -0
- skcomplex/models/mathematics/stochastic_processes/_memory_walker.py +57 -0
- skcomplex/models/mathematics/stochastic_processes/_persistent_walker.py +52 -0
- skcomplex/models/mathematics/stochastic_processes/_poisson_counter.py +47 -0
- skcomplex/models/mathematics/stochastic_processes/_queues.py +117 -0
- skcomplex/models/mathematics/stochastic_processes/_random_walker.py +52 -0
- skcomplex/models/mathematics/stochastic_processes/_reducing.py +104 -0
- skcomplex/models/mathematics/stochastic_processes/_reducing_ball.py +63 -0
- skcomplex/models/mathematics/stochastic_processes/_reducing_ball_view.py +14 -0
- skcomplex/models/mathematics/stochastic_processes/_reducing_jump.py +44 -0
- skcomplex/models/mathematics/stochastic_processes/_sources.py +90 -0
- skcomplex/models/mathematics/stochastic_processes/_urns.py +112 -0
- skcomplex/models/mathematics/stochastic_processes/_walks.py +280 -0
- skcomplex/models/mathematics/stochastic_processes/_weakening_particle.py +57 -0
- skcomplex/models/mathematics/stochastic_processes/types.py +8 -0
- skcomplex/models/physics/__init__.py +1 -0
- skcomplex/models/physics/active_matter/__init__.py +95 -0
- skcomplex/models/physics/active_matter/_active_particle.py +88 -0
- skcomplex/models/physics/active_matter/_alignment.py +192 -0
- skcomplex/models/physics/active_matter/_angular_alignment.py +98 -0
- skcomplex/models/physics/active_matter/_angular_diffusion.py +67 -0
- skcomplex/models/physics/active_matter/_binary_collisions.py +126 -0
- skcomplex/models/physics/active_matter/_chemotaxis.py +173 -0
- skcomplex/models/physics/active_matter/_cohesive_particle.py +132 -0
- skcomplex/models/physics/active_matter/_collective.py +327 -0
- skcomplex/models/physics/active_matter/_collisions.py +127 -0
- skcomplex/models/physics/active_matter/_contractile_gel_site.py +81 -0
- skcomplex/models/physics/active_matter/_cucker_smale_alignment.py +89 -0
- skcomplex/models/physics/active_matter/_depot_particle.py +103 -0
- skcomplex/models/physics/active_matter/_flocker.py +46 -0
- skcomplex/models/physics/active_matter/_flocker_view.py +20 -0
- skcomplex/models/physics/active_matter/_flocks.py +258 -0
- skcomplex/models/physics/active_matter/_gels.py +141 -0
- skcomplex/models/physics/active_matter/_heading_alignment.py +73 -0
- skcomplex/models/physics/active_matter/_kinetic_flocks.py +111 -0
- skcomplex/models/physics/active_matter/_landau_de_gennes_energy.py +107 -0
- skcomplex/models/physics/active_matter/_model_b.py +170 -0
- skcomplex/models/physics/active_matter/_nematic_density_site.py +78 -0
- skcomplex/models/physics/active_matter/_nematic_gel_site.py +115 -0
- skcomplex/models/physics/active_matter/_nematic_particle.py +61 -0
- skcomplex/models/physics/active_matter/_nematics.py +323 -0
- skcomplex/models/physics/active_matter/_nonreciprocal.py +214 -0
- skcomplex/models/physics/active_matter/_ornstein_uhlenbeck_particle.py +87 -0
- skcomplex/models/physics/active_matter/_particles.py +323 -0
- skcomplex/models/physics/active_matter/_phoretic_attraction.py +80 -0
- skcomplex/models/physics/active_matter/_polar_fluid.py +119 -0
- skcomplex/models/physics/active_matter/_polar_gel_site.py +120 -0
- skcomplex/models/physics/active_matter/_propulsion_step.py +64 -0
- skcomplex/models/physics/active_matter/_self_propulsion.py +73 -0
- skcomplex/models/physics/active_matter/_tumbler.py +100 -0
- skcomplex/models/physics/active_matter/_tumbler_view.py +23 -0
- skcomplex/models/physics/active_matter/_vicsek_particle.py +61 -0
- skcomplex/models/physics/celestial_mechanics/__init__.py +19 -0
- skcomplex/models/physics/celestial_mechanics/_dipoles.py +160 -0
- skcomplex/models/physics/celestial_mechanics/_kepler_body.py +76 -0
- skcomplex/models/physics/celestial_mechanics/_orbits.py +332 -0
- skcomplex/models/physics/celestial_mechanics/_rotating_frame_body.py +72 -0
- skcomplex/models/physics/celestial_mechanics/_sitnikov_body.py +54 -0
- skcomplex/models/physics/celestial_mechanics/types.py +6 -0
- skcomplex/models/physics/climate/__init__.py +60 -0
- skcomplex/models/physics/climate/_carbon_cycle.py +169 -0
- skcomplex/models/physics/climate/_climate_anomaly.py +55 -0
- skcomplex/models/physics/climate/_daisyworld.py +158 -0
- skcomplex/models/physics/climate/_delayed_oscillator.py +68 -0
- skcomplex/models/physics/climate/_early_warning.py +102 -0
- skcomplex/models/physics/climate/_energy_balance.py +207 -0
- skcomplex/models/physics/climate/_geodynamo.py +86 -0
- skcomplex/models/physics/climate/_ice_ages.py +179 -0
- skcomplex/models/physics/climate/_ice_albedo_climate.py +100 -0
- skcomplex/models/physics/climate/_latitude_band.py +156 -0
- skcomplex/models/physics/climate/_lorenz84.py +91 -0
- skcomplex/models/physics/climate/_lorenz96.py +67 -0
- skcomplex/models/physics/climate/_low_order.py +162 -0
- skcomplex/models/physics/climate/_net_energy.py +210 -0
- skcomplex/models/physics/climate/_ramped_fold.py +92 -0
- skcomplex/models/physics/climate/_saltzman_maasch.py +123 -0
- skcomplex/models/physics/climate/_soil.py +116 -0
- skcomplex/models/physics/climate/_stochastic_energy_balance.py +124 -0
- skcomplex/models/physics/climate/_tipping.py +141 -0
- skcomplex/models/physics/climate/_tipping_types.py +159 -0
- skcomplex/models/physics/climate/_van_der_pol_ice_ages.py +101 -0
- skcomplex/models/physics/climate/_variability.py +103 -0
- skcomplex/models/physics/common/__init__.py +6 -0
- skcomplex/models/physics/common/fields/__init__.py +14 -0
- skcomplex/models/physics/common/fields/_landau_energy.py +76 -0
- skcomplex/models/physics/common/fields/_phase_field.py +43 -0
- skcomplex/models/physics/common/fields/_swift_hohenberg_energy.py +74 -0
- skcomplex/models/physics/common/fields/_transports.py +119 -0
- skcomplex/models/physics/common/mechanics/__init__.py +5 -0
- skcomplex/models/physics/common/mechanics/_reflection.py +139 -0
- skcomplex/models/physics/common/oscillators/__init__.py +13 -0
- skcomplex/models/physics/common/oscillators/_kuramoto_coupling.py +140 -0
- skcomplex/models/physics/common/oscillators/_phase_oscillator.py +68 -0
- skcomplex/models/physics/common/oscillators/_sited_oscillator.py +55 -0
- skcomplex/models/physics/common/oscillators/_stuart_landau.py +106 -0
- skcomplex/models/physics/common/particles/__init__.py +28 -0
- skcomplex/models/physics/common/particles/_constant_force.py +65 -0
- skcomplex/models/physics/common/particles/_damping.py +72 -0
- skcomplex/models/physics/common/particles/_gravity.py +74 -0
- skcomplex/models/physics/common/particles/_harmonic_potential.py +77 -0
- skcomplex/models/physics/common/particles/_lammps.py +47 -0
- skcomplex/models/physics/common/particles/_langevin_thermostat.py +103 -0
- skcomplex/models/physics/common/particles/_lennard_jones.py +87 -0
- skcomplex/models/physics/common/particles/_mass_point.py +57 -0
- skcomplex/models/physics/common/particles/_potential_energy.py +56 -0
- skcomplex/models/physics/common/particles/_soft_sphere.py +82 -0
- skcomplex/models/physics/common/particles/_spring.py +78 -0
- skcomplex/models/physics/common/particles/_utils.py +25 -0
- skcomplex/models/physics/common/quantum/__init__.py +18 -0
- skcomplex/models/physics/common/quantum/_mode.py +46 -0
- skcomplex/models/physics/common/quantum/_quantum.py +127 -0
- skcomplex/models/physics/common/quantum/_qubit.py +61 -0
- skcomplex/models/physics/common/quantum/_site.py +49 -0
- skcomplex/models/physics/common/quantum/_spin.py +92 -0
- skcomplex/models/physics/common/spins/__init__.py +15 -0
- skcomplex/models/physics/common/spins/_ising_sampling.py +75 -0
- skcomplex/models/physics/common/spins/_potts_sampling.py +73 -0
- skcomplex/models/physics/common/spins/_spin_sampling.py +100 -0
- skcomplex/models/physics/common/spins/_thermal_sampling.py +105 -0
- skcomplex/models/physics/common/spins/_xy_sampling.py +67 -0
- skcomplex/models/physics/cosmology/__init__.py +8 -0
- skcomplex/models/physics/cosmology/_expansion.py +148 -0
- skcomplex/models/physics/criticality/__init__.py +29 -0
- skcomplex/models/physics/criticality/_absorbing.py +210 -0
- skcomplex/models/physics/criticality/_avalanche.py +69 -0
- skcomplex/models/physics/criticality/_crackling_noise.py +129 -0
- skcomplex/models/physics/criticality/_criticality.py +235 -0
- skcomplex/models/physics/criticality/_evolutionary_learning.py +231 -0
- skcomplex/models/physics/criticality/_fire.py +70 -0
- skcomplex/models/physics/criticality/_forest.py +55 -0
- skcomplex/models/physics/criticality/_learning.py +175 -0
- skcomplex/models/physics/criticality/_sandpile_cell.py +47 -0
- skcomplex/models/physics/fluids/__init__.py +49 -0
- skcomplex/models/physics/fluids/_bhatnagar_gross_krook.py +54 -0
- skcomplex/models/physics/fluids/_boussinesq.py +62 -0
- skcomplex/models/physics/fluids/_burgers.py +39 -0
- skcomplex/models/physics/fluids/_carleman_gas.py +61 -0
- skcomplex/models/physics/fluids/_flows.py +436 -0
- skcomplex/models/physics/fluids/_kinetic_equations.py +327 -0
- skcomplex/models/physics/fluids/_kinetics.py +147 -0
- skcomplex/models/physics/fluids/_kuramoto_sivashinsky.py +41 -0
- skcomplex/models/physics/fluids/_lattice_gases.py +217 -0
- skcomplex/models/physics/fluids/_marangoni.py +136 -0
- skcomplex/models/physics/fluids/_shallow_water.py +55 -0
- skcomplex/models/physics/fluids/_vorticity.py +56 -0
- skcomplex/models/physics/fluids/_wave_number.py +50 -0
- skcomplex/models/physics/heat/__init__.py +13 -0
- skcomplex/models/physics/heat/_cooling.py +96 -0
- skcomplex/models/physics/heat/_heat.py +182 -0
- skcomplex/models/physics/mechanics/__init__.py +93 -0
- skcomplex/models/physics/mechanics/_ballistic_pendulum.py +80 -0
- skcomplex/models/physics/mechanics/_bouncing_ball.py +51 -0
- skcomplex/models/physics/mechanics/_cart_pendulum.py +92 -0
- skcomplex/models/physics/mechanics/_cart_pendulum_interaction.py +57 -0
- skcomplex/models/physics/mechanics/_clock_pendulum.py +94 -0
- skcomplex/models/physics/mechanics/_clock_pendulum_interaction.py +60 -0
- skcomplex/models/physics/mechanics/_disc_billiard.py +90 -0
- skcomplex/models/physics/mechanics/_double_pendulum.py +95 -0
- skcomplex/models/physics/mechanics/_double_pendulum_interaction.py +53 -0
- skcomplex/models/physics/mechanics/_elastic_collision.py +78 -0
- skcomplex/models/physics/mechanics/_gyroscope.py +105 -0
- skcomplex/models/physics/mechanics/_gyroscope_interaction.py +57 -0
- skcomplex/models/physics/mechanics/_hanging_ball.py +65 -0
- skcomplex/models/physics/mechanics/_magnet.py +70 -0
- skcomplex/models/physics/mechanics/_mechanics.py +426 -0
- skcomplex/models/physics/mechanics/_parametric_pendulum.py +75 -0
- skcomplex/models/physics/mechanics/_parametric_pendulum_interaction.py +56 -0
- skcomplex/models/physics/mechanics/_pendulum.py +73 -0
- skcomplex/models/physics/mechanics/_pendulum_interaction.py +52 -0
- skcomplex/models/physics/mechanics/_pendulum_spring.py +68 -0
- skcomplex/models/physics/mechanics/_pendulums.py +547 -0
- skcomplex/models/physics/mechanics/_rotating_ball.py +66 -0
- skcomplex/models/physics/mechanics/_rotating_swing.py +100 -0
- skcomplex/models/physics/mechanics/_rotating_swing_interaction.py +70 -0
- skcomplex/models/physics/mechanics/_rotations.py +244 -0
- skcomplex/models/physics/mechanics/_springs.py +176 -0
- skcomplex/models/physics/mechanics/_support_spring.py +65 -0
- skcomplex/models/physics/mechanics/_wells.py +102 -0
- skcomplex/models/physics/nonlinear_oscillators/__init__.py +26 -0
- skcomplex/models/physics/nonlinear_oscillators/_adler_phase.py +73 -0
- skcomplex/models/physics/nonlinear_oscillators/_billiards.py +137 -0
- skcomplex/models/physics/nonlinear_oscillators/_duffing.py +78 -0
- skcomplex/models/physics/nonlinear_oscillators/_henon_heiles.py +57 -0
- skcomplex/models/physics/nonlinear_oscillators/_mushroom_billiard.py +96 -0
- skcomplex/models/physics/nonlinear_oscillators/_oscillators.py +313 -0
- skcomplex/models/physics/nonlinear_oscillators/_sinai_billiard.py +101 -0
- skcomplex/models/physics/nonlinear_oscillators/_van_der_pol.py +92 -0
- skcomplex/models/physics/oceanography/__init__.py +12 -0
- skcomplex/models/physics/oceanography/_gyres.py +145 -0
- skcomplex/models/physics/oceanography/_quasi_geostrophic_site.py +66 -0
- skcomplex/models/physics/oceanography/_thermohaline.py +133 -0
- skcomplex/models/physics/pattern_formation/__init__.py +18 -0
- skcomplex/models/physics/pattern_formation/_conserved.py +168 -0
- skcomplex/models/physics/pattern_formation/_ginzburg_landau.py +83 -0
- skcomplex/models/physics/pattern_formation/_ordering.py +183 -0
- skcomplex/models/physics/pattern_formation/_pattern_field.py +37 -0
- skcomplex/models/physics/pattern_formation/_patterns.py +135 -0
- skcomplex/models/physics/seismology/__init__.py +11 -0
- skcomplex/models/physics/seismology/_faults.py +118 -0
- skcomplex/models/physics/seismology/_spring_blocks.py +175 -0
- skcomplex/models/physics/soft_matter/__init__.py +76 -0
- skcomplex/models/physics/soft_matter/_anomalous.py +331 -0
- skcomplex/models/physics/soft_matter/_brownian.py +137 -0
- skcomplex/models/physics/soft_matter/_brownian_particle.py +58 -0
- skcomplex/models/physics/soft_matter/_colored_noise.py +137 -0
- skcomplex/models/physics/soft_matter/_continuous_time_walker.py +62 -0
- skcomplex/models/physics/soft_matter/_diffusion.py +418 -0
- skcomplex/models/physics/soft_matter/_double_well.py +57 -0
- skcomplex/models/physics/soft_matter/_flashing_sawtooth.py +82 -0
- skcomplex/models/physics/soft_matter/_fractional_walker.py +54 -0
- skcomplex/models/physics/soft_matter/_friction.py +214 -0
- skcomplex/models/physics/soft_matter/_levy_flier.py +54 -0
- skcomplex/models/physics/soft_matter/_levy_walker.py +67 -0
- skcomplex/models/physics/soft_matter/_modulated_particle.py +76 -0
- skcomplex/models/physics/soft_matter/_optical_trap.py +93 -0
- skcomplex/models/physics/soft_matter/_ratchets.py +163 -0
- skcomplex/models/physics/soft_matter/_scaled_walker.py +57 -0
- skcomplex/models/physics/soft_matter/_speckle_field.py +81 -0
- skcomplex/models/physics/soft_matter/_thermal_noise.py +52 -0
- skcomplex/models/physics/soft_matter/_tilted_washboard.py +70 -0
- skcomplex/models/physics/soft_matter/_transient_walker.py +61 -0
- skcomplex/models/physics/soft_matter/_traps.py +166 -0
- skcomplex/models/physics/soft_matter/_wall_particle.py +72 -0
- skcomplex/models/physics/statistical_mechanics/__init__.py +114 -0
- skcomplex/models/physics/statistical_mechanics/_absorbing_processes.py +156 -0
- skcomplex/models/physics/statistical_mechanics/_boltzmann_average.py +44 -0
- skcomplex/models/physics/statistical_mechanics/_boltzmann_sum.py +83 -0
- skcomplex/models/physics/statistical_mechanics/_bond_sampling.py +46 -0
- skcomplex/models/physics/statistical_mechanics/_bond_spin.py +76 -0
- skcomplex/models/physics/statistical_mechanics/_contact_site.py +85 -0
- skcomplex/models/physics/statistical_mechanics/_dephasing.py +59 -0
- skcomplex/models/physics/statistical_mechanics/_disk.py +36 -0
- skcomplex/models/physics/statistical_mechanics/_driven_particles.py +250 -0
- skcomplex/models/physics/statistical_mechanics/_energy_level.py +30 -0
- skcomplex/models/physics/statistical_mechanics/_exclusion_hops.py +76 -0
- skcomplex/models/physics/statistical_mechanics/_exclusion_site.py +61 -0
- skcomplex/models/physics/statistical_mechanics/_fully_connected_spins.py +232 -0
- skcomplex/models/physics/statistical_mechanics/_gases.py +156 -0
- skcomplex/models/physics/statistical_mechanics/_graph_spins.py +93 -0
- skcomplex/models/physics/statistical_mechanics/_ising_spin.py +63 -0
- skcomplex/models/physics/statistical_mechanics/_kinetic_temperature.py +66 -0
- skcomplex/models/physics/statistical_mechanics/_master_equations.py +171 -0
- skcomplex/models/physics/statistical_mechanics/_mattis_spin.py +79 -0
- skcomplex/models/physics/statistical_mechanics/_maxwell_boltzmann.py +96 -0
- skcomplex/models/physics/statistical_mechanics/_microstate.py +102 -0
- skcomplex/models/physics/statistical_mechanics/_order_parameter.py +90 -0
- skcomplex/models/physics/statistical_mechanics/_particle_site.py +41 -0
- skcomplex/models/physics/statistical_mechanics/_percolation.py +60 -0
- skcomplex/models/physics/statistical_mechanics/_percolation_site.py +73 -0
- skcomplex/models/physics/statistical_mechanics/_potts_spin.py +58 -0
- skcomplex/models/physics/statistical_mechanics/_processes.py +355 -0
- skcomplex/models/physics/statistical_mechanics/_q2r_spin.py +51 -0
- skcomplex/models/physics/statistical_mechanics/_quantum_spins.py +153 -0
- skcomplex/models/physics/statistical_mechanics/_random_energy.py +68 -0
- skcomplex/models/physics/statistical_mechanics/_reservoir.py +81 -0
- skcomplex/models/physics/statistical_mechanics/_spin_glasses.py +203 -0
- skcomplex/models/physics/statistical_mechanics/_spins.py +200 -0
- skcomplex/models/physics/statistical_mechanics/_susceptibility.py +112 -0
- skcomplex/models/physics/statistical_mechanics/_traps.py +135 -0
- skcomplex/models/physics/statistical_mechanics/_tree_node.py +48 -0
- skcomplex/models/physics/statistical_mechanics/_urns.py +107 -0
- skcomplex/models/physics/statistical_mechanics/_walker.py +81 -0
- skcomplex/models/physics/statistical_mechanics/_walker_view.py +20 -0
- skcomplex/models/physics/statistical_mechanics/_xxz_exchange.py +67 -0
- skcomplex/models/physics/statistical_mechanics/_xy_spin.py +58 -0
- skcomplex/models/physics/statistical_mechanics/_zeeman_field.py +56 -0
- skcomplex/models/physics/statistical_mechanics/_zero_range_hop.py +86 -0
- skcomplex/models/physics/statistical_mechanics/_zero_range_hops.py +81 -0
- skcomplex/models/physics/statistical_mechanics/_zone.py +78 -0
- skcomplex/models/physics/synchronization/__init__.py +64 -0
- skcomplex/models/physics/synchronization/_aggregate_averaging.py +63 -0
- skcomplex/models/physics/synchronization/_amplitude_death.py +278 -0
- skcomplex/models/physics/synchronization/_chaos.py +152 -0
- skcomplex/models/physics/synchronization/_diffusive_coupling.py +69 -0
- skcomplex/models/physics/synchronization/_edge_coupling.py +50 -0
- skcomplex/models/physics/synchronization/_hypergraphs.py +166 -0
- skcomplex/models/physics/synchronization/_integrate_and_fire_oscillator.py +80 -0
- skcomplex/models/physics/synchronization/_kuramoto.py +423 -0
- skcomplex/models/physics/synchronization/_link.py +46 -0
- skcomplex/models/physics/synchronization/_logistic_coupling.py +78 -0
- skcomplex/models/physics/synchronization/_logistic_node.py +59 -0
- skcomplex/models/physics/synchronization/_logistic_unit.py +43 -0
- skcomplex/models/physics/synchronization/_networks.py +184 -0
- skcomplex/models/physics/synchronization/_pulses.py +138 -0
- skcomplex/models/physics/synchronization/_rossler_oscillator.py +95 -0
- skcomplex/models/physics/synchronization/_swarmalator.py +48 -0
- skcomplex/models/physics/synchronization/_swarmalators.py +182 -0
- skcomplex/models/physics/synchronization/_utils.py +29 -0
- skcomplex/models/physics/synchronization/_winfree_mean_field.py +62 -0
- skcomplex/models/physics/waves/__init__.py +23 -0
- skcomplex/models/physics/waves/_charged.py +203 -0
- skcomplex/models/physics/waves/_driven_anchor.py +63 -0
- skcomplex/models/physics/waves/_lattice_hamiltonian.py +60 -0
- skcomplex/models/physics/waves/_position_dephasing.py +64 -0
- skcomplex/models/physics/waves/_quantum.py +125 -0
- skcomplex/models/physics/waves/_strings.py +169 -0
- skcomplex/models/physics/waves/_wave_function.py +79 -0
- skcomplex/models/physics/waves/_wave_string.py +52 -0
- skcomplex/models/social/__init__.py +1 -0
- skcomplex/models/social/cooperation/__init__.py +34 -0
- skcomplex/models/social/cooperation/_contributor.py +62 -0
- skcomplex/models/social/cooperation/_dilemma.py +56 -0
- skcomplex/models/social/cooperation/_hyperedge_goods.py +54 -0
- skcomplex/models/social/cooperation/_hypergraph_games.py +249 -0
- skcomplex/models/social/cooperation/_prisoner.py +56 -0
- skcomplex/models/social/cooperation/_prisoners_dilemma.py +126 -0
- skcomplex/models/social/cooperation/_public_goods.py +54 -0
- skcomplex/models/social/cooperation/_simplicial_dilemma.py +119 -0
- skcomplex/models/social/cooperation/_spatial_games.py +159 -0
- skcomplex/models/social/cooperation/_strategist.py +57 -0
- skcomplex/models/social/cooperation/_strategist_view.py +14 -0
- skcomplex/models/social/cooperation/_tournament.py +126 -0
- skcomplex/models/social/cooperation/_tournaments.py +87 -0
- skcomplex/models/social/crowds/__init__.py +46 -0
- skcomplex/models/social/crowds/_criminal_contagion.py +108 -0
- skcomplex/models/social/crowds/_criminality.py +223 -0
- skcomplex/models/social/crowds/_crowding.py +115 -0
- skcomplex/models/social/crowds/_deterrence.py +101 -0
- skcomplex/models/social/crowds/_evacuation.py +196 -0
- skcomplex/models/social/crowds/_guidance.py +69 -0
- skcomplex/models/social/crowds/_motivation.py +67 -0
- skcomplex/models/social/crowds/_pedestrians.py +85 -0
- skcomplex/models/social/crowds/_recruitment.py +90 -0
- skcomplex/models/social/crowds/_security_agents.py +48 -0
- skcomplex/models/social/crowds/_social_repulsion.py +86 -0
- skcomplex/models/social/crowds/_walking.py +186 -0
- skcomplex/models/social/crowds/_walls.py +69 -0
- skcomplex/models/social/language/__init__.py +13 -0
- skcomplex/models/social/language/_language.py +30 -0
- skcomplex/models/social/language/_least_effort.py +69 -0
- skcomplex/models/social/language/_word.py +39 -0
- skcomplex/models/social/language/_word_frequencies.py +48 -0
- skcomplex/models/social/opinion_dynamics/__init__.py +142 -0
- skcomplex/models/social/opinion_dynamics/_adopter.py +61 -0
- skcomplex/models/social/opinion_dynamics/_adopter_view.py +14 -0
- skcomplex/models/social/opinion_dynamics/_adoption.py +83 -0
- skcomplex/models/social/opinion_dynamics/_axelrod.py +160 -0
- skcomplex/models/social/opinion_dynamics/_believer.py +71 -0
- skcomplex/models/social/opinion_dynamics/_believer_view.py +16 -0
- skcomplex/models/social/opinion_dynamics/_bounded_confidence.py +126 -0
- skcomplex/models/social/opinion_dynamics/_citizen.py +49 -0
- skcomplex/models/social/opinion_dynamics/_citizen_view.py +12 -0
- skcomplex/models/social/opinion_dynamics/_club_member.py +78 -0
- skcomplex/models/social/opinion_dynamics/_coevolution.py +187 -0
- skcomplex/models/social/opinion_dynamics/_coevolving_voter.py +63 -0
- skcomplex/models/social/opinion_dynamics/_cognition.py +73 -0
- skcomplex/models/social/opinion_dynamics/_complex_agent.py +58 -0
- skcomplex/models/social/opinion_dynamics/_complex_agent_view.py +13 -0
- skcomplex/models/social/opinion_dynamics/_confidence_coupling.py +76 -0
- skcomplex/models/social/opinion_dynamics/_confident.py +50 -0
- skcomplex/models/social/opinion_dynamics/_conventions.py +44 -0
- skcomplex/models/social/opinion_dynamics/_conversations.py +116 -0
- skcomplex/models/social/opinion_dynamics/_cultural_influence.py +93 -0
- skcomplex/models/social/opinion_dynamics/_diffusion.py +205 -0
- skcomplex/models/social/opinion_dynamics/_discussant.py +60 -0
- skcomplex/models/social/opinion_dynamics/_discussant_view.py +14 -0
- skcomplex/models/social/opinion_dynamics/_discussions.py +51 -0
- skcomplex/models/social/opinion_dynamics/_encounters.py +48 -0
- skcomplex/models/social/opinion_dynamics/_hypergraph_consensus.py +106 -0
- skcomplex/models/social/opinion_dynamics/_influencee.py +70 -0
- skcomplex/models/social/opinion_dynamics/_influencee_view.py +16 -0
- skcomplex/models/social/opinion_dynamics/_kinetic_opinion.py +287 -0
- skcomplex/models/social/opinion_dynamics/_majority_voter.py +43 -0
- skcomplex/models/social/opinion_dynamics/_namer.py +53 -0
- skcomplex/models/social/opinion_dynamics/_namer_view.py +13 -0
- skcomplex/models/social/opinion_dynamics/_naming_games.py +68 -0
- skcomplex/models/social/opinion_dynamics/_opinion.py +39 -0
- skcomplex/models/social/opinion_dynamics/_persuader.py +52 -0
- skcomplex/models/social/opinion_dynamics/_persuader_view.py +12 -0
- skcomplex/models/social/opinion_dynamics/_persuasion.py +247 -0
- skcomplex/models/social/opinion_dynamics/_random_pairs.py +53 -0
- skcomplex/models/social/opinion_dynamics/_schedule.py +39 -0
- skcomplex/models/social/opinion_dynamics/_separation.py +71 -0
- skcomplex/models/social/opinion_dynamics/_social_impact.py +60 -0
- skcomplex/models/social/opinion_dynamics/_standardization.py +212 -0
- skcomplex/models/social/opinion_dynamics/_thinker.py +61 -0
- skcomplex/models/social/opinion_dynamics/_thinker_view.py +15 -0
- skcomplex/models/social/opinion_dynamics/_three_body_consensus.py +71 -0
- skcomplex/models/social/opinion_dynamics/_tie.py +21 -0
- skcomplex/models/social/opinion_dynamics/_variant_voter.py +67 -0
- skcomplex/models/social/opinion_dynamics/_variant_voter_view.py +14 -0
- skcomplex/models/social/opinion_dynamics/_variant_voting.py +63 -0
- skcomplex/models/social/opinion_dynamics/_village.py +61 -0
- skcomplex/models/social/opinion_dynamics/_village_view.py +14 -0
- skcomplex/models/social/opinion_dynamics/_voter.py +49 -0
- skcomplex/models/social/opinion_dynamics/_voter_imitation.py +48 -0
- skcomplex/models/social/opinion_dynamics/_voter_view.py +12 -0
- skcomplex/models/social/opinion_dynamics/_voters.py +197 -0
- skcomplex/models/social/organizations/__init__.py +68 -0
- skcomplex/models/social/organizations/_arms_race.py +34 -0
- skcomplex/models/social/organizations/_burden.py +38 -0
- skcomplex/models/social/organizations/_city_resident.py +41 -0
- skcomplex/models/social/organizations/_contender_view.py +14 -0
- skcomplex/models/social/organizations/_contest.py +32 -0
- skcomplex/models/social/organizations/_daily_movements.py +144 -0
- skcomplex/models/social/organizations/_eater.py +282 -0
- skcomplex/models/social/organizations/_eater_view.py +24 -0
- skcomplex/models/social/organizations/_employee.py +173 -0
- skcomplex/models/social/organizations/_employee_view.py +35 -0
- skcomplex/models/social/organizations/_employment.py +127 -0
- skcomplex/models/social/organizations/_execution.py +79 -0
- skcomplex/models/social/organizations/_gravity_contact.py +69 -0
- skcomplex/models/social/organizations/_hierarchies.py +174 -0
- skcomplex/models/social/organizations/_obesity.py +131 -0
- skcomplex/models/social/organizations/_premises.py +75 -0
- skcomplex/models/social/organizations/_premises_view.py +16 -0
- skcomplex/models/social/organizations/_queues.py +52 -0
- skcomplex/models/social/organizations/_restaurant.py +59 -0
- skcomplex/models/social/organizations/_restaurant_view.py +14 -0
- skcomplex/models/social/organizations/_sabotage.py +183 -0
- skcomplex/models/social/organizations/_supervisor.py +25 -0
- skcomplex/models/social/organizations/_task.py +65 -0
- skcomplex/models/social/organizations/_task_view.py +15 -0
- skcomplex/models/social/organizations/_trafficking.py +184 -0
- skcomplex/models/social/organizations/_traps.py +322 -0
- skcomplex/models/social/organizations/_traveller.py +55 -0
- skcomplex/models/social/organizations/_traveller_view.py +13 -0
- skcomplex/models/social/organizations/_urban_scaling.py +72 -0
- skcomplex/models/social/segregation/__init__.py +21 -0
- skcomplex/models/social/segregation/_block_moves.py +127 -0
- skcomplex/models/social/segregation/_blocks.py +111 -0
- skcomplex/models/social/segregation/_dweller.py +70 -0
- skcomplex/models/social/segregation/_dweller_view.py +16 -0
- skcomplex/models/social/segregation/_relocation.py +60 -0
- skcomplex/models/social/segregation/_resident.py +55 -0
- skcomplex/models/social/segregation/_resident_view.py +13 -0
- skcomplex/models/social/segregation/_schelling.py +75 -0
- skcomplex/models/social/spreading/__init__.py +37 -0
- skcomplex/models/social/spreading/_cascades.py +118 -0
- skcomplex/models/social/spreading/_exposure.py +166 -0
- skcomplex/models/social/spreading/_growing_word.py +55 -0
- skcomplex/models/social/spreading/_growing_word_view.py +13 -0
- skcomplex/models/social/spreading/_growth.py +52 -0
- skcomplex/models/social/spreading/_infective.py +55 -0
- skcomplex/models/social/spreading/_listeners.py +41 -0
- skcomplex/models/social/spreading/_participant.py +50 -0
- skcomplex/models/social/spreading/_rumour_contacts.py +81 -0
- skcomplex/models/social/spreading/_rumours.py +57 -0
- skcomplex/models/social/spreading/_simplicial.py +120 -0
- skcomplex/models/social/spreading/_simplicial_infection.py +64 -0
- skcomplex/models/social/spreading/_threshold_activation.py +50 -0
- skcomplex/models/social/spreading/_threshold_node_view.py +13 -0
- skcomplex/models/social/spreading/_writing.py +86 -0
- skcomplex/models/types.py +10 -0
- skcomplex/specs/__init__.py +198 -0
- skcomplex/specs/_accelerated_spec.py +46 -0
- skcomplex/specs/_agent_snapshot_spec.py +34 -0
- skcomplex/specs/_agent_state_spec.py +26 -0
- skcomplex/specs/_arguments_spec.py +60 -0
- skcomplex/specs/_axis_spec.py +59 -0
- skcomplex/specs/_base_record_spec.py +16 -0
- skcomplex/specs/_base_spec.py +73 -0
- skcomplex/specs/_base_structure_spec.py +173 -0
- skcomplex/specs/_batch_matching_spec.py +23 -0
- skcomplex/specs/_breakpoints_spec.py +58 -0
- skcomplex/specs/_call_spec.py +64 -0
- skcomplex/specs/_capacity_rows_spec.py +120 -0
- skcomplex/specs/_cardinality_spec.py +58 -0
- skcomplex/specs/_cascade_record_spec.py +36 -0
- skcomplex/specs/_clamp_spec.py +54 -0
- skcomplex/specs/_clause_spec.py +42 -0
- skcomplex/specs/_compiled_flow_spec.py +20 -0
- skcomplex/specs/_composed_rule_spec.py +33 -0
- skcomplex/specs/_continuous_matching_spec.py +48 -0
- skcomplex/specs/_control_solution_spec.py +54 -0
- skcomplex/specs/_control_spec.py +21 -0
- skcomplex/specs/_covariance_adaptation_spec.py +25 -0
- skcomplex/specs/_dataset_spec.py +85 -0
- skcomplex/specs/_delay_spec.py +27 -0
- skcomplex/specs/_dialect_spec.py +207 -0
- skcomplex/specs/_differential_evolution_spec.py +33 -0
- skcomplex/specs/_direction_spec.py +44 -0
- skcomplex/specs/_draw_spec.py +273 -0
- skcomplex/specs/_entry_spec.py +403 -0
- skcomplex/specs/_event_record_spec.py +37 -0
- skcomplex/specs/_evolution_strategy_spec.py +25 -0
- skcomplex/specs/_extremal_record_spec.py +32 -0
- skcomplex/specs/_fractional_rows_spec.py +33 -0
- skcomplex/specs/_fractional_state_spec.py +30 -0
- skcomplex/specs/_held_reduction_spec.py +29 -0
- skcomplex/specs/_hilbert_spec.py +75 -0
- skcomplex/specs/_hyperedge_reduction_spec.py +38 -0
- skcomplex/specs/_issue_spec.py +52 -0
- skcomplex/specs/_iterative_matching_spec.py +39 -0
- skcomplex/specs/_jump_channels_spec.py +40 -0
- skcomplex/specs/_jump_path_spec.py +29 -0
- skcomplex/specs/_layer_spec.py +47 -0
- skcomplex/specs/_layout_spec.py +158 -0
- skcomplex/specs/_local_operator_spec.py +72 -0
- skcomplex/specs/_lookup_spec.py +33 -0
- skcomplex/specs/_loop_spec.py +17 -0
- skcomplex/specs/_lowered_functions_spec.py +71 -0
- skcomplex/specs/_match_spec.py +37 -0
- skcomplex/specs/_matrix_law_spec.py +31 -0
- skcomplex/specs/_move_spec.py +69 -0
- skcomplex/specs/_neighbor_read_spec.py +83 -0
- skcomplex/specs/_neighbor_reduction_spec.py +39 -0
- skcomplex/specs/_network_rows_spec.py +124 -0
- skcomplex/specs/_network_snapshot_spec.py +61 -0
- skcomplex/specs/_noise_process_spec.py +41 -0
- skcomplex/specs/_objective_spec.py +39 -0
- skcomplex/specs/_observable_spec.py +79 -0
- skcomplex/specs/_operator_spec.py +170 -0
- skcomplex/specs/_orders_spec.py +16 -0
- skcomplex/specs/_outer_totalistic_spec.py +38 -0
- skcomplex/specs/_owners_spec.py +28 -0
- skcomplex/specs/_pair_read_spec.py +38 -0
- skcomplex/specs/_parameter_spec.py +81 -0
- skcomplex/specs/_parameters_spec.py +26 -0
- skcomplex/specs/_particle_swarm_spec.py +33 -0
- skcomplex/specs/_partner_spec.py +98 -0
- skcomplex/specs/_partner_switch_spec.py +39 -0
- skcomplex/specs/_phase_spec.py +61 -0
- skcomplex/specs/_phases_schedule_spec.py +59 -0
- skcomplex/specs/_plan_spec.py +18 -0
- skcomplex/specs/_planned_partition_spec.py +30 -0
- skcomplex/specs/_queue_spec.py +46 -0
- skcomplex/specs/_radius_spec.py +66 -0
- skcomplex/specs/_random_search_spec.py +51 -0
- skcomplex/specs/_read_spec.py +45 -0
- skcomplex/specs/_reduction_spec.py +48 -0
- skcomplex/specs/_renewal_record_spec.py +49 -0
- skcomplex/specs/_requirement_spec.py +32 -0
- skcomplex/specs/_role_spec.py +54 -0
- skcomplex/specs/_run_result_spec.py +52 -0
- skcomplex/specs/_run_state_spec.py +41 -0
- skcomplex/specs/_sampled_draw_spec.py +32 -0
- skcomplex/specs/_sampler_spec.py +57 -0
- skcomplex/specs/_samples_spec.py +29 -0
- skcomplex/specs/_schedule_spec.py +17 -0
- skcomplex/specs/_sector_spec.py +31 -0
- skcomplex/specs/_segment_spec.py +21 -0
- skcomplex/specs/_series_spec.py +29 -0
- skcomplex/specs/_signature_spec.py +55 -0
- skcomplex/specs/_snapshots_spec.py +56 -0
- skcomplex/specs/_stable_matching_spec.py +58 -0
- skcomplex/specs/_state_spec.py +138 -0
- skcomplex/specs/_step_spec.py +39 -0
- skcomplex/specs/_structure_state_spec.py +30 -0
- skcomplex/specs/_support_spec.py +76 -0
- skcomplex/specs/_symmetry_spec.py +59 -0
- skcomplex/specs/_table_spec.py +42 -0
- skcomplex/specs/_table_values_spec.py +36 -0
- skcomplex/specs/_tensor_spec.py +197 -0
- skcomplex/specs/_topology_request_spec.py +97 -0
- skcomplex/specs/_totalistic_spec.py +37 -0
- skcomplex/specs/_unknown_spec.py +22 -0
- skcomplex/specs/_validation_report_spec.py +62 -0
- skcomplex/specs/_variable_spec.py +124 -0
- skcomplex/specs/_visual_spec.py +30 -0
- skcomplex/specs/_weight_spec.py +16 -0
- skcomplex/specs/_wiener_block_spec.py +31 -0
- skcomplex/specs/_wiener_process_spec.py +54 -0
- skcomplex/types.py +140 -0
|
@@ -0,0 +1,942 @@
|
|
|
1
|
+
"""Define the reductions and reads across the members of a group, as Sage symbolic functions the compiler lowers.
|
|
2
|
+
|
|
3
|
+
Sage has no reduction over the members of a group, so each reduction is a Sage function made by `function`, kept
|
|
4
|
+
unevaluated in expressions. Arguments that are not symbolic, such as a constant weight matrix or a neighbourhood, ride
|
|
5
|
+
in the expression as a symbol named after a digest of their value.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# Author: Georgios Douzas <gdouzas@icloud.com>
|
|
9
|
+
# License: MIT
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
import numbers
|
|
13
|
+
from collections.abc import Callable
|
|
14
|
+
from types import SimpleNamespace
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
import scipy.sparse
|
|
18
|
+
from sage.all__sagemath_symbolics import SR, Expression, arctan2, cos, function, sin, var, vector
|
|
19
|
+
from sage.modules.free_module_element import FreeModuleElement
|
|
20
|
+
from sage.symbolic.function import Function
|
|
21
|
+
|
|
22
|
+
from ....errors import ValidationError
|
|
23
|
+
from ....specs import HyperedgeReductionSpec, LayerSpec, NeighborReductionSpec, ReductionSpec
|
|
24
|
+
from ....specs._draw_spec import draws_in
|
|
25
|
+
from ....types import AnyArray
|
|
26
|
+
from ...spaces import AdjacencyNeighborhood, BaseNeighborhood, LatticeNeighborhood, MemoryNeighborhood
|
|
27
|
+
from ...spaces._lattice import BOUNDARIES
|
|
28
|
+
from ._conditions import both
|
|
29
|
+
from ._pointwise import _largest, _smallest
|
|
30
|
+
|
|
31
|
+
KINDS = {
|
|
32
|
+
'total': 'sum',
|
|
33
|
+
'mean': 'mean',
|
|
34
|
+
'maximum': 'max',
|
|
35
|
+
'minimum': 'min',
|
|
36
|
+
'variance': 'var',
|
|
37
|
+
'count': 'count',
|
|
38
|
+
'log_sum_exp': 'logsumexp',
|
|
39
|
+
'reduction': 'function',
|
|
40
|
+
}
|
|
41
|
+
NEIGHBOR_REDUCTIONS = ('sum', 'mean', 'count', 'max', 'min', 'normalized-mean', 'argmax')
|
|
42
|
+
MIN_HYPEREDGE_SIZE = 2
|
|
43
|
+
COMPONENT_REDUCTIONS = ('label', 'size', 'largest', 'giant')
|
|
44
|
+
WEIGHTS: dict[str, object] = {}
|
|
45
|
+
FUNCTIONS: dict[str, Callable[[AnyArray], object]] = {}
|
|
46
|
+
NEIGHBORHOODS: dict[str, object] = {}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _is_placeholder(item: Expression, value: int) -> bool:
|
|
50
|
+
"""Check whether an operand is the number that stands for an absent condition, weights, group, or neighbourhood."""
|
|
51
|
+
item = SR(item)
|
|
52
|
+
return bool(item.is_numeric() and item == value)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _print_reduction(
|
|
56
|
+
self: Function,
|
|
57
|
+
argument: Expression,
|
|
58
|
+
condition: Expression,
|
|
59
|
+
weights: Expression,
|
|
60
|
+
over: Expression,
|
|
61
|
+
) -> str:
|
|
62
|
+
"""Return a reduction call with its keywords, leaving out the absent condition, weights, and group."""
|
|
63
|
+
name = self.name()
|
|
64
|
+
parts = [] if name == 'count' else [str(argument)]
|
|
65
|
+
if not _is_placeholder(over, 0):
|
|
66
|
+
parts.append(f'over={over}')
|
|
67
|
+
if not _is_placeholder(condition, 1):
|
|
68
|
+
parts.append(f'where={condition}')
|
|
69
|
+
if not _is_placeholder(weights, 0):
|
|
70
|
+
parts.append(f'weights={weights}')
|
|
71
|
+
return f'{name}({", ".join(parts)})'
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _print_neighbors(self: object, argument: Expression, weight: Expression, over: Expression, kind: Expression) -> str:
|
|
75
|
+
"""Return a neighbourhood reduction call with its keywords, leaving out the own neighbourhood and unit weight."""
|
|
76
|
+
del self
|
|
77
|
+
parts = [str(argument)]
|
|
78
|
+
if not _is_placeholder(over, 0):
|
|
79
|
+
parts.append(f'over={NEIGHBORHOODS.get(str(over), over)!r}')
|
|
80
|
+
parts.append(f'reduce={NEIGHBOR_REDUCTIONS[int(SR(kind))]!r}')
|
|
81
|
+
if not _is_placeholder(weight, 1):
|
|
82
|
+
parts.append(f'weight={weight}')
|
|
83
|
+
return f'neighbors({", ".join(parts)})'
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _print_hyperedges(
|
|
87
|
+
self: object,
|
|
88
|
+
argument: Expression,
|
|
89
|
+
weight: Expression,
|
|
90
|
+
size: Expression,
|
|
91
|
+
kind: Expression,
|
|
92
|
+
) -> str:
|
|
93
|
+
"""Return a hyperedge reduction call with its keywords, leaving out every size and unit weight."""
|
|
94
|
+
del self
|
|
95
|
+
parts = [str(argument), f'reduce={NEIGHBOR_REDUCTIONS[int(SR(kind))]!r}']
|
|
96
|
+
if not _is_placeholder(size, 0):
|
|
97
|
+
parts.append(f'size={int(SR(size))}')
|
|
98
|
+
if not _is_placeholder(weight, 1):
|
|
99
|
+
parts.append(f'weight={weight}')
|
|
100
|
+
return f'hyperedges({", ".join(parts)})'
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _print_components(self: object, active: Expression, over: Expression, kind: Expression) -> str:
|
|
104
|
+
"""Return a components reduction call with its keywords, leaving out the own neighbourhood."""
|
|
105
|
+
del self
|
|
106
|
+
parts = [str(active)]
|
|
107
|
+
if not _is_placeholder(over, 0):
|
|
108
|
+
parts.append(f'over={NEIGHBORHOODS.get(str(over), over)!r}')
|
|
109
|
+
parts.append(f'reduce={COMPONENT_REDUCTIONS[int(SR(kind))]!r}')
|
|
110
|
+
return f'components({", ".join(parts)})'
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _eval_shift(
|
|
114
|
+
self: object,
|
|
115
|
+
expression: Expression,
|
|
116
|
+
offset: Expression,
|
|
117
|
+
boundary: Expression,
|
|
118
|
+
fill: Expression,
|
|
119
|
+
) -> Expression | None:
|
|
120
|
+
"""Return the expression itself for an offset of 0 or an expression without symbols or draws, or `None`."""
|
|
121
|
+
del self, boundary, fill
|
|
122
|
+
if _is_placeholder(offset, 0) or not (SR(expression).variables() or draws_in(expression)):
|
|
123
|
+
return expression
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
REDUCTIONS = {name: function(name, nargs=4, print_func=_print_reduction) for name in KINDS}
|
|
128
|
+
NEIGHBORS = function('neighbors', nargs=4, print_func=_print_neighbors)
|
|
129
|
+
NEIGHBOR = function('neighbor', nargs=2)
|
|
130
|
+
HYPEREDGES = function('hyperedges', nargs=4, print_func=_print_hyperedges)
|
|
131
|
+
COMPONENTS = function('components', nargs=3, print_func=_print_components)
|
|
132
|
+
SHIFT_MEMBER = function('shift_member', nargs=4, eval_func=_eval_shift)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _over_symbol(over: object) -> Expression:
|
|
136
|
+
"""Return a symbol that names the group of a reduction, from a namespace or a symbol, or 0 for none."""
|
|
137
|
+
if over is None:
|
|
138
|
+
return SR(0)
|
|
139
|
+
if isinstance(over, SimpleNamespace):
|
|
140
|
+
for name, value in vars(over).items():
|
|
141
|
+
if name == 't':
|
|
142
|
+
continue
|
|
143
|
+
if isinstance(value, FreeModuleElement):
|
|
144
|
+
return SR(next(iter(value)))
|
|
145
|
+
if isinstance(value, Expression) and value.is_symbol():
|
|
146
|
+
return value
|
|
147
|
+
if isinstance(over, Expression) and over.is_symbol():
|
|
148
|
+
return over
|
|
149
|
+
error_msg = (
|
|
150
|
+
'A reduction takes the group to reduce over as a namespace such as `namespace.members`, or as one of its '
|
|
151
|
+
f'symbols, not {over!r}.'
|
|
152
|
+
)
|
|
153
|
+
raise ValidationError(error_msg)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def _weights_symbol(weights: object) -> Expression:
|
|
157
|
+
"""Return the symbol that stands for a constant weight matrix, the symbol of a shaped parameter, or 0 for none."""
|
|
158
|
+
if weights is None:
|
|
159
|
+
return SR(0)
|
|
160
|
+
if isinstance(weights, Expression) and weights.is_symbol():
|
|
161
|
+
return weights
|
|
162
|
+
if scipy.sparse.issparse(weights):
|
|
163
|
+
matrix = scipy.sparse.csr_array(weights, dtype=float)
|
|
164
|
+
parts = [np.asarray(matrix.shape), matrix.indptr, matrix.indices, matrix.data]
|
|
165
|
+
else:
|
|
166
|
+
matrix = np.asarray(weights, dtype=float)
|
|
167
|
+
parts = [np.asarray(matrix.shape), np.ascontiguousarray(matrix)]
|
|
168
|
+
if matrix.ndim not in {1, 2}:
|
|
169
|
+
error_msg = (
|
|
170
|
+
'The weights of a reduction are a matrix with one row per reading member, or one row that every reading '
|
|
171
|
+
f'member shares, not of shape {matrix.shape}.'
|
|
172
|
+
)
|
|
173
|
+
raise ValidationError(error_msg)
|
|
174
|
+
name = f'_weights_{hashlib.sha256(b"".join(np.asarray(part).tobytes() for part in parts)).hexdigest()[:16]}'
|
|
175
|
+
WEIGHTS[name] = matrix
|
|
176
|
+
return var(name)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _keyed(over: object, where: object, by: str | None) -> object:
|
|
180
|
+
"""Return the condition of a reduction, with the members that share the reading member's value of a state."""
|
|
181
|
+
if by is None:
|
|
182
|
+
return where
|
|
183
|
+
reduced = getattr(getattr(over, 'other', None), by, None) if isinstance(over, SimpleNamespace) else None
|
|
184
|
+
if not isinstance(by, str) or reduced is None:
|
|
185
|
+
error_msg = (
|
|
186
|
+
'A reduction keyed by a state takes the name of a state of its group as `by` and the namespace of the '
|
|
187
|
+
f'group as `over`, such as `over=namespace.members, by=\'cell\'`, not by={by!r} over={over!r}.'
|
|
188
|
+
)
|
|
189
|
+
raise ValidationError(error_msg)
|
|
190
|
+
shared = SR(reduced) == SR(getattr(over, by))
|
|
191
|
+
return shared if where is None else both(where, shared)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def _reduce(
|
|
195
|
+
name: str,
|
|
196
|
+
expression: object,
|
|
197
|
+
over: object,
|
|
198
|
+
where: object,
|
|
199
|
+
weights: object,
|
|
200
|
+
*,
|
|
201
|
+
by: str | None = None,
|
|
202
|
+
) -> Expression:
|
|
203
|
+
"""Return the unevaluated call of a reduction, with placeholders for the absent condition, weights, and group."""
|
|
204
|
+
where = _keyed(over, where, by)
|
|
205
|
+
condition = SR(1) if where is None else SR(where)
|
|
206
|
+
return REDUCTIONS[name](SR(expression), condition, _weights_symbol(weights), _over_symbol(over))
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def reduction(
|
|
210
|
+
function: Callable[[AnyArray], object],
|
|
211
|
+
expression: object,
|
|
212
|
+
over: object = None,
|
|
213
|
+
where: object = None,
|
|
214
|
+
) -> Expression:
|
|
215
|
+
"""Return a reduction over a group by a function of the array of member values.
|
|
216
|
+
|
|
217
|
+
The function runs in Python, so a law that reads it falls back to Python on the Numba backend. The name of the
|
|
218
|
+
function stands in the expression and the function waits in a module-level mapping, for the same reason as the
|
|
219
|
+
draws: a Sage symbolic function holds only a name and arguments.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
function:
|
|
223
|
+
The function of the one-dimensional array of the values of the members that `where` selects.
|
|
224
|
+
|
|
225
|
+
expression:
|
|
226
|
+
The value of one member, a symbolic expression.
|
|
227
|
+
|
|
228
|
+
over:
|
|
229
|
+
The group to reduce over, or `None` for the group the expression reads.
|
|
230
|
+
|
|
231
|
+
where:
|
|
232
|
+
A condition on each member, or `None` for every member.
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
reduction:
|
|
236
|
+
The reduction, a symbolic expression.
|
|
237
|
+
|
|
238
|
+
Examples:
|
|
239
|
+
>>> import numpy as np
|
|
240
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
241
|
+
>>> from skcomplex.core.laws.utils import reduction, reductions_in
|
|
242
|
+
>>> x = var('x')
|
|
243
|
+
>>> [item.kind for item in reductions_in(reduction(np.median, x))]
|
|
244
|
+
['function']
|
|
245
|
+
"""
|
|
246
|
+
if not callable(function):
|
|
247
|
+
error_msg = f'A reduction takes a function of the array of member values, but got {function!r}.'
|
|
248
|
+
raise ValidationError(error_msg)
|
|
249
|
+
name = f'_reduction_{id(function)}'
|
|
250
|
+
FUNCTIONS[name] = function
|
|
251
|
+
condition = SR(1) if where is None else SR(where)
|
|
252
|
+
return REDUCTIONS['reduction'](SR(expression), condition, var(name), _over_symbol(over))
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def total(
|
|
256
|
+
expression: object,
|
|
257
|
+
over: object = None,
|
|
258
|
+
where: object = None,
|
|
259
|
+
weights: object = None,
|
|
260
|
+
by: str | None = None,
|
|
261
|
+
) -> Expression:
|
|
262
|
+
"""Return the sum of an expression over the members of a group, `sum_j a_j`, or `sum_j W_ij a_j` with weights.
|
|
263
|
+
|
|
264
|
+
Inside the reduction, the symbols of a member stand for the reduced member, and outside it for the reading member.
|
|
265
|
+
|
|
266
|
+
Args:
|
|
267
|
+
expression:
|
|
268
|
+
The expression of one member, such as `namespace.x` or `cos(namespace.members.theta)`.
|
|
269
|
+
|
|
270
|
+
over:
|
|
271
|
+
The namespace of the group to reduce over, such as `namespace.members`, or `None` for the group the
|
|
272
|
+
expression reads.
|
|
273
|
+
|
|
274
|
+
where:
|
|
275
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
276
|
+
|
|
277
|
+
weights:
|
|
278
|
+
A constant matrix, a NumPy array or a SciPy sparse matrix, with one row per reading member and one column
|
|
279
|
+
per reduced member, a vector with one weight per reduced member that every reading member shares, or
|
|
280
|
+
`None`.
|
|
281
|
+
|
|
282
|
+
by:
|
|
283
|
+
The name of a state of the group, so every member reduces over the members that share its value of the
|
|
284
|
+
state, or `None` for all members. It needs the namespace of the group as `over`.
|
|
285
|
+
|
|
286
|
+
Returns:
|
|
287
|
+
reduction:
|
|
288
|
+
The unevaluated reduction, which every backend lowers.
|
|
289
|
+
|
|
290
|
+
Raises:
|
|
291
|
+
ValidationError:
|
|
292
|
+
The group is not a namespace or a symbol, the weights are not a matrix, or a key has no group namespace.
|
|
293
|
+
|
|
294
|
+
Examples:
|
|
295
|
+
>>> from sage.all__sagemath_symbolics import tanh, var
|
|
296
|
+
>>> from skcomplex.core.laws.utils import total
|
|
297
|
+
>>> x = var('x')
|
|
298
|
+
>>> -x + tanh(total(x))
|
|
299
|
+
-x + tanh(total(x))
|
|
300
|
+
>>> total(x, where=x > 0.5)
|
|
301
|
+
total(x, where=x > 0.5)
|
|
302
|
+
"""
|
|
303
|
+
return _reduce('total', expression, over, where, weights, by=by)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def mean(
|
|
307
|
+
expression: object,
|
|
308
|
+
over: object = None,
|
|
309
|
+
where: object = None,
|
|
310
|
+
weights: object = None,
|
|
311
|
+
by: str | None = None,
|
|
312
|
+
) -> Expression:
|
|
313
|
+
"""Return the mean of an expression over the selected members of a group, the total divided by their count.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
expression:
|
|
317
|
+
The expression of one member.
|
|
318
|
+
|
|
319
|
+
over:
|
|
320
|
+
The namespace of the group to reduce over, or `None` for the group the expression reads.
|
|
321
|
+
|
|
322
|
+
where:
|
|
323
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
324
|
+
|
|
325
|
+
weights:
|
|
326
|
+
A constant matrix with one row per reading member and one column per reduced member, or `None`.
|
|
327
|
+
|
|
328
|
+
by:
|
|
329
|
+
The name of a state of the group, so every member reduces over the members that share its value of the
|
|
330
|
+
state, or `None` for all members. It needs the namespace of the group as `over`.
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
reduction:
|
|
334
|
+
The unevaluated reduction, 0 when no member is selected.
|
|
335
|
+
|
|
336
|
+
Raises:
|
|
337
|
+
ValidationError:
|
|
338
|
+
The group is not a namespace or a symbol, the weights are not a matrix, or a key has no group namespace.
|
|
339
|
+
|
|
340
|
+
Examples:
|
|
341
|
+
>>> from sage.all__sagemath_symbolics import cos, var
|
|
342
|
+
>>> from skcomplex.core.laws.utils import mean
|
|
343
|
+
>>> mean(cos(var('theta')))
|
|
344
|
+
mean(cos(theta))
|
|
345
|
+
"""
|
|
346
|
+
return _reduce('mean', expression, over, where, weights, by=by)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def maximum(*expressions: object, over: object = None, where: object = None) -> Expression:
|
|
350
|
+
"""Return the largest value of an expression over the selected members of a group, or the largest of expressions.
|
|
351
|
+
|
|
352
|
+
With one expression it reduces over the members of a group, as `max` over an array. With several it compares
|
|
353
|
+
them member by member, as `max` over its arguments, with no group or condition.
|
|
354
|
+
|
|
355
|
+
Args:
|
|
356
|
+
*expressions:
|
|
357
|
+
The expression of one member, or several expressions to compare member by member.
|
|
358
|
+
|
|
359
|
+
over:
|
|
360
|
+
The namespace of the group to reduce over, or `None` for the group the expression reads.
|
|
361
|
+
|
|
362
|
+
where:
|
|
363
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
364
|
+
|
|
365
|
+
Returns:
|
|
366
|
+
value:
|
|
367
|
+
The unevaluated reduction, 0 when no member is selected, or the largest of the expressions.
|
|
368
|
+
|
|
369
|
+
Raises:
|
|
370
|
+
ValidationError:
|
|
371
|
+
No expression is given, several expressions come with a group or a condition, or the group is not a
|
|
372
|
+
namespace or a symbol.
|
|
373
|
+
|
|
374
|
+
Examples:
|
|
375
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
376
|
+
>>> from skcomplex.core.laws.utils import maximum
|
|
377
|
+
>>> x, y = var('x y')
|
|
378
|
+
>>> maximum(x)
|
|
379
|
+
maximum(x)
|
|
380
|
+
>>> maximum(x, y)
|
|
381
|
+
where(y > x, y, x)
|
|
382
|
+
>>> maximum(x, y).subs(x=1, y=2)
|
|
383
|
+
2
|
|
384
|
+
"""
|
|
385
|
+
if len(expressions) == 1:
|
|
386
|
+
return _reduce('maximum', expressions[0], over, where, None)
|
|
387
|
+
if not expressions or over is not None or where is not None:
|
|
388
|
+
error_msg = (
|
|
389
|
+
'maximum takes one expression to reduce over a group, or several expressions to compare member by member '
|
|
390
|
+
f'without a group or a condition, but got {len(expressions)} expressions.'
|
|
391
|
+
)
|
|
392
|
+
raise ValidationError(error_msg)
|
|
393
|
+
return _largest(expressions)
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
def minimum(*expressions: object, over: object = None, where: object = None) -> Expression:
|
|
397
|
+
"""Return the smallest value of an expression over the selected members of a group, or the smallest of expressions.
|
|
398
|
+
|
|
399
|
+
With one expression it reduces over the members of a group, as `min` over an array. With several it compares
|
|
400
|
+
them member by member, as `min` over its arguments, with no group or condition.
|
|
401
|
+
|
|
402
|
+
Args:
|
|
403
|
+
*expressions:
|
|
404
|
+
The expression of one member, or several expressions to compare member by member.
|
|
405
|
+
|
|
406
|
+
over:
|
|
407
|
+
The namespace of the group to reduce over, or `None` for the group the expression reads.
|
|
408
|
+
|
|
409
|
+
where:
|
|
410
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
411
|
+
|
|
412
|
+
Returns:
|
|
413
|
+
value:
|
|
414
|
+
The unevaluated reduction, 0 when no member is selected, or the smallest of the expressions.
|
|
415
|
+
|
|
416
|
+
Raises:
|
|
417
|
+
ValidationError:
|
|
418
|
+
No expression is given, several expressions come with a group or a condition, or the group is not a
|
|
419
|
+
namespace or a symbol.
|
|
420
|
+
|
|
421
|
+
Examples:
|
|
422
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
423
|
+
>>> from skcomplex.core.laws.utils import minimum
|
|
424
|
+
>>> x, y = var('x y')
|
|
425
|
+
>>> minimum(x)
|
|
426
|
+
minimum(x)
|
|
427
|
+
>>> minimum(x, y)
|
|
428
|
+
where(y < x, y, x)
|
|
429
|
+
>>> minimum(x, y).subs(x=1, y=2)
|
|
430
|
+
1
|
|
431
|
+
"""
|
|
432
|
+
if len(expressions) == 1:
|
|
433
|
+
return _reduce('minimum', expressions[0], over, where, None)
|
|
434
|
+
if not expressions or over is not None or where is not None:
|
|
435
|
+
error_msg = (
|
|
436
|
+
'minimum takes one expression to reduce over a group, or several expressions to compare member by member '
|
|
437
|
+
f'without a group or a condition, but got {len(expressions)} expressions.'
|
|
438
|
+
)
|
|
439
|
+
raise ValidationError(error_msg)
|
|
440
|
+
return _smallest(expressions)
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
def variance(expression: object, over: object = None, where: object = None) -> Expression:
|
|
444
|
+
"""Return the population variance of an expression over the selected members of a group.
|
|
445
|
+
|
|
446
|
+
Args:
|
|
447
|
+
expression:
|
|
448
|
+
The expression of one member.
|
|
449
|
+
|
|
450
|
+
over:
|
|
451
|
+
The namespace of the group to reduce over, or `None` for the group the expression reads.
|
|
452
|
+
|
|
453
|
+
where:
|
|
454
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
455
|
+
|
|
456
|
+
Returns:
|
|
457
|
+
reduction:
|
|
458
|
+
The unevaluated reduction, 0 when no member is selected.
|
|
459
|
+
|
|
460
|
+
Raises:
|
|
461
|
+
ValidationError:
|
|
462
|
+
The group is not a namespace or a symbol.
|
|
463
|
+
|
|
464
|
+
Examples:
|
|
465
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
466
|
+
>>> from skcomplex.core.laws.utils import variance
|
|
467
|
+
>>> variance(var('x'))
|
|
468
|
+
variance(x)
|
|
469
|
+
"""
|
|
470
|
+
return _reduce('variance', expression, over, where, None)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def log_sum_exp(expression: object, over: object = None, where: object = None) -> Expression:
|
|
474
|
+
"""Return the logarithm of the sum of the exponentials of an expression over the selected members of a group.
|
|
475
|
+
|
|
476
|
+
Args:
|
|
477
|
+
expression:
|
|
478
|
+
The expression of one member, a logarithm of the terms of the sum.
|
|
479
|
+
|
|
480
|
+
over:
|
|
481
|
+
The namespace of the group to reduce over, or `None` for the group the expression reads.
|
|
482
|
+
|
|
483
|
+
where:
|
|
484
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
485
|
+
|
|
486
|
+
Returns:
|
|
487
|
+
reduction:
|
|
488
|
+
The unevaluated reduction, 0 when no member is selected.
|
|
489
|
+
|
|
490
|
+
Raises:
|
|
491
|
+
ValidationError:
|
|
492
|
+
The group is not a namespace or a symbol.
|
|
493
|
+
|
|
494
|
+
Examples:
|
|
495
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
496
|
+
>>> from skcomplex.core.laws.utils import log_sum_exp
|
|
497
|
+
>>> log_sum_exp(-var('E') / var('T'))
|
|
498
|
+
log_sum_exp(-E/T)
|
|
499
|
+
"""
|
|
500
|
+
return _reduce('log_sum_exp', expression, over, where, None)
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
def count(over: object = None, where: object = None, by: str | None = None) -> Expression:
|
|
504
|
+
"""Return the number of members of a group that a condition selects, or of all members.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
over:
|
|
508
|
+
The namespace of the group to count, or `None` for the group the condition reads, or else the group of the
|
|
509
|
+
law.
|
|
510
|
+
|
|
511
|
+
where:
|
|
512
|
+
A condition on the counted member, or `None` for all members.
|
|
513
|
+
|
|
514
|
+
by:
|
|
515
|
+
The name of a state of the group, so every member reduces over the members that share its value of the
|
|
516
|
+
state, or `None` for all members. It needs the namespace of the group as `over`.
|
|
517
|
+
|
|
518
|
+
Returns:
|
|
519
|
+
reduction:
|
|
520
|
+
The unevaluated count.
|
|
521
|
+
|
|
522
|
+
Raises:
|
|
523
|
+
ValidationError:
|
|
524
|
+
The group is not a namespace or a symbol, or a key has no group namespace.
|
|
525
|
+
|
|
526
|
+
Examples:
|
|
527
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
528
|
+
>>> from skcomplex.core.laws.utils import count
|
|
529
|
+
>>> x = var('x')
|
|
530
|
+
>>> count(where=x > 0.5)
|
|
531
|
+
count(where=x > 0.5)
|
|
532
|
+
>>> from types import SimpleNamespace
|
|
533
|
+
>>> members = SimpleNamespace(cell=var('cell'), other=SimpleNamespace(cell=var('cell_other')))
|
|
534
|
+
>>> count(over=members, by='cell')
|
|
535
|
+
count(over=cell, where=cell_other == cell)
|
|
536
|
+
"""
|
|
537
|
+
return _reduce('count', 1, over, where, None, by=by)
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def circular_mean(
|
|
541
|
+
angle: object,
|
|
542
|
+
over: object = None,
|
|
543
|
+
where: object = None,
|
|
544
|
+
weights: object = None,
|
|
545
|
+
by: str | None = None,
|
|
546
|
+
) -> Expression:
|
|
547
|
+
"""Return the circular mean of an angle over the members of a group, `arctan2(sum_j sin a_j, sum_j cos a_j)`.
|
|
548
|
+
|
|
549
|
+
The mean is the direction of the sum of the unit vectors at the angles, 0 when no member is selected.
|
|
550
|
+
|
|
551
|
+
Args:
|
|
552
|
+
angle:
|
|
553
|
+
The angle of one member, in radians.
|
|
554
|
+
|
|
555
|
+
over:
|
|
556
|
+
The namespace of the group to reduce over, or `None` for the group the angle reads.
|
|
557
|
+
|
|
558
|
+
where:
|
|
559
|
+
A condition on the reduced member that selects the members, or `None` for all members.
|
|
560
|
+
|
|
561
|
+
weights:
|
|
562
|
+
A constant matrix with one row per reading member and one column per reduced member, or `None`.
|
|
563
|
+
|
|
564
|
+
by:
|
|
565
|
+
The name of a state of the group, so every member reduces over the members that share its value of the
|
|
566
|
+
state, or `None` for all members. It needs the namespace of the group as `over`.
|
|
567
|
+
|
|
568
|
+
Returns:
|
|
569
|
+
reduction:
|
|
570
|
+
The symbolic circular mean, in `[-pi, pi]`.
|
|
571
|
+
|
|
572
|
+
Raises:
|
|
573
|
+
ValidationError:
|
|
574
|
+
The group is not a namespace or a symbol, the weights are not a matrix, or a key has no group namespace.
|
|
575
|
+
|
|
576
|
+
Examples:
|
|
577
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
578
|
+
>>> from skcomplex.core.laws.utils import circular_mean
|
|
579
|
+
>>> circular_mean(var('theta'))
|
|
580
|
+
arctan2(total(sin(theta)), total(cos(theta)))
|
|
581
|
+
"""
|
|
582
|
+
sines = total(sin(SR(angle)), over, where, weights, by)
|
|
583
|
+
cosines = total(cos(SR(angle)), over, where, weights, by)
|
|
584
|
+
return arctan2(sines, cosines)
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
def _neighborhood_symbol(over: object) -> Expression:
|
|
588
|
+
"""Return the symbol that stands for a neighbourhood, registered by its value, or 0 for the space's own."""
|
|
589
|
+
if over is None:
|
|
590
|
+
return SR(0)
|
|
591
|
+
if isinstance(over, LayerSpec):
|
|
592
|
+
over = AdjacencyNeighborhood(layer=over.label)
|
|
593
|
+
if not isinstance(over, BaseNeighborhood):
|
|
594
|
+
error_msg = f'A neighbourhood reduction reduces over None, a neighbourhood, or a LayerSpec, not {over!r}.'
|
|
595
|
+
raise ValidationError(error_msg)
|
|
596
|
+
name = f'_over_{hashlib.sha256(repr(over).encode()).hexdigest()[:16]}'
|
|
597
|
+
NEIGHBORHOODS[name] = over
|
|
598
|
+
return var(name)
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
def neighbors(
|
|
602
|
+
expression: object,
|
|
603
|
+
over: BaseNeighborhood | LayerSpec | None = None,
|
|
604
|
+
reduce: str = 'sum',
|
|
605
|
+
weight: object = None,
|
|
606
|
+
) -> Expression | FreeModuleElement:
|
|
607
|
+
"""Return the reduction of an expression over the neighbours of every member of a group.
|
|
608
|
+
|
|
609
|
+
The expression is written for one neighbour: the namespace `namespace.other` holds the symbols of the neighbour,
|
|
610
|
+
and `namespace` those of the member that reads the reduction, so `sin(namespace.other.theta - namespace.theta)` is
|
|
611
|
+
the phase difference to one neighbour. The neighbourhood is the graph of a network space by default,
|
|
612
|
+
`AdjacencyNeighborhood()`, a layer of the network, `AdjacencyNeighborhood(layer=label)` or the `LayerSpec` itself, a
|
|
613
|
+
lattice neighbourhood, or in a continuous space the members within a distance, `RadiusNeighborhood(r)`, the nearest
|
|
614
|
+
members, `NearestNeighborhood(k)`, or the members within a distance inside a cone around a direction,
|
|
615
|
+
`ConeNeighborhood(r, angle)`. A reduction over no neighbours is 0.
|
|
616
|
+
|
|
617
|
+
The reductions with the weight `w_j` of every neighbour `j` of the value `f_j` are `'sum'`, `sum_j w_j f_j`,
|
|
618
|
+
`'mean'`, the sum divided by the number of neighbours, `'count'`, `sum_j w_j [f_j != 0]`, `'max'` and `'min'`, the
|
|
619
|
+
largest and smallest `w_j f_j`, `'normalized-mean'`, `sum_j w_j f_j / sum_j w_j`, and `'argmax'`, the value `f_j` of
|
|
620
|
+
the neighbour whose weight `w_j` is largest, the first of them in neighbour order. The circular mean of an angle,
|
|
621
|
+
`'circular-mean'`, is `arctan2(sum_j w_j sin f_j, sum_j w_j cos f_j)`, 0 over no neighbours. On a lattice
|
|
622
|
+
neighbourhood, `reduce='each'` gives the values of a lattice state at every offset, in neighbourhood order, without
|
|
623
|
+
reducing them.
|
|
624
|
+
|
|
625
|
+
Args:
|
|
626
|
+
expression:
|
|
627
|
+
The value of one neighbour, an expression of the symbols of `namespace.other` and `namespace`, or a vector
|
|
628
|
+
of them.
|
|
629
|
+
|
|
630
|
+
over:
|
|
631
|
+
The neighbourhood, or `None` for the neighbours of the network or lattice the group lives on.
|
|
632
|
+
|
|
633
|
+
reduce:
|
|
634
|
+
`'sum'`, `'mean'`, `'count'`, `'max'`, `'min'`, `'normalized-mean'`, `'argmax'`, or `'circular-mean'`, or
|
|
635
|
+
`'each'` for the values at every offset of a lattice neighbourhood or a memory.
|
|
636
|
+
|
|
637
|
+
weight:
|
|
638
|
+
The weight of one neighbour, an expression of the same symbols, or `None` for 1. The `'argmax'` reduction
|
|
639
|
+
picks the neighbour whose weight is largest.
|
|
640
|
+
|
|
641
|
+
Returns:
|
|
642
|
+
reduction:
|
|
643
|
+
The unevaluated reduction, one per component of a vector expression, or with `reduce='each'` the values of
|
|
644
|
+
a lattice state at the offsets of a lattice neighbourhood.
|
|
645
|
+
|
|
646
|
+
Raises:
|
|
647
|
+
ValidationError:
|
|
648
|
+
The reduction or the neighbourhood is unknown.
|
|
649
|
+
|
|
650
|
+
Examples:
|
|
651
|
+
>>> from sage.all__sagemath_symbolics import sin, var
|
|
652
|
+
>>> from skcomplex.core.laws.utils import neighbors
|
|
653
|
+
>>> from skcomplex.core.spaces import RadiusNeighborhood, VonNeumannNeighborhood
|
|
654
|
+
>>> neighbors(sin(var('theta_other')), over=RadiusNeighborhood(1.0), reduce='mean')
|
|
655
|
+
neighbors(sin(theta_other), over=RadiusNeighborhood(radius=1.0), reduce='mean')
|
|
656
|
+
>>> neighbors(var('strategy_other'), reduce='argmax', weight=var('payoff_other'))
|
|
657
|
+
neighbors(strategy_other, reduce='argmax', weight=payoff_other)
|
|
658
|
+
>>> values = neighbors(var('spin'), VonNeumannNeighborhood(), reduce='each')
|
|
659
|
+
>>> len(values), values[0]
|
|
660
|
+
(4, neighbor(spin, 0))
|
|
661
|
+
"""
|
|
662
|
+
if reduce == 'each':
|
|
663
|
+
if isinstance(over, LatticeNeighborhood):
|
|
664
|
+
size = len(over.check().prepare().offsets_)
|
|
665
|
+
elif isinstance(over, MemoryNeighborhood):
|
|
666
|
+
size = len(over.check().prepare().elements_)
|
|
667
|
+
else:
|
|
668
|
+
error_msg = f"The reduction 'each' reads a lattice or a memory neighbourhood, not {over!r}."
|
|
669
|
+
raise ValidationError(error_msg)
|
|
670
|
+
return vector(SR, [NEIGHBOR(expression, index) for index in range(size)])
|
|
671
|
+
if reduce == 'circular-mean':
|
|
672
|
+
sines = neighbors(sin(SR(expression)), over, 'sum', weight)
|
|
673
|
+
return arctan2(sines, neighbors(cos(SR(expression)), over, 'sum', weight))
|
|
674
|
+
if reduce not in NEIGHBOR_REDUCTIONS:
|
|
675
|
+
error_msg = (
|
|
676
|
+
'Unknown neighbourhood reduction '
|
|
677
|
+
f'{reduce!r}. Use one of {", ".join((*NEIGHBOR_REDUCTIONS, "circular-mean", "each"))}.'
|
|
678
|
+
)
|
|
679
|
+
raise ValidationError(error_msg)
|
|
680
|
+
over_symbol = _neighborhood_symbol(over)
|
|
681
|
+
code = SR(NEIGHBOR_REDUCTIONS.index(reduce))
|
|
682
|
+
weighted = SR(1) if weight is None else SR(weight)
|
|
683
|
+
if isinstance(expression, FreeModuleElement):
|
|
684
|
+
return vector(SR, [NEIGHBORS(SR(item), weighted, over_symbol, code) for item in expression])
|
|
685
|
+
return NEIGHBORS(SR(expression), weighted, over_symbol, code)
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
def hyperedges(
|
|
689
|
+
expression: object,
|
|
690
|
+
reduce: str = 'sum',
|
|
691
|
+
size: int | None = None,
|
|
692
|
+
weight: object = None,
|
|
693
|
+
) -> Expression | FreeModuleElement:
|
|
694
|
+
"""Return the reduction of an expression over the hyperedges around every member of a group on a network.
|
|
695
|
+
|
|
696
|
+
The expression is written for one hyperedge around the member that reads the reduction: the namespaces
|
|
697
|
+
`namespace.others` hold the symbols of the other members of the hyperedge in its order, `namespace.members` those
|
|
698
|
+
of all its members, which `total`, `mean`, `count`, `maximum`, and `minimum` reduce with `over=namespace.members`,
|
|
699
|
+
and `namespace` those of the reading member. So `sin(s.others[0].theta + s.others[1].theta - 2 * s.theta)` with
|
|
700
|
+
`size=3` is the three-body phase coupling over the triangles around a member. The hyperedges are those of the
|
|
701
|
+
network space of the group, and a reduction over no hyperedges is 0.
|
|
702
|
+
|
|
703
|
+
The reductions are those of `neighbors` with the weight `w_e` of every hyperedge `e` of the value `f_e`: `'sum'`,
|
|
704
|
+
`'mean'`, `'count'`, `'max'`, `'min'`, `'normalized-mean'`, `'argmax'`, and `'circular-mean'`. Without a size, the
|
|
705
|
+
reduction runs over the hyperedges of every size, which the sum, the mean, and the count reduce, and the
|
|
706
|
+
expression reads `namespace.members` rather than `namespace.others`.
|
|
707
|
+
|
|
708
|
+
Args:
|
|
709
|
+
expression:
|
|
710
|
+
The value of one hyperedge, an expression of the symbols of `namespace.others`, `namespace.members`, and
|
|
711
|
+
`namespace`, or a vector of them.
|
|
712
|
+
|
|
713
|
+
reduce:
|
|
714
|
+
`'sum'`, `'mean'`, `'count'`, `'max'`, `'min'`, `'normalized-mean'`, `'argmax'`, or `'circular-mean'`.
|
|
715
|
+
|
|
716
|
+
size:
|
|
717
|
+
The number of members of the hyperedges, or `None` for every size.
|
|
718
|
+
|
|
719
|
+
weight:
|
|
720
|
+
The weight of one hyperedge, an expression of the same symbols, or `None` for 1.
|
|
721
|
+
|
|
722
|
+
Returns:
|
|
723
|
+
reduction:
|
|
724
|
+
The unevaluated reduction, one per component of a vector expression.
|
|
725
|
+
|
|
726
|
+
Raises:
|
|
727
|
+
ValidationError:
|
|
728
|
+
The reduction is unknown, or the size is not a whole number of at least two.
|
|
729
|
+
|
|
730
|
+
Examples:
|
|
731
|
+
>>> from sage.all__sagemath_symbolics import sin, var
|
|
732
|
+
>>> from skcomplex.core.laws.utils import hyperedges
|
|
733
|
+
>>> theta, first, second = var('theta first second')
|
|
734
|
+
>>> hyperedges(sin(first + second - 2 * theta), size=3)
|
|
735
|
+
hyperedges(sin(first + second - 2*theta), reduce='sum', size=3)
|
|
736
|
+
>>> hyperedges(var('x'), reduce='mean')
|
|
737
|
+
hyperedges(x, reduce='mean')
|
|
738
|
+
"""
|
|
739
|
+
if size is not None and (
|
|
740
|
+
isinstance(size, bool) or not isinstance(size, numbers.Integral) or size < MIN_HYPEREDGE_SIZE
|
|
741
|
+
):
|
|
742
|
+
error_msg = f'A hyperedge reduction takes a size of 2 or more, or None for every size, not {size!r}.'
|
|
743
|
+
raise ValidationError(error_msg)
|
|
744
|
+
if reduce == 'circular-mean':
|
|
745
|
+
sines = hyperedges(sin(SR(expression)), 'sum', size, weight)
|
|
746
|
+
return arctan2(sines, hyperedges(cos(SR(expression)), 'sum', size, weight))
|
|
747
|
+
if reduce not in NEIGHBOR_REDUCTIONS:
|
|
748
|
+
error_msg = (
|
|
749
|
+
f'Unknown hyperedge reduction {reduce!r}. Use one of {", ".join((*NEIGHBOR_REDUCTIONS, "circular-mean"))}.'
|
|
750
|
+
)
|
|
751
|
+
raise ValidationError(error_msg)
|
|
752
|
+
code = SR(NEIGHBOR_REDUCTIONS.index(reduce))
|
|
753
|
+
weighted = SR(1) if weight is None else SR(weight)
|
|
754
|
+
sized = SR(0 if size is None else int(size))
|
|
755
|
+
if isinstance(expression, FreeModuleElement):
|
|
756
|
+
return vector(SR, [HYPEREDGES(SR(item), weighted, sized, code) for item in expression])
|
|
757
|
+
return HYPEREDGES(SR(expression), weighted, sized, code)
|
|
758
|
+
|
|
759
|
+
|
|
760
|
+
def shift_member(expression: Expression, offset: int, *, boundary: str = 'periodic', fill: float = 0.0) -> Expression:
|
|
761
|
+
"""Return an expression of a group's members read at the member a number of places along the group order.
|
|
762
|
+
|
|
763
|
+
The order of a group is the member index, so member `i` reads the expression at member `i + offset`. Past the
|
|
764
|
+
ends, `'periodic'` wraps around to close a ring, `'reflecting'` mirrors the order so the end member reads itself
|
|
765
|
+
for an offset of 1, and `'fixed'` reads `fill`. The compiler lowers the read to an index table of the group.
|
|
766
|
+
|
|
767
|
+
Args:
|
|
768
|
+
expression:
|
|
769
|
+
An expression of the member symbols of one group.
|
|
770
|
+
|
|
771
|
+
offset:
|
|
772
|
+
The number of members along the group order, negative to read members behind.
|
|
773
|
+
|
|
774
|
+
boundary:
|
|
775
|
+
`'periodic'`, `'reflecting'`, or `'fixed'`.
|
|
776
|
+
|
|
777
|
+
fill:
|
|
778
|
+
The value read past the ends of a fixed boundary.
|
|
779
|
+
|
|
780
|
+
Returns:
|
|
781
|
+
shifted:
|
|
782
|
+
The symbolic read at the offset member.
|
|
783
|
+
|
|
784
|
+
Raises:
|
|
785
|
+
ValidationError:
|
|
786
|
+
The offset is not an integer or the boundary is unknown.
|
|
787
|
+
|
|
788
|
+
Examples:
|
|
789
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
790
|
+
>>> from skcomplex.core.laws.utils import shift_member
|
|
791
|
+
>>> x = var('x')
|
|
792
|
+
>>> shift_member(x, 1) - x
|
|
793
|
+
-x + shift_member(x, 1, 0, 0.0)
|
|
794
|
+
>>> shift_member(x, 0)
|
|
795
|
+
x
|
|
796
|
+
"""
|
|
797
|
+
if boundary not in BOUNDARIES or isinstance(offset, bool) or not isinstance(offset, numbers.Integral):
|
|
798
|
+
error_msg = (
|
|
799
|
+
f'shift_member takes a whole number of members and a boundary among {", ".join(BOUNDARIES)}, but '
|
|
800
|
+
f'got the offset {offset!r} and the boundary {boundary!r}.'
|
|
801
|
+
)
|
|
802
|
+
raise ValidationError(error_msg)
|
|
803
|
+
return SHIFT_MEMBER(expression, int(offset), BOUNDARIES.index(boundary), float(fill))
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
def _calls_in(expression: object, names: set[str]) -> list[Expression]:
|
|
807
|
+
"""Return the outermost calls of the named functions in an expression or a vector, each listed once."""
|
|
808
|
+
if not isinstance(expression, Expression | FreeModuleElement | int | float):
|
|
809
|
+
return []
|
|
810
|
+
found: dict[str, Expression] = {}
|
|
811
|
+
stack = [SR(item) for item in (list(expression) if isinstance(expression, FreeModuleElement) else [expression])]
|
|
812
|
+
while stack:
|
|
813
|
+
item = stack.pop()
|
|
814
|
+
operator = item.operator()
|
|
815
|
+
if operator is None:
|
|
816
|
+
continue
|
|
817
|
+
if getattr(operator, 'name', lambda: '')() in names:
|
|
818
|
+
found.setdefault(str(item), item)
|
|
819
|
+
continue
|
|
820
|
+
stack.extend(item.operands())
|
|
821
|
+
return list(found.values())
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
def reductions_in(expression: object) -> list[ReductionSpec]:
|
|
825
|
+
"""Return the outermost reduction calls of an expression, which may hold further reductions in their arguments.
|
|
826
|
+
|
|
827
|
+
Args:
|
|
828
|
+
expression:
|
|
829
|
+
A symbolic expression, a number, or a vector of expressions.
|
|
830
|
+
|
|
831
|
+
Returns:
|
|
832
|
+
reductions:
|
|
833
|
+
The reductions, each listed once.
|
|
834
|
+
|
|
835
|
+
Examples:
|
|
836
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
837
|
+
>>> from skcomplex.core.laws.utils import mean, reductions_in, total
|
|
838
|
+
>>> x = var('x')
|
|
839
|
+
>>> [item.kind for item in reductions_in(total(x * mean(x)))]
|
|
840
|
+
['sum']
|
|
841
|
+
"""
|
|
842
|
+
reductions = []
|
|
843
|
+
for call in _calls_in(expression, set(KINDS)):
|
|
844
|
+
argument, condition, weights, over = call.operands()
|
|
845
|
+
reductions.append(
|
|
846
|
+
ReductionSpec(
|
|
847
|
+
call=call,
|
|
848
|
+
kind=KINDS[call.operator().name()],
|
|
849
|
+
argument=argument,
|
|
850
|
+
condition=None if _is_placeholder(condition, 1) else condition,
|
|
851
|
+
weights=(
|
|
852
|
+
None
|
|
853
|
+
if _is_placeholder(weights, 0) or str(weights) in FUNCTIONS
|
|
854
|
+
else WEIGHTS.get(str(weights), weights)
|
|
855
|
+
),
|
|
856
|
+
over=None if _is_placeholder(over, 0) else over,
|
|
857
|
+
function=FUNCTIONS.get(str(weights)),
|
|
858
|
+
),
|
|
859
|
+
)
|
|
860
|
+
return reductions
|
|
861
|
+
|
|
862
|
+
|
|
863
|
+
def _component_reduction(call: Expression) -> NeighborReductionSpec:
|
|
864
|
+
"""Return the neighbourhood reduction of the links of a components call, of the kind `'component-'` and its name."""
|
|
865
|
+
active, over, kind = call.operands()
|
|
866
|
+
return NeighborReductionSpec(
|
|
867
|
+
call=call,
|
|
868
|
+
kind=f'component-{COMPONENT_REDUCTIONS[int(SR(kind))]}',
|
|
869
|
+
argument=active,
|
|
870
|
+
weight=None,
|
|
871
|
+
over=None if _is_placeholder(over, 0) else NEIGHBORHOODS[str(over)],
|
|
872
|
+
)
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
def neighborhoods_in(expression: object) -> list[NeighborReductionSpec]:
|
|
876
|
+
"""Return the outermost neighbourhood reductions of an expression, the components reductions included.
|
|
877
|
+
|
|
878
|
+
A components reduction has the kind `'component-'` followed by its reduction, and the activity of one link as its
|
|
879
|
+
argument.
|
|
880
|
+
|
|
881
|
+
Args:
|
|
882
|
+
expression:
|
|
883
|
+
A symbolic expression, a number, or a vector of expressions.
|
|
884
|
+
|
|
885
|
+
Returns:
|
|
886
|
+
reductions:
|
|
887
|
+
The neighbourhood reductions, each listed once.
|
|
888
|
+
|
|
889
|
+
Examples:
|
|
890
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
891
|
+
>>> from skcomplex.core.laws.utils import neighbors, neighborhoods_in
|
|
892
|
+
>>> [item.kind for item in neighborhoods_in(neighbors(var('x'), reduce='mean'))]
|
|
893
|
+
['mean']
|
|
894
|
+
"""
|
|
895
|
+
reductions = []
|
|
896
|
+
for call in _calls_in(expression, {'neighbors', 'components'}):
|
|
897
|
+
if call.operator().name() == 'components':
|
|
898
|
+
reductions.append(_component_reduction(call))
|
|
899
|
+
continue
|
|
900
|
+
argument, weight, over, kind = call.operands()
|
|
901
|
+
reductions.append(
|
|
902
|
+
NeighborReductionSpec(
|
|
903
|
+
call=call,
|
|
904
|
+
kind=NEIGHBOR_REDUCTIONS[int(SR(kind))],
|
|
905
|
+
argument=argument,
|
|
906
|
+
weight=None if _is_placeholder(weight, 1) else weight,
|
|
907
|
+
over=None if _is_placeholder(over, 0) else NEIGHBORHOODS[str(over)],
|
|
908
|
+
),
|
|
909
|
+
)
|
|
910
|
+
return reductions
|
|
911
|
+
|
|
912
|
+
|
|
913
|
+
def hyperedges_in(expression: object) -> list[HyperedgeReductionSpec]:
|
|
914
|
+
"""Return the outermost hyperedge reductions of an expression.
|
|
915
|
+
|
|
916
|
+
Args:
|
|
917
|
+
expression:
|
|
918
|
+
A symbolic expression, a number, or a vector of expressions.
|
|
919
|
+
|
|
920
|
+
Returns:
|
|
921
|
+
reductions:
|
|
922
|
+
The hyperedge reductions, each listed once.
|
|
923
|
+
|
|
924
|
+
Examples:
|
|
925
|
+
>>> from sage.all__sagemath_symbolics import var
|
|
926
|
+
>>> from skcomplex.core.laws.utils import hyperedges, hyperedges_in
|
|
927
|
+
>>> [(item.kind, item.size) for item in hyperedges_in(hyperedges(var('x'), reduce='mean', size=3))]
|
|
928
|
+
[('mean', 3)]
|
|
929
|
+
"""
|
|
930
|
+
reductions = []
|
|
931
|
+
for call in _calls_in(expression, {'hyperedges'}):
|
|
932
|
+
argument, weight, size, kind = call.operands()
|
|
933
|
+
reductions.append(
|
|
934
|
+
HyperedgeReductionSpec(
|
|
935
|
+
call=call,
|
|
936
|
+
kind=NEIGHBOR_REDUCTIONS[int(SR(kind))],
|
|
937
|
+
argument=argument,
|
|
938
|
+
weight=None if _is_placeholder(weight, 1) else weight,
|
|
939
|
+
size=None if _is_placeholder(size, 0) else int(SR(size)),
|
|
940
|
+
),
|
|
941
|
+
)
|
|
942
|
+
return reductions
|