Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-particle for openSUSE:Factory 
checked in at 2023-01-24 19:43:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-particle (Old)
 and      /work/SRC/openSUSE:Factory/.python-particle.new.32243 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-particle"

Tue Jan 24 19:43:50 2023 rev:13 rq:1060616 version:0.21.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-particle/python-particle.changes  
2022-05-02 16:25:40.508845251 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-particle.new.32243/python-particle.changes   
    2023-01-24 20:32:32.260440308 +0100
@@ -1,0 +2,20 @@
+Tue Jan 24 09:56:11 UTC 2023 - Matej Cepl <mc...@suse.com>
+
+- Switch to %pyproject_wheel/install, there is no need to create
+  setup.py manually.
+
+-------------------------------------------------------------------
+Mon Jan 23 19:57:57 UTC 2023 - Atri Bhattacharya <badshah...@gmail.com>
+
+- Update to version 0.21.1:
+  * Particle class and submodules: Better test coverage.
+  * PDGID class method and related standalone functions:
+    -  Minor code simplifications.
+    -  Significant improvements to test coverage.
+  * README: info added on how to create user-defined particles.
+- Update tests.tar.xz to tag 0.21.1.
+- Create a basic setup.py file to allow building and installation.
+- Manually copy missed data files into buildroot.
+- Disable python3.6 building, no longer supported by upstream.
+
+-------------------------------------------------------------------

Old:
----
  particle-0.20.1.tar.gz

New:
----
  particle-0.21.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-particle.spec ++++++
--- /var/tmp/diff_new_pack.JPMhw7/_old  2023-01-24 20:32:33.016444309 +0100
+++ /var/tmp/diff_new_pack.JPMhw7/_new  2023-01-24 20:32:33.036444415 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-particle
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,8 +18,9 @@
 
 %global modname particle
 %define skip_python2 1
+%define skip_python36 1
 Name:           python-particle
-Version:        0.20.1
+Version:        0.21.1
 Release:        0
 Summary:        PDG particle data and identification codes
 License:        BSD-3-Clause
@@ -27,9 +28,12 @@
 Source0:        
https://files.pythonhosted.org/packages/source/p/particle/%{modname}-%{version}.tar.gz
 # Downloaded separately from github using _service file
 Source1:        tests.tar.xz
+BuildRequires:  %{python_module hatch_vcs}
+BuildRequires:  %{python_module hatchling}
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools_scm}
-BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module toml}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-attrs >= 19.2
@@ -56,10 +60,14 @@
 sed -Ei "1{/^#!\/usr\/bin\/env python/d}" src/particle/__main__.py
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
+%{python_expand # Copy missed files
+cp -R src/particle/data %{buildroot}%{$python_sitelib}/%{modname}/
+cp -R src/particle/lhcb %{buildroot}%{$python_sitelib}/%{modname}/
+}
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
@@ -68,7 +76,7 @@
 %files %{python_files}
 %doc README.rst
 %license LICENSE
-%{python_sitelib}/%{modname}/
-%{python_sitelib}/%{modname}-%{version}-py%{python_version}.egg-info/
+%{python_sitelib}/%{modname}
+%{python_sitelib}/%{modname}-%{version}*-info/
 
 %changelog

++++++ _service ++++++
--- /var/tmp/diff_new_pack.JPMhw7/_old  2023-01-24 20:32:33.084444669 +0100
+++ /var/tmp/diff_new_pack.JPMhw7/_new  2023-01-24 20:32:33.088444691 +0100
@@ -2,7 +2,7 @@
        <service name="tar_scm" mode="disabled">
                <param 
name="url">https://github.com/scikit-hep/particle.git</param>
                <param name="scm">git</param>
-               <param name="revision">v0.20.0</param>
+               <param name="revision">v0.21.1</param>
                <param name="subdir">tests</param>
                <param name="version">_none_</param>
                <param name="filename">tests</param>

++++++ particle-0.20.1.tar.gz -> particle-0.21.1.tar.gz ++++++
++++ 8340 lines of diff (skipped)

++++++ tests.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/__init__.py new/tests/__init__.py
--- old/tests/__init__.py       2022-01-15 18:07:50.000000000 +0100
+++ new/tests/__init__.py       2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/conftest.py new/tests/conftest.py
--- old/tests/conftest.py       2022-01-15 18:07:50.000000000 +0100
+++ new/tests/conftest.py       2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 from enum import IntEnum
 
 import pytest
@@ -122,6 +124,13 @@
     AntiElectronStar = -4000011
     # Generator specific pseudoparticles or concepts
     AntiCHadron = -84
+    GenSpecific910 = 910
+    GenSpecific999 = 999
+    GenSpecific1910 = 1910
+    GenSpecific2910 = 2910
+    GenSpecific3910 = 3910
+    OpticalPhoton = 20022
+    Geantino = 480000000
     # Invalid ID
     Invalid1 = 0  # illegal ID
     Invalid2 = 99999999  # general form is a 7-digit number
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/converters/__init__.py 
new/tests/converters/__init__.py
--- old/tests/converters/__init__.py    2022-01-15 18:07:50.000000000 +0100
+++ new/tests/converters/__init__.py    2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/converters/test_corsika.py 
new/tests/converters/test_corsika.py
--- old/tests/converters/test_corsika.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/tests/converters/test_corsika.py        2023-01-04 12:06:53.000000000 
+0100
@@ -0,0 +1,22 @@
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
+#
+# Distributed under the 3-clause BSD license, see accompanying file LICENSE
+# or https://github.com/scikit-hep/particle for details.
+
+from __future__ import annotations
+
+from particle import PDGID, Corsika7ID, Particle
+from particle.converters import Corsika72PDGIDBiMap
+
+
+def test_Corsika72PDGID():
+    pdgid = Corsika72PDGIDBiMap[Corsika7ID(5)]
+    assert pdgid == -13
+
+    cid = Corsika72PDGIDBiMap[PDGID(13)]
+    assert cid.is_particle()
+    assert cid == 6
+
+    p = Particle.from_pdgid(cid.to_pdgid())
+    # should be muon
+    assert p.charge == -1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/converters/test_maps.py 
new/tests/converters/test_maps.py
--- old/tests/converters/test_maps.py   2022-01-15 18:07:50.000000000 +0100
+++ new/tests/converters/test_maps.py   2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 from particle import data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/corsika/__init__.py 
new/tests/corsika/__init__.py
--- old/tests/corsika/__init__.py       1970-01-01 01:00:00.000000000 +0100
+++ new/tests/corsika/__init__.py       2023-01-04 12:06:53.000000000 +0100
@@ -0,0 +1,4 @@
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
+#
+# Distributed under the 3-clause BSD license, see accompanying file LICENSE
+# or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/corsika/test_corsika7id.py 
new/tests/corsika/test_corsika7id.py
--- old/tests/corsika/test_corsika7id.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/tests/corsika/test_corsika7id.py        2023-01-04 12:06:53.000000000 
+0100
@@ -0,0 +1,51 @@
+from __future__ import annotations
+
+import pytest
+
+from particle.corsika import Corsika7ID
+from particle.exceptions import MatchingIDNotFound
+from particle.pdgid import PDGID
+
+
+def test_class_string_representations():
+    pid = Corsika7ID(1)
+    assert pid == 1
+    assert pid.__str__() == "<Corsika7ID: 1>"
+
+
+def test_class_return_type():
+    assert isinstance(Corsika7ID(3), Corsika7ID)
+
+
+def test_from_pdgid():
+    assert Corsika7ID.from_pdgid(-13) == 5
+
+    assert Corsika7ID.from_pdgid(PDGID(-13)) == 5
+    assert Corsika7ID.from_pdgid(PDGID(13)) == Corsika7ID(6)
+
+
+def test_from_pdgid_non_matching():
+    with pytest.raises(MatchingIDNotFound):
+        Corsika7ID.from_pdgid(55)
+
+
+def test_to_pdgid():
+    cid = Corsika7ID(5)
+    assert cid.to_pdgid() == -13
+    assert cid.to_pdgid() == PDGID(-13)
+
+
+def test_is_particle():
+    cid = Corsika7ID(1)
+    assert cid.is_particle()
+    cid = Corsika7ID(75)
+    assert not cid.is_particle()
+
+
+def test_from_particle_description():
+    cid, is_mother = Corsika7ID.from_particle_description(-6001)
+    assert is_mother
+    assert cid.is_particle()
+    cid, is_mother = Corsika7ID.from_particle_description(75001)
+    assert not is_mother
+    assert not cid.is_particle()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/geant/__init__.py new/tests/geant/__init__.py
--- old/tests/geant/__init__.py 2022-01-15 18:07:50.000000000 +0100
+++ new/tests/geant/__init__.py 2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/geant/test_geant3id.py 
new/tests/geant/test_geant3id.py
--- old/tests/geant/test_geant3id.py    2022-01-15 18:07:50.000000000 +0100
+++ new/tests/geant/test_geant3id.py    2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 from particle.exceptions import MatchingIDNotFound
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/lhcb/test_lhcb_name.py 
new/tests/lhcb/test_lhcb_name.py
--- old/tests/lhcb/test_lhcb_name.py    2022-01-15 18:07:50.000000000 +0100
+++ new/tests/lhcb/test_lhcb_name.py    2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 from particle import Particle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/__init__.py 
new/tests/particle/__init__.py
--- old/tests/particle/__init__.py      2022-01-15 18:07:50.000000000 +0100
+++ new/tests/particle/__init__.py      2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_convert.py 
new/tests/particle/test_convert.py
--- old/tests/particle/test_convert.py  2022-01-15 18:07:50.000000000 +0100
+++ new/tests/particle/test_convert.py  2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 # Requires pandas
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_decfilenames.py 
new/tests/particle/test_decfilenames.py
--- old/tests/particle/test_decfilenames.py     2022-01-15 18:07:50.000000000 
+0100
+++ new/tests/particle/test_decfilenames.py     2023-01-04 12:06:53.000000000 
+0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 from particle.particle import Particle, ParticleNotFound
 
 # All particle names found in DECAY.DEC
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_enums.py 
new/tests/particle/test_enums.py
--- old/tests/particle/test_enums.py    2022-01-15 18:07:50.000000000 +0100
+++ new/tests/particle/test_enums.py    2023-01-04 12:06:53.000000000 +0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 from particle.particle.enums import Charge, SpinType
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_generation.py 
new/tests/particle/test_generation.py
--- old/tests/particle/test_generation.py       2022-01-15 18:07:50.000000000 
+0100
+++ new/tests/particle/test_generation.py       2023-01-04 12:06:53.000000000 
+0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 # Requires pandas
@@ -13,16 +15,16 @@
 from particle import data
 from particle.particle.convert import produce_files
 
-FILES = ["particle2020.csv", "particle2021.csv"]
+FILES = ["particle2021.csv", "particle2022.csv"]
 
 
 def test_generate(tmp_path):
     "This verifies that the input and output files match."
 
-    particle2020 = tmp_path / "particle2020.csv"
     particle2021 = tmp_path / "particle2021.csv"
+    particle2022 = tmp_path / "particle2022.csv"
 
-    produce_files(particle2020, particle2021, "DUMMY", "2021")
+    produce_files(particle2021, particle2022, "DUMMY", "2022")
 
     """
     # No longer test this file, which eventually will be removed
@@ -33,8 +35,8 @@
         assert src == res
     """
 
-    particle2021_data = data.basepath / "particle2021.csv"
-    with particle2021.open() as src, particle2021_data.open() as res:
+    particle2022_data = data.basepath / "particle2022.csv"
+    with particle2022.open() as src, particle2022_data.open() as res:
         src = [line for line in src.readlines() if not line.startswith("#")]
         res = [line for line in res.readlines() if not line.startswith("#")]
         assert src == res
@@ -42,8 +44,8 @@
 
 @pytest.mark.parametrize("filename", FILES)
 def test_csv_file_duplicates(filename):
-    with data.basepath / filename as particle_data:
-        p = pd.read_csv(particle_data, comment="#")
+    particle_data = data.basepath / filename
+    p = pd.read_csv(particle_data, comment="#")
 
     duplicates = {item for item, count in Counter(p.ID).items() if count > 1}
     assert duplicates == set()
@@ -51,7 +53,7 @@
 
 @pytest.mark.parametrize("filename", FILES)
 def test_csv_file_has_latex(filename):
-    with data.basepath / filename as particle_data:
-        p = pd.read_csv(particle_data, comment="#")
+    particle_data = data.basepath / filename
+    p = pd.read_csv(particle_data, comment="#")
 
     assert p[p.Latex == ""].empty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_kinematics.py 
new/tests/particle/test_kinematics.py
--- old/tests/particle/test_kinematics.py       2022-01-15 18:07:50.000000000 
+0100
+++ new/tests/particle/test_kinematics.py       2023-01-04 12:06:53.000000000 
+0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 from hepunits.constants import hbar
 from hepunits.units import GeV, MeV, ps
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_literals.py 
new/tests/particle/test_literals.py
--- old/tests/particle/test_literals.py 2022-01-15 18:07:50.000000000 +0100
+++ new/tests/particle/test_literals.py 2023-01-04 12:06:53.000000000 +0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 from particle import literals as lp
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_particle.py 
new/tests/particle/test_particle.py
--- old/tests/particle/test_particle.py 2022-01-15 18:07:50.000000000 +0100
+++ new/tests/particle/test_particle.py 2023-01-04 12:06:53.000000000 +0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 import pytest
 from hepunits import meter, second
 from pytest import approx
@@ -145,6 +147,59 @@
     assert int(p.pdgid) == 211
 
 
+def test_from_name():
+    p = Particle.from_name("pi+")
+    assert p.name == "pi+"
+
+
+def test_from_name_ParticleNotFound():
+    """
+    Exception raised because the name given matches all pions,
+    e.g. pi+, pi-, pi(2)(1670)+, etc.
+    """
+    with pytest.raises(ParticleNotFound):
+        _ = Particle.from_name("pi")
+
+
+def test_from_nucleus_info():
+    p = Particle.from_nucleus_info(1, 2)
+    assert p.pdgid == 1000010020
+    p = Particle.from_nucleus_info(92, 235)
+    assert p.pdgid == 1000922350
+    p = Particle.from_nucleus_info(1, 2, anti=True)
+    assert p.pdgid == -1000010020
+
+
+def test_from_nucleus_info_ParticleNotFound():
+    with pytest.raises(ParticleNotFound):
+        _ = Particle.from_nucleus_info(z=999, a=999)
+
+        # No exited nuclei in database
+        _ = Particle.from_nucleus_info(1, 2, i=1)
+
+
+def test_from_nucleus_info_InvalidParticle():
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(z=2, a=1)
+
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(z=1, a=1000)
+
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(z=1000, a=1)
+
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(z=1, a=1, l_strange=999)
+
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(z=1, a=1, i=999)
+
+        # No strange nuclei in database and strange PDGID not implemented
+    with pytest.raises(InvalidParticle) as e:
+        _ = Particle.from_nucleus_info(1, 2, l_strange=1)
+    assert str(e.value) == "Input PDGID 1000110020 is invalid!"
+
+
 def test_sorting():
     assert Particle.from_pdgid(211) < Particle.from_pdgid(311)
     assert Particle.from_pdgid(211) < Particle.from_pdgid(-311)
@@ -308,8 +363,6 @@
     [423, "Width < 2.1 MeV"],  # D*(2007)0
     [10431, "Width < 10.0 MeV"],  # D(s0)*(2317)+
     [20433, "Width < 6.3 MeV"],  # D(s1)(2460)+
-    [4212, "Width < 4.6 MeV"],  # Sigma(c)(2455)+
-    [4214, "Width < 17.0 MeV"],  # Sigma(c)(2520)+
 )
 
 
@@ -320,18 +373,18 @@
 
 
 def test_default_table_loading():
-    assert Particle.table_names() == ("particle2021.csv", "nuclei2020.csv")
+    assert Particle.table_names() == ("particle2022.csv", "nuclei2020.csv")
 
 
 def test_default_table_loading_bis():
     Particle.all()
     p = Particle.from_pdgid(211)
     assert p.table_loaded() is True
-    assert p.table_names() == ("particle2021.csv", "nuclei2020.csv")
+    assert p.table_names() == ("particle2022.csv", "nuclei2020.csv")
 
 
 def test_explicit_table_loading():
-    Particle.load_table(data.basepath / "particle2021.csv")
+    Particle.load_table(data.basepath / "particle2022.csv")
     assert Particle.table_loaded()
     assert len(Particle.table_names()) == 1
     assert Particle.all() is not None
@@ -346,6 +399,8 @@
     assert len(Particle.all()) == 610
     Particle.load_table(data.basepath / "particle2021.csv")
     assert len(Particle.all()) == 616
+    Particle.load_table(data.basepath / "particle2022.csv")
+    assert len(Particle.all()) == 616
 
     Particle.load_table(data.basepath / "nuclei2020.csv")
     assert len(Particle.all()) == 5880
@@ -683,3 +738,8 @@
 @pytest.mark.parametrize("name,pid", decfile_style_names)
 def test_decfile_style_names(name, pid):
     assert Particle.from_evtgen_name(name).pdgid == pid
+
+
+@pytest.mark.parametrize("name,pid", decfile_style_names)
+def test_evtgen_name(name, pid):
+    assert Particle.from_evtgen_name(name).evtgen_name == name
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_performance.py 
new/tests/particle/test_performance.py
--- old/tests/particle/test_performance.py      2022-01-15 18:07:50.000000000 
+0100
+++ new/tests/particle/test_performance.py      2023-01-04 12:06:53.000000000 
+0100
@@ -1,20 +1,22 @@
+from __future__ import annotations
+
 from particle import Particle, data
 
 
 def test_load_particle_table(benchmark):
-    benchmark(Particle.load_table, data.basepath / "particle2021.csv")
+    benchmark(Particle.load_table, data.basepath / "particle2022.csv")
 
 
 def test_load_nuclei_append(benchmark):
     def load_two():
-        Particle.load_table(data.basepath / "particle2021.csv")
+        Particle.load_table(data.basepath / "particle2022.csv")
         Particle.load_table(data.basepath / "nuclei2020.csv", append=True)
 
     benchmark(load_two)
 
 
 def test_from_pdgid(benchmark):
-    Particle.load_table(data.basepath / "particle2021.csv")
+    Particle.load_table(data.basepath / "particle2022.csv")
     table = [int(s.pdgid) for s in Particle.all()]
 
     def get_all(listing):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/particle/test_utilities.py 
new/tests/particle/test_utilities.py
--- old/tests/particle/test_utilities.py        2022-01-15 18:07:50.000000000 
+0100
+++ new/tests/particle/test_utilities.py        2023-01-04 12:06:53.000000000 
+0100
@@ -1,11 +1,17 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
-from particle.particle.utilities import str_with_unc
+from particle.particle.utilities import (
+    greek_letter_name_to_unicode,
+    latex_name_unicode,
+    str_with_unc,
+)
 
 possibilities = (
     (1.234567, 0.01, None, "1.235 ± 0.010"),
@@ -20,6 +26,8 @@
     (1234.5, 0.03, 0.03, "1234.50 ± 0.03"),
     (1234.5, 5, 5, "1234 ± 5"),
     (1234.5, 2, 2, "1234.5 ± 2.0"),
+    (1234.5, None, None, "1234.5"),
+    (1234.5, None, 2, "1234.5"),
 )
 
 
@@ -27,3 +35,27 @@
 def test_unc_printout(value, err_u, err_l, test_str):
 
     assert str_with_unc(value, err_u, err_l) == test_str
+
+
+possibilities = (
+    ("\\omega", "ω"),
+    ("\\Omega", "Ω"),
+    ("\\Lambda", "Λ"),
+    ("\\alpha_{x}^{0}\\beta\\Gamma(1234)\\Omega", "α_{x}^{0}βΓ(1234)Ω"),
+)
+
+
+@pytest.mark.parametrize("name,unicode_name", possibilities)
+def test_latex_name_unicode(name, unicode_name):
+
+    assert latex_name_unicode(name) == unicode_name
+
+
+def test_greek_letter_name_to_unicode():
+    """
+    Test the one exception that is not verified
+    in the test "test_latex_name_unicode" above.
+    """
+    with pytest.raises(KeyError):
+        _ = greek_letter_name_to_unicode("Lambda")
+        _ = greek_letter_name_to_unicode("NonExistent")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pdgid/__init__.py new/tests/pdgid/__init__.py
--- old/tests/pdgid/__init__.py 2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pdgid/__init__.py 2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pdgid/test_functions.py 
new/tests/pdgid/test_functions.py
--- old/tests/pdgid/test_functions.py   2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pdgid/test_functions.py   2023-01-04 12:06:53.000000000 +0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 from particle.pdgid import (
     A,
     J,
@@ -87,27 +89,15 @@
 
 
 def test_is_valid(PDGIDs):
-    assert is_valid(PDGIDs.Photon)
-    assert is_valid(PDGIDs.Gluon)
-    assert is_valid(PDGIDs.Electron)
-    assert is_valid(PDGIDs.AntiMuon)
-    assert is_valid(PDGIDs.jpsi)
-    assert is_valid(PDGIDs.Upsilon_1S)
-    assert is_valid(PDGIDs.PiPlus)
-    assert is_valid(PDGIDs.KMinus)
-    assert is_valid(PDGIDs.D0)
-    assert is_valid(PDGIDs.DPlus)
-    assert is_valid(PDGIDs.DsPlus)
-    assert is_valid(PDGIDs.B0)
-    assert is_valid(PDGIDs.Bs)
-    assert is_valid(PDGIDs.BcPlus)
-    assert is_valid(PDGIDs.Proton)
-    assert is_valid(PDGIDs.LcPlus)
-    assert is_valid(PDGIDs.Lb)
-    assert is_valid(PDGIDs.DD1)
-    assert is_valid(PDGIDs.SD0)
-    assert not is_valid(PDGIDs.Invalid1)
-    assert not is_valid(PDGIDs.Invalid2)
+    _invalid = (
+        PDGIDs.Invalid1,
+        PDGIDs.Invalid2,
+    )
+    _valid = [i for i in PDGIDs if i not in _invalid]
+    for i in _valid:
+        assert is_valid(i)
+    for i in _invalid:
+        assert not is_valid(i)
 
 
 def test_is_quark(PDGIDs):
@@ -225,6 +215,12 @@
         assert not is_meson(id)
 
 
+def test_is_meson_B_mass_eigenstates():
+    # Test special IDs of B(L)0, B(sL)0, B(H)0, B(sH)0
+    for pdgid in {150, 350, 510, 530}:
+        assert is_meson(pdgid)
+
+
 def test_is_baryon(PDGIDs):
     _baryons = (
         PDGIDs.Proton,
@@ -251,6 +247,12 @@
         assert not is_baryon(id)
 
 
+def test_is_baryon_old_codes_diffractive():
+    # Test old codes for diffractive p and n (MC usage)
+    assert is_baryon(2110)
+    assert is_baryon(2210)
+
+
 def test_is_hadron(PDGIDs):
     for id in PDGIDs:
         assert is_hadron(id) == (is_meson(id) or is_baryon(id))
@@ -298,7 +300,16 @@
 
 
 def test_is_generator_specific(PDGIDs):
-    _generator_specific = (PDGIDs.AntiCHadron,)
+    _generator_specific = (
+        PDGIDs.AntiCHadron,
+        PDGIDs.GenSpecific910,
+        PDGIDs.GenSpecific999,
+        PDGIDs.GenSpecific1910,
+        PDGIDs.GenSpecific2910,
+        PDGIDs.GenSpecific3910,
+        PDGIDs.OpticalPhoton,
+        PDGIDs.Geantino,
+    )
     _non_generator_specific = [id for id in PDGIDs if id not in 
_generator_specific]
     for id in _generator_specific:
         assert is_generator_specific(id)
@@ -313,6 +324,13 @@
         PDGIDs.Pomeron,
         PDGIDs.Odderon,
         PDGIDs.AntiCHadron,
+        PDGIDs.GenSpecific910,
+        PDGIDs.GenSpecific999,
+        PDGIDs.GenSpecific1910,
+        PDGIDs.GenSpecific2910,
+        PDGIDs.GenSpecific3910,
+        PDGIDs.OpticalPhoton,
+        PDGIDs.Geantino,
     )
     _non_special_particle = [id for id in PDGIDs if id not in 
_special_particle]
     for id in _special_particle:
@@ -333,6 +351,9 @@
         assert is_nucleus(id)
     for id in _non_nuclei:
         assert not is_nucleus(id)
+    # test 10-digit IDs that does not conform with form for nuclei (should 
start with +/- 10)
+    assert not is_nucleus(2000000010)
+    assert not is_nucleus(1100000010)
 
 
 def test_is_diquark(PDGIDs):
@@ -699,6 +720,8 @@
         assert j_spin(id) is None
     for id in _J_eq_None:
         assert j_spin(id) is None
+    # Alternative ID=9 for the gluon in codes for glueballs to allow a 
notation in close analogy with that of hadrons
+    assert j_spin(9) == 3
 
 
 def test_S_non_mesons(PDGIDs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pdgid/test_literals.py 
new/tests/pdgid/test_literals.py
--- old/tests/pdgid/test_literals.py    2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pdgid/test_literals.py    2023-01-04 12:06:53.000000000 +0100
@@ -1,9 +1,11 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
 
+from __future__ import annotations
+
 from particle.pdgid import literals as lid
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pdgid/test_pdgid.py 
new/tests/pdgid/test_pdgid.py
--- old/tests/pdgid/test_pdgid.py       2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pdgid/test_pdgid.py       2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 from particle.pdgid import PDGID
 from particle.pdgid import functions as _functions
 from particle.pdgid.pdgid import _fnames
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pythia/__init__.py new/tests/pythia/__init__.py
--- old/tests/pythia/__init__.py        2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pythia/__init__.py        2023-01-04 12:06:53.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/pythia/test_pythiaid.py 
new/tests/pythia/test_pythiaid.py
--- old/tests/pythia/test_pythiaid.py   2022-01-15 18:07:50.000000000 +0100
+++ new/tests/pythia/test_pythiaid.py   2023-01-04 12:06:53.000000000 +0100
@@ -1,8 +1,10 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import pytest
 
 from particle.exceptions import MatchingIDNotFound
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/test_module_apis.py 
new/tests/test_module_apis.py
--- old/tests/test_module_apis.py       1970-01-01 01:00:00.000000000 +0100
+++ new/tests/test_module_apis.py       2023-01-04 12:06:53.000000000 +0100
@@ -0,0 +1,150 @@
+from __future__ import annotations
+
+from sys import version_info
+
+import pytest
+
+import particle
+
+python37plus_only = pytest.mark.skipif(
+    version_info < (3, 7), reason="requires Python3.7+"
+)
+
+
+@python37plus_only
+def test_top_level_api():
+    assert dir(particle) == [
+        "Charge",
+        "Corsika7ID",
+        "Geant3ID",
+        "Inv",
+        "InvalidParticle",
+        "PDGID",
+        "Parity",
+        "Particle",
+        "ParticleNotFound",
+        "PythiaID",
+        "SpinType",
+        "Status",
+        "__version__",
+        "latex_to_html_name",
+        "lifetime_to_width",
+        "width_to_lifetime",
+    ]
+
+
+@python37plus_only
+def test_api_converters():
+    assert dir(particle.converters) == [
+        "Corsika72PDGIDBiMap",
+        "EvtGen2PDGNameMap",
+        "EvtGenName2PDGIDBiMap",
+        "Geant2PDGIDBiMap",
+        "PDG2EvtGenNameMap",
+        "Pythia2PDGIDBiMap",
+    ]
+
+
+@python37plus_only
+def test_api_corsika():
+    assert dir(particle.corsika) == ["Corsika7ID"]
+
+
+@python37plus_only
+def test_api_data():
+    assert dir(particle.data) == ["basepath"]
+
+
+@python37plus_only
+def test_api_geant():
+    assert dir(particle.geant) == ["Geant3ID"]
+
+
+@python37plus_only
+def test_api_lhcb():
+    assert dir(particle.lhcb) == [
+        "LHCbName2PDGIDBiMap",
+        "from_lhcb_name",
+        "to_lhcb_name",
+    ]
+
+
+@python37plus_only
+def test_api_lhcb_data():
+    assert dir(particle.lhcb.data) == ["basepath"]
+
+
+@python37plus_only
+def test_api_particle():
+    assert dir(particle.particle) == [
+        "Charge",
+        "Inv",
+        "InvalidParticle",
+        "Parity",
+        "Particle",
+        "ParticleNotFound",
+        "SpinType",
+        "Status",
+        "latex_name_unicode",
+        "latex_to_html_name",
+        "lifetime_to_width",
+        "programmatic_name",
+        "width_to_lifetime",
+    ]
+
+
+@python37plus_only
+def test_api_pdgid():
+    assert dir(particle.pdgid) == sorted(
+        [
+            "PDGID",
+            #
+            "is_valid",
+            "abspid",
+            # #
+            "is_Qball",
+            "is_Rhadron",
+            "is_SUSY",
+            "is_baryon",
+            "is_diquark",
+            "is_dyon",
+            "is_excited_quark_or_lepton",
+            "is_gauge_boson_or_higgs",
+            "is_generator_specific",
+            "is_hadron",
+            "is_lepton",
+            "is_meson",
+            "is_nucleus",
+            "is_pentaquark",
+            "is_quark",
+            "is_sm_gauge_boson_or_higgs",
+            "is_sm_lepton",
+            "is_sm_quark",
+            "is_special_particle",
+            "is_technicolor",
+            #
+            "has_down",
+            "has_up",
+            "has_strange",
+            "has_charm",
+            "has_bottom",
+            "has_top",
+            "has_fundamental_anti",
+            #
+            "charge",
+            "three_charge",
+            "j_spin",
+            "J",
+            "s_spin",
+            "S",
+            "l_spin",
+            "L",
+            "A",
+            "Z",
+        ]
+    )
+
+
+@python37plus_only
+def test_api_pythia():
+    assert dir(particle.pythia) == ["PythiaID"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tests/test_package.py new/tests/test_package.py
--- old/tests/test_package.py   2022-01-15 18:07:50.000000000 +0100
+++ new/tests/test_package.py   2023-01-04 12:06:53.000000000 +0100
@@ -1,10 +1,16 @@
-# Copyright (c) 2018-2022, Eduardo Rodrigues and Henry Schreiner.
+# Copyright (c) 2018-2023, Eduardo Rodrigues and Henry Schreiner.
 #
 # Distributed under the 3-clause BSD license, see accompanying file LICENSE
 # or https://github.com/scikit-hep/particle for details.
 
+from __future__ import annotations
+
 import particle
 
 
 def test_package_import():
     assert particle is not None
+
+
+def test_load_version():
+    assert particle.__version__

Reply via email to