From 3e5ed8c39d17c18e95a64aef8787e48a354c38d6 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:38:24 +0100 Subject: [PATCH 1/2] FIX: relink to `fractions.Fraction` --- docs/conf.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index f97aefa7..68f5f03f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -49,7 +49,7 @@ def pick_newtype_attrs(some_type: type) -> list: api_target_substitutions: dict[str, str | tuple[str, str]] = { "EdgeQuantumNumberTypes": ("obj", "qrules.quantum_numbers.EdgeQuantumNumberTypes"), "EdgeType": "typing.TypeVar", - "Fraction": "fraction.Fraction", + "Fraction": ("obj", "fractions.Fraction"), "GraphEdgePropertyMap": ("obj", "qrules.argument_handling.GraphEdgePropertyMap"), "GraphElementProperties": ("obj", "qrules.solving.GraphElementProperties"), "GraphNodePropertyMap": ("obj", "qrules.argument_handling.GraphNodePropertyMap"), @@ -296,7 +296,6 @@ def pick_newtype_attrs(some_type: type) -> list: (r"py:(class|obj)", r"qrules\.topology\.NewNodeType"), (r"py:(class|obj)", r"qrules\.topology\.NodeType"), (r"py:(class|obj)", r"qrules\.topology\.VT"), - (r"py:(class|obj)", r"fraction\.Fraction"), *nitpick_temp_patterns, ] nitpicky = True From c9ad862fd20745b2800e2c99362d5782cd49b118 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:45:14 +0100 Subject: [PATCH 2/2] MAINT: simplify `Fraction` construction and notation --- src/qrules/__init__.py | 8 ++++---- src/qrules/combinatorics.py | 4 ++-- src/qrules/conservation_rules.py | 2 +- src/qrules/particle.py | 4 ++-- src/qrules/quantum_numbers.py | 2 +- src/qrules/settings.py | 8 ++++---- src/qrules/transition.py | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/qrules/__init__.py b/src/qrules/__init__.py index 8c37f008..d472dfaa 100644 --- a/src/qrules/__init__.py +++ b/src/qrules/__init__.py @@ -79,7 +79,7 @@ def check_reaction_violations( # noqa: C901, PLR0917 mass_conservation_factor: float | None = 3.0, particle_db: ParticleCollection | None = None, max_angular_momentum: int = 1, - max_spin_magnitude: float | Fraction = Fraction(2, 1), + max_spin_magnitude: float | Fraction = 2, ) -> set[frozenset[str]]: """Determine violated interaction rules for a given particle reaction. @@ -213,7 +213,7 @@ def check_edge_qn_conservation() -> set[frozenset[str]]: InteractionProperties(l_magnitude=l_magnitude, s_magnitude=s_magnitude) for l_magnitude, s_magnitude in product( _int_domain(0, max_angular_momentum), - _halves_domain(Fraction(0, 1), Fraction(max_spin_magnitude)), + _halves_domain(Fraction(0), Fraction(max_spin_magnitude)), ) ] @@ -278,7 +278,7 @@ def generate_transitions( # noqa: PLR0917 particle_db: ParticleCollection | None = None, mass_conservation_factor: float | None = 3.0, max_angular_momentum: int = 2, - max_spin_magnitude: float | Fraction = Fraction(2, 1), + max_spin_magnitude: float | Fraction = 2, topology_building: str = "isobar", number_of_threads: int | None = None, ) -> ReactionInfo: @@ -366,7 +366,7 @@ def generate_transitions( # noqa: PLR0917 formalism=formalism, mass_conservation_factor=mass_conservation_factor, max_angular_momentum=max_angular_momentum, - max_spin_magnitude=Fraction(max_spin_magnitude), + max_spin_magnitude=max_spin_magnitude, topology_building=topology_building, number_of_threads=number_of_threads, ) diff --git a/src/qrules/combinatorics.py b/src/qrules/combinatorics.py index 1e2f9dec..62165870 100644 --- a/src/qrules/combinatorics.py +++ b/src/qrules/combinatorics.py @@ -234,8 +234,8 @@ def fill_spin_projections(state: StateDefinition) -> StateWithSpins: particle_name = state particle = particle_db[particle_name] spin_projections = set(arange(-particle.spin, particle.spin + 1)) - if particle.mass == 0.0 and Fraction(0, 1) in spin_projections: - spin_projections.remove(Fraction(0, 1)) + if particle.mass == 0.0 and Fraction(0) in spin_projections: + spin_projections.remove(Fraction(0)) return particle_name, sorted(spin_projections) return state diff --git a/src/qrules/conservation_rules.py b/src/qrules/conservation_rules.py index 57d17c73..457f582c 100644 --- a/src/qrules/conservation_rules.py +++ b/src/qrules/conservation_rules.py @@ -855,7 +855,7 @@ def calculate_hypercharge( or edge_qns.tau_lepton_number ): return True - isospin_3 = Fraction(0, 1) + isospin_3 = Fraction(0) if edge_qns.isospin_projection: isospin_3 = edge_qns.isospin_projection return float(edge_qns.charge) == isospin_3 + 0.5 * calculate_hypercharge(edge_qns) diff --git a/src/qrules/particle.py b/src/qrules/particle.py index 43a72d4a..9f5efdee 100644 --- a/src/qrules/particle.py +++ b/src/qrules/particle.py @@ -56,11 +56,11 @@ def _validate_fraction_for_spin( attribute: Attribute, # noqa: ARG001 value: Fraction, # noqa: ARG001 ) -> Any: - if instance.magnitude % Fraction(1, 2) != Fraction(0, 1): + if instance.magnitude % Fraction(1, 2) != Fraction(0): msg = f"Spin magnitude {instance.magnitude} has to be a multitude of 0.5" raise ValueError(msg) if abs(instance.projection) > instance.magnitude: - if instance.magnitude < Fraction(0, 1): + if instance.magnitude < Fraction(0): msg = f"Spin magnitude has to be positive, but is {instance.magnitude}" raise ValueError(msg) msg = ( diff --git a/src/qrules/quantum_numbers.py b/src/qrules/quantum_numbers.py index 294d7ce6..3ce2dbac 100644 --- a/src/qrules/quantum_numbers.py +++ b/src/qrules/quantum_numbers.py @@ -234,7 +234,7 @@ class InteractionProperties: def arange( - x_1: Fraction, x_2: Fraction, delta: Fraction = Fraction(1, 1) + x_1: Fraction, x_2: Fraction, delta: Fraction = Fraction(1) ) -> Generator[Fraction, None, None]: current = Fraction(x_1) delta = Fraction(delta) diff --git a/src/qrules/settings.py b/src/qrules/settings.py index 5920ce21..812b3d68 100644 --- a/src/qrules/settings.py +++ b/src/qrules/settings.py @@ -127,7 +127,7 @@ def create_interaction_settings( # noqa: PLR0917 nbody_topology: bool = False, mass_conservation_factor: float | None = 3.0, max_angular_momentum: int = 2, - max_spin_magnitude: float | Fraction = Fraction(2, 1), + max_spin_magnitude: float | Fraction = 2, ) -> dict[InteractionType, tuple[EdgeSettings, NodeSettings]]: """Create a container that holds the settings for `.InteractionType`.""" formalism_edge_settings = EdgeSettings( @@ -246,8 +246,8 @@ def __get_spin_magnitudes( is_nbody: bool, max_spin_magnitude: Fraction ) -> list[Fraction]: if is_nbody: - return [Fraction(0, 1)] - return _halves_domain(Fraction(0, 1), max_spin_magnitude) + return [Fraction(0)] + return _halves_domain(Fraction(0), max_spin_magnitude) def _create_domains(particle_db: ParticleCollection) -> dict[Any, list]: @@ -308,7 +308,7 @@ def __positive_halves_domain( particle_db: ParticleCollection, attr_getter: Callable[[Particle], Any] ) -> list[Fraction]: values = set(map(attr_getter, particle_db)) - return _halves_domain(Fraction(0, 1), max(values)) + return _halves_domain(Fraction(0), max(values)) def __positive_int_domain( diff --git a/src/qrules/transition.py b/src/qrules/transition.py index 0c5240fc..35ada83c 100644 --- a/src/qrules/transition.py +++ b/src/qrules/transition.py @@ -245,7 +245,7 @@ def __init__( # noqa: C901, PLR0912, PLR0917 reload_pdg: bool = False, mass_conservation_factor: float | None = 3.0, max_angular_momentum: int = 1, - max_spin_magnitude: float | Fraction = Fraction(2, 1), + max_spin_magnitude: float | Fraction = 2, number_of_threads: int | None = None, ) -> None: if number_of_threads is not None: