Skip to content
This repository was archived by the owner on Jan 7, 2023. It is now read-only.

Commit b81d80e

Browse files
committed
FIX #328: silence cling error in test_evaluate.py
1 parent 5d0817e commit b81d80e

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

root_numpy/tests/__init__.py

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,82 @@
11
import os
2+
import sys
23
import warnings
34
import ROOT
4-
import root_numpy as rnp
55
from numpy.random import RandomState
6+
import tempfile
7+
from contextlib import contextmanager
8+
import root_numpy as rnp
9+
from root_numpy.testdata import get_filepath
10+
import threading
11+
12+
LOCK = threading.RLock()
613

714
ROOT.gErrorIgnoreLevel = ROOT.kFatal
815
warnings.filterwarnings('ignore', category=DeprecationWarning)
916
warnings.filterwarnings('ignore', category=rnp.RootNumpyUnconvertibleWarning)
1017
RNG = RandomState(42)
1118

12-
from root_numpy.testdata import get_filepath
1319

1420
def load(data):
1521
if isinstance(data, list):
1622
return [get_filepath(x) for x in data]
1723
return get_filepath(data)
1824

19-
import tempfile
20-
from contextlib import contextmanager
2125

2226
@contextmanager
2327
def temp():
2428
tmp_fd, tmp_path = tempfile.mkstemp(suffix='.root')
2529
tmp_root = ROOT.TFile.Open(tmp_path, 'recreate')
26-
yield tmp_root
27-
tmp_root.Close()
28-
os.close(tmp_fd)
29-
os.remove(tmp_path)
30+
try:
31+
yield tmp_root
32+
finally:
33+
tmp_root.Close()
34+
os.close(tmp_fd)
35+
os.remove(tmp_path)
36+
37+
38+
@contextmanager
39+
def silence_sout():
40+
LOCK.acquire()
41+
sys.__stdout__.flush()
42+
origstdout = sys.__stdout__
43+
oldstdout_fno = os.dup(sys.__stdout__.fileno())
44+
devnull = os.open(os.devnull, os.O_WRONLY)
45+
newstdout = os.dup(1)
46+
os.dup2(devnull, 1)
47+
os.close(devnull)
48+
sys.__stdout__ = os.fdopen(newstdout, 'w')
49+
try:
50+
yield
51+
finally:
52+
sys.__stdout__ = origstdout
53+
sys.__stdout__.flush()
54+
os.dup2(oldstdout_fno, 1)
55+
LOCK.release()
56+
57+
58+
@contextmanager
59+
def silence_serr():
60+
LOCK.acquire()
61+
sys.__stderr__.flush()
62+
origstderr = sys.__stderr__
63+
oldstderr_fno = os.dup(sys.__stderr__.fileno())
64+
devnull = os.open(os.devnull, os.O_WRONLY)
65+
newstderr = os.dup(2)
66+
os.dup2(devnull, 2)
67+
os.close(devnull)
68+
sys.__stderr__ = os.fdopen(newstderr, 'w')
69+
try:
70+
yield
71+
finally:
72+
sys.__stderr__ = origstderr
73+
sys.__stderr__.flush()
74+
os.dup2(oldstderr_fno, 2)
75+
LOCK.release()
76+
77+
78+
@contextmanager
79+
def silence():
80+
with silence_sout():
81+
with silence_serr():
82+
yield

root_numpy/tests/test_evaluate.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import root_numpy as rnp
33
from numpy.testing import assert_array_equal
44
from nose.tools import assert_raises
5-
from . import RNG
5+
from . import RNG, silence_serr
66

77

88
def test_evaluate_func():
@@ -39,7 +39,9 @@ def test_evaluate_func():
3939
assert_raises(ValueError, rnp.evaluate, f3, arr_1d)
4040
assert_raises(ValueError, rnp.evaluate, f3, arr_2d)
4141

42-
assert_raises(ValueError, rnp.evaluate, "f", arr_1d)
42+
with silence_serr(): # silence cling error
43+
assert_raises(ValueError, rnp.evaluate, "f", arr_1d)
44+
4345
assert_raises(ValueError, rnp.evaluate, "x*y", arr_1d)
4446
assert_raises(ValueError, rnp.evaluate, "x", arr_2d)
4547
assert_raises(ValueError, rnp.evaluate, "x*y", arr_3d)

0 commit comments

Comments
 (0)