def __getitem__(self, value) -> State: """Return the ionic fraction(s).""" if isinstance(value, slice): raise TypeError("IonizationState instances cannot be sliced.") if isinstance(value, (int, np.integer)) and 0 <= value <= self.atomic_number: result = State(value, self.ionic_fractions[value], self.ionic_symbols[value]) else: if not isinstance(value, Particle): try: value = Particle(value) except InvalidParticleError as exc: raise InvalidParticleError( f"{value} is not a valid integer charge or " f"particle.") from exc same_element = value.element == self.element same_isotope = value.isotope == self.isotope has_charge_info = value.is_category( any_of=["charged", "uncharged"]) if same_element and same_isotope and has_charge_info: Z = value.integer_charge result = State(Z, self.ionic_fractions[Z], self.ionic_symbols[Z]) else: if not same_element or not same_isotope: raise AtomicError("Inconsistent element or isotope.") elif not has_charge_info: raise ChargeError("No integer charge provided.") return result
def is_stable(particle: Particle, mass_numb: Optional[numbers.Integral] = None) -> bool: """ Return `True` for stable isotopes and particles and `False` for unstable isotopes. Parameters ---------- particle: `int`, `str`, or `~plasmapy.atomic.Particle` A string representing an isotope or particle, or an integer representing an atomic number. mass_numb: `int`, optional The mass number of the isotope. Returns ------- is_stable: `bool` `True` if the isotope is stable, `False` if it is unstable. Raises ------ `~plasmapy.utils.InvalidIsotopeError` If the arguments correspond to a valid element but not a valid isotope. `~plasmapy.utils.InvalidParticleError` If the arguments do not correspond to a valid particle. `TypeError` If the argument is not a `str` or `int`. `~plasmapy.utils.MissingAtomicDataError` If stability information is not available. Examples -------- >>> is_stable("H-1") True >>> is_stable("tritium") False >>> is_stable("e-") True >>> is_stable("tau+") False """ if particle.element and not particle.isotope: raise InvalidIsotopeError( "The input to is_stable must be either an isotope or a special particle." ) return particle.is_category('stable')