solving¶
import qrules.solving
Functions to solve a particle reaction problem.
This module is responsible for solving a particle reaction problem stated by a
StateTransitionGraph
and corresponding GraphSettings
. The Solver
classes (e.g. CSPSolver
) generate new quantum numbers (for example
belonging to an intermediate state) and validate the decay processes with the
rules formulated by the conservation_rules
module.
-
class
CSPSolver
(allowed_intermediate_particles: List[Dict[Type[Union[qrules.quantum_numbers.EdgeQuantumNumbers.pid, qrules.quantum_numbers.EdgeQuantumNumbers.mass, qrules.quantum_numbers.EdgeQuantumNumbers.width, qrules.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.spin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.charge, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.strangeness, qrules.quantum_numbers.EdgeQuantumNumbers.charmness, qrules.quantum_numbers.EdgeQuantumNumbers.bottomness, qrules.quantum_numbers.EdgeQuantumNumbers.topness, qrules.quantum_numbers.EdgeQuantumNumbers.baryon_number, qrules.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.parity, qrules.quantum_numbers.EdgeQuantumNumbers.c_parity, qrules.quantum_numbers.EdgeQuantumNumbers.g_parity]], Union[int, float]]])[source]¶ Bases:
qrules.solving.Solver
Solver reducing the task to a Constraint Satisfaction Problem.
Solving this done with the python-constraint module.
The variables are the quantum numbers of particles/edges, but also some composite quantum numbers which are attributed to the interaction nodes (such as angular momentum \(L\)). The conservation rules serve as the constraints and a special wrapper class serves as an adapter.
-
find_solutions
(problem_set: qrules.solving.QNProblemSet) → qrules.solving.QNResult[source]¶ Find solutions for the given input.
It is expected that this function determines and returns all of the found solutions. In case no solutions are found a partial list of violated rules has to be given. This list of violated rules does not have to be complete.
- Parameters
problem_set (
QNProblemSet
) – states a problem set- Returns
contains possible solutions, violated rules and not executed rules due to requirement issues.
- Return type
-
-
class
EdgeSettings
(conservation_rules: Set[qrules.conservation_rules.GraphElementRule] = NOTHING, rule_priorities: Dict[qrules.conservation_rules.GraphElementRule, int] = NOTHING, qn_domains: Dict[Any, Any] = NOTHING)[source]¶ Bases:
object
Solver settings for a specific edge of a graph.
-
__eq__
(other)¶ Method generated by attrs for class EdgeSettings.
-
conservation_rules
: Set[qrules.conservation_rules.GraphElementRule]¶
-
qn_domains
: Dict[Any, Any]¶
-
rule_priorities
: Dict[qrules.conservation_rules.GraphElementRule, int]¶
-
-
class
GraphElementProperties
(edge_props: Dict[int, Dict[Type[Union[qrules.quantum_numbers.EdgeQuantumNumbers.pid, qrules.quantum_numbers.EdgeQuantumNumbers.mass, qrules.quantum_numbers.EdgeQuantumNumbers.width, qrules.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.spin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.charge, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.strangeness, qrules.quantum_numbers.EdgeQuantumNumbers.charmness, qrules.quantum_numbers.EdgeQuantumNumbers.bottomness, qrules.quantum_numbers.EdgeQuantumNumbers.topness, qrules.quantum_numbers.EdgeQuantumNumbers.baryon_number, qrules.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.parity, qrules.quantum_numbers.EdgeQuantumNumbers.c_parity, qrules.quantum_numbers.EdgeQuantumNumbers.g_parity]], Union[int, float]]] = NOTHING, node_props: Dict[int, Dict[Type[Union[qrules.quantum_numbers.NodeQuantumNumbers.l_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.l_projection, qrules.quantum_numbers.NodeQuantumNumbers.s_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.s_projection, qrules.quantum_numbers.NodeQuantumNumbers.parity_prefactor]], Union[int, float]]] = NOTHING)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class GraphElementProperties.
-
edge_props
: Dict[int, Dict[Type[Union[qrules.quantum_numbers.EdgeQuantumNumbers.pid, qrules.quantum_numbers.EdgeQuantumNumbers.mass, qrules.quantum_numbers.EdgeQuantumNumbers.width, qrules.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.spin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.charge, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.strangeness, qrules.quantum_numbers.EdgeQuantumNumbers.charmness, qrules.quantum_numbers.EdgeQuantumNumbers.bottomness, qrules.quantum_numbers.EdgeQuantumNumbers.topness, qrules.quantum_numbers.EdgeQuantumNumbers.baryon_number, qrules.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.parity, qrules.quantum_numbers.EdgeQuantumNumbers.c_parity, qrules.quantum_numbers.EdgeQuantumNumbers.g_parity]], Union[int, float]]]¶
-
node_props
: Dict[int, Dict[Type[Union[qrules.quantum_numbers.NodeQuantumNumbers.l_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.l_projection, qrules.quantum_numbers.NodeQuantumNumbers.s_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.s_projection, qrules.quantum_numbers.NodeQuantumNumbers.parity_prefactor]], Union[int, float]]]¶
-
-
class
GraphSettings
(edge_settings: Dict[int, qrules.solving.EdgeSettings] = NOTHING, node_settings: Dict[int, qrules.solving.NodeSettings] = NOTHING)[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class GraphSettings.
-
edge_settings
: Dict[int, qrules.solving.EdgeSettings]¶
-
node_settings
: Dict[int, qrules.solving.NodeSettings]¶
-
-
class
NodeSettings
(conservation_rules: Set[Union[qrules.conservation_rules.GraphElementRule, qrules.conservation_rules.EdgeQNConservationRule, qrules.conservation_rules.ConservationRule]] = NOTHING, rule_priorities: Dict[Union[qrules.conservation_rules.GraphElementRule, qrules.conservation_rules.EdgeQNConservationRule, qrules.conservation_rules.ConservationRule], int] = NOTHING, qn_domains: Dict[Any, Any] = NOTHING)[source]¶ Bases:
object
Container class for the interaction settings.
This class can be assigned to each node of a state transition graph. Hence, these settings contain the complete configuration information which is required for the solution finding, e.g:
set of conservation rules
mapping of rules to priorities (optional)
mapping of quantum numbers to their domains
strength scale parameter (higher value means stronger force)
-
__eq__
(other)¶ Method generated by attrs for class NodeSettings.
-
conservation_rules
: Set[Union[qrules.conservation_rules.GraphElementRule, qrules.conservation_rules.EdgeQNConservationRule, qrules.conservation_rules.ConservationRule]]¶
-
qn_domains
: Dict[Any, Any]¶
-
rule_priorities
: Dict[Union[qrules.conservation_rules.GraphElementRule, qrules.conservation_rules.EdgeQNConservationRule, qrules.conservation_rules.ConservationRule], int]¶
-
class
QNProblemSet
(topology: qrules.topology.Topology, initial_facts: qrules.solving.GraphElementProperties, solving_settings: qrules.solving.GraphSettings)[source]¶ Bases:
object
Particle reaction problem set, defined as a graph like data structure.
- Parameters
topology (
Topology
) – a topology that represent the structure of the reactioninitial_facts (
GraphElementProperties
) – all of the known facts quantum numbers of the problemsolving_settings (
GraphSettings
) – solving specific settings such as the specific rules and variable domains for nodes and edges of the topology
-
__eq__
(other)¶ Method generated by attrs for class QNProblemSet.
-
initial_facts
: qrules.solving.GraphElementProperties¶
-
solving_settings
: qrules.solving.GraphSettings¶
-
topology
: qrules.topology.Topology¶
-
class
QNResult
(solutions: List[qrules.solving.QuantumNumberSolution] = NOTHING, not_executed_node_rules: Dict[int, Set[str]] = NOTHING, violated_node_rules: Dict[int, Set[str]] = NOTHING, not_executed_edge_rules: Dict[int, Set[str]] = NOTHING, violated_edge_rules: Dict[int, Set[str]] = NOTHING)[source]¶ Bases:
object
Defines a result to a problem set processed by the solving code.
-
__eq__
(other)¶ Method generated by attrs for class QNResult.
-
extend
(other_result: qrules.solving.QNResult) → None[source]¶
-
solutions
: List[qrules.solving.QuantumNumberSolution]¶
-
-
class
QuantumNumberSolution
(node_quantum_numbers: Dict[int, Dict[Type[Union[qrules.quantum_numbers.NodeQuantumNumbers.l_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.l_projection, qrules.quantum_numbers.NodeQuantumNumbers.s_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.s_projection, qrules.quantum_numbers.NodeQuantumNumbers.parity_prefactor]], Union[int, float]]], edge_quantum_numbers: Dict[int, Dict[Type[Union[qrules.quantum_numbers.EdgeQuantumNumbers.pid, qrules.quantum_numbers.EdgeQuantumNumbers.mass, qrules.quantum_numbers.EdgeQuantumNumbers.width, qrules.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.spin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.charge, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.strangeness, qrules.quantum_numbers.EdgeQuantumNumbers.charmness, qrules.quantum_numbers.EdgeQuantumNumbers.bottomness, qrules.quantum_numbers.EdgeQuantumNumbers.topness, qrules.quantum_numbers.EdgeQuantumNumbers.baryon_number, qrules.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.parity, qrules.quantum_numbers.EdgeQuantumNumbers.c_parity, qrules.quantum_numbers.EdgeQuantumNumbers.g_parity]], Union[int, float]]])[source]¶ Bases:
object
-
__eq__
(other)¶ Method generated by attrs for class QuantumNumberSolution.
-
edge_quantum_numbers
: Dict[int, Dict[Type[Union[qrules.quantum_numbers.EdgeQuantumNumbers.pid, qrules.quantum_numbers.EdgeQuantumNumbers.mass, qrules.quantum_numbers.EdgeQuantumNumbers.width, qrules.quantum_numbers.EdgeQuantumNumbers.spin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.spin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.charge, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_magnitude, qrules.quantum_numbers.EdgeQuantumNumbers.isospin_projection, qrules.quantum_numbers.EdgeQuantumNumbers.strangeness, qrules.quantum_numbers.EdgeQuantumNumbers.charmness, qrules.quantum_numbers.EdgeQuantumNumbers.bottomness, qrules.quantum_numbers.EdgeQuantumNumbers.topness, qrules.quantum_numbers.EdgeQuantumNumbers.baryon_number, qrules.quantum_numbers.EdgeQuantumNumbers.electron_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.muon_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.tau_lepton_number, qrules.quantum_numbers.EdgeQuantumNumbers.parity, qrules.quantum_numbers.EdgeQuantumNumbers.c_parity, qrules.quantum_numbers.EdgeQuantumNumbers.g_parity]], Union[int, float]]]¶
-
node_quantum_numbers
: Dict[int, Dict[Type[Union[qrules.quantum_numbers.NodeQuantumNumbers.l_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.l_projection, qrules.quantum_numbers.NodeQuantumNumbers.s_magnitude, qrules.quantum_numbers.NodeQuantumNumbers.s_projection, qrules.quantum_numbers.NodeQuantumNumbers.parity_prefactor]], Union[int, float]]]¶
-
-
class
Scoresheet
[source]¶ Bases:
object
-
register_rule
(graph_element_id: int, rule: Union[qrules.conservation_rules.GraphElementRule, qrules.conservation_rules.EdgeQNConservationRule, qrules.conservation_rules.ConservationRule]) → Callable[[bool], None][source]¶
-
property
rule_calls
¶
-
property
rule_passes
¶
-
-
class
Solver
[source]¶ Bases:
abc.ABC
Interface of a Solver.
-
abstract
find_solutions
(problem_set: qrules.solving.QNProblemSet) → qrules.solving.QNResult[source]¶ Find solutions for the given input.
It is expected that this function determines and returns all of the found solutions. In case no solutions are found a partial list of violated rules has to be given. This list of violated rules does not have to be complete.
- Parameters
problem_set (
QNProblemSet
) – states a problem set- Returns
contains possible solutions, violated rules and not executed rules due to requirement issues.
- Return type
-
abstract
-
validate_full_solution
(problem_set: qrules.solving.QNProblemSet) → qrules.solving.QNResult[source]¶