impy-project/chromo

Uncaptured warnings in unit tests

HDembinski opened this issue · 3 comments

Several unit tests now emit uncaptured warnings. Tests should not emit those. If a warning is expected in a test, you should use

with pytest.warns(<type of warning>):
    # code which emits the warning goes here
tests/test_hepmc_io.py::test_hepmc_io[UrQMD34]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: UrQMD-3.4: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[DpmjetIII191]
tests/test_to_hepmc3.py::test_to_hepmc3[DpmjetIII191]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: DPMJET-III-19.1: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[DpmjetIII193]
tests/test_to_hepmc3.py::test_to_hepmc3[DpmjetIII193]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: DPMJET-III-19.3: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[DpmjetIII307]
tests/test_to_hepmc3.py::test_to_hepmc3[DpmjetIII307]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: DPMJET-III-3.0-7: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[Phojet112]
tests/test_to_hepmc3.py::test_to_hepmc3[Phojet112]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: PhoJet-1.12-36: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[Phojet191]
tests/test_to_hepmc3.py::test_to_hepmc3[Phojet191]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: PhoJet-19.1: only final state particles available in HepMC3 event
    warnings.warn(

tests/test_hepmc_io.py::test_hepmc_io[Phojet193]
tests/test_to_hepmc3.py::test_to_hepmc3[Phojet193]
  /Users/runner/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/chromo/common.py:443: RuntimeWarning: PhoJet-19.3: only final state particles available in HepMC3 event
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
jncots commented

I tried to use with pytest.warns and find out that it assert that code raises a particular class of warning, i.e. it raise an exception if the warning isn't issued. This is a problem because some models produce warning and other don't.

It seems easier to disable warnings using addopts = "-p no:warnings" in pyproject.toml. @HDembinski, what do you think about it?

No, we don't want to suppress warnings. The warnings are useful and they are part of our UX design, it is good to assert that they are raised as we expect them to be raised.

I tried to use with pytest.warns and find out that it assert that code raises a particular class of warning, i.e. it raise an exception if the warning isn't issued. This is a problem because some models produce warning and other don't.

Then you check whether the conditions are fulfilled and only use the with statement in those cases.

jncots commented

Fixed in #127