skimage๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ ๊ฐ๋ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/build/skimage-0.12.3/debian/tmp/usr/lib/python2.7/dist-packages/skimage/transform/tests/test_integral.py", line 46, in test_vectorized_integrate
assert_equal(expected, integrate(s, r0, c0, r1, c1)) # test deprecated
File "/build/skimage-0.12.3/debian/tmp/usr/lib/python2.7/dist-packages/skimage/transform/integral.py", line 86, in integrate
warn("The syntax 'integrate(ii, r0, c0, r1, c1)' is "
File "/build/skimage-0.12.3/debian/tmp/usr/lib/python2.7/dist-packages/skimage/_shared/_warnings.py", line 16, in warn
warnings.warn(message, stacklevel=stacklevel)
File "/usr/lib/python2.7/dist-packages/numpy/testing/utils.py", line 2199, in _showwarning
self._orig_show(message, category, filename, lineno,
AttributeError: 'suppress_warnings' object has no attribute '_orig_show'
๋๋ ์ด๊ฒ์ด numpy ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง๋ง ํ์คํ์ง ์์ต๋๋ค.
ํ , ์ฝ๊ฐ ์ด์ํฉ๋๋ค. skimage ํ ์คํธ์์ (์ด์ํ) ์ค๋ ๋ฉ์ด ์งํ๋๊ณ ์์ต๋๊น? ๊ฒฝ๊ณ ์ฒ๋ฆฌ๋ ํ์ด์ฌ์์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ํ ์คํธ๋ฅผ ์๋นํ ๋ง์น ๊ฒ์ ๋๋ค. ์ด๋ป๊ฒ ๋ค๋ฅธ ์ผ์ด ๋ฐ์ํ ์ ์๋์ง ํ์ธํ๋ ๋ฐ ์ฝ๊ฐ์ ์ด๋ ค์์ด ์์ง๋ง ํ ์คํธ๊ฐ ์คํ๋๋ ์ ํํ ์ฝ๋๋ฅผ ์ดํด ๋ด์ผ ํ ๊ฒ์ ๋๋ค.
assert_warns
์ ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ ์ถ์ธกํ๋ค. ์ด์์๋ ํ๋์ suppress_warnings
์ปจํ
์คํธ ๋ง ์์ด์ผํฉ๋๋ค (๊ฐ์ฅ ๋ฐ๊นฅ ์ชฝ ๋ฒ์์ด๊ณ numpy์ ํ
์คํธ ์คํ๊ธฐ์ ์ํด ์์ฑ๋๋ฉฐ skimage๊ฐ์ด๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ). ์ด์ ๋ด๊ฐ ํท๊ฐ๋ฆฌ๋ ์ด์ ๋ _orig_show
์ ์๋์ง ์๋ ๊ฒ์ ์ปจํ
์คํธ๊ฐ ์ด๋ฏธ ์ข
๋ฃ ๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํด์ผํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ warnings.showwarning
์ (๋) ์ด๋ฏธ ์ด์ ๊ฐ์ผ๋ก ์ฌ์ค์ ๋์ด์ผํฉ๋๋ค.
๋ฌผ๋ก ์ค๋ ๋๊ฐ ์์ผ๋ฉด ์ ์ฒด ๊ฒฝ๊ณ ๋ด์ฉ์ด ๋ถํด๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด :
thread1 : ๊ฒฝ๊ณ ์ปจํ
์คํธ ์
๋ ฅ-> ์ผ๋ฐ ๊ฒฝ๊ณ ์ธ์ ๋์ฒด
thread2 : ๊ฒฝ๊ณ ์ปจํ
์คํธ ์
๋ ฅ-> thread1 ๊ฒฝ๊ณ ํธ๋ค๋ฌ ๋์ฒด
thread1 : ๊ฒฝ๊ณ ์ปจํ
์คํธ ์ข
๋ฃ-> ์ผ๋ฐ ๊ฒฝ๊ณ ์ธ์๋ก ์ฌ์ค์
thread2 : ๊ฒฝ๊ณ ์ปจํ
์คํธ ์กด์ฌ-> thread1์ ๊ฒฝ๊ณ ํธ๋ค๋ฌ๋ก ์ฌ์ค์ -> kaboom.
Btw. ๋๋ ๋น์ ์ด "skimage์์ __warning_registry__
์ ์ ๋ฆฌํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ต์ ๊ฒฝ๊ณ ๋ ๋น์ทํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํ๋ ์ปจํ
์คํธ ๊ด๋ฆฌ์์
๋๋ค (๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํญ๋ชฉ์ ์ถ๊ฐ ํจ), ํฅ๋ฏธ ๋กญ๊ฑฐ๋ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค.
๋ฐ๋น์ ์ฉ skimage๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋๋ฐ ์ฌ๊ธฐ์๋ ์ ํ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ scikit-image / scikit-image # 2412๋ฅผ ์ด์ด์ ์ฐธ์ฌํ์ต๋๋ค.
์์ ์ฑ์ ์ํด : ๋๋ก๋ skimage๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์คํ ์ถ์ ์ ์ป์ ์ ์์ต๋๋ค.
ERROR: test suite for <module 'skimage.transform.tests' from '/build/skimage-0.12.3/debian/tmp/usr/lib/python3/dist-packages/skimage/transform/tests/__init__.py'>
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/nose/suite.py", line 229, in run
self.tearDown()
File "/usr/lib/python3/dist-packages/nose/suite.py", line 352, in tearDown
self.teardownContext(ancestor)
File "/usr/lib/python3/dist-packages/nose/suite.py", line 368, in teardownContext
try_run(context, names)
File "/usr/lib/python3/dist-packages/nose/util.py", line 453, in try_run
inspect.getargspec(func)
File "/usr/lib/python3.5/inspect.py", line 1040, in getargspec
stacklevel=2)
File "/usr/lib/python3/dist-packages/numpy/testing/utils.py", line 2199, in _showwarning
self._orig_show(message, category, filename, lineno,
AttributeError: 'suppress_warnings' object has no attribute '_orig_show'
์ด๋ค ๋ฒ์ ์ python, numpy ๋ฑ์ผ๋ก ์ปดํ์ผํ๊ณ ์์ต๋๊น?
Numpy 1.12 ~ RC ~ ๋ฒ ํ 1, Python 2.7 ๋ฐ 3.5
(์ฃ์กํฉ๋๋ค. ๋ด ์ค์ : ์์ง RC๋ฅผ ํ์ธํ์ง ์์์ต๋๋ค)
ํ , ํผ๋ ์ค๋ฝ์ต๋๋ค .... ์ ์ค๋ ๋ฉ ๋ฌธ์ ๊ฐ ์๋์ง ์ ์๋ ์์ง๋ง ๊ฒฝ์ ์กฐ๊ฑด์ด๋ catch_warning
๊ฐ์ ํญ๋ชฉ (ํฌํจ)์ ์๋ชป๋ ์ค์ฒฉ์์ด ๋ฐ์ํ๋์ด ์ค๋ฅ๋ suppress_warning
).
๋๋ ๋ํ ๊ทธ๊ฒ์ด ํญ์ ๋ฐ์ํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ํํ ๋์ผํ ํ๊ฒฝ์์ ๋น๋๋ฅผ ๋ ๋ฒ ์คํํ๋ฉด ๋ฌธ์ ๊ฐ ๋ค๋ฅธ ์์น์์ ๋ฐ์ํ๊ฑฐ๋ ์ ํ ๋ํ๋์ง ์์ต๋๋ค.
@olebole ํ ์คํธ ์ํธ๋ฅผ ์ ํํ ์ผ๋ง๋ ์คํํ๊ณ ์์ต๋๊น?
ํ ์คํธ ์ค์ํธ ์์ ๋ณต์ฌ :
#!/bin/sh
set -efu
pys="$(pyversions -rv 2>/dev/null)"
pkgbuild=${pkgbuild:-no}
srcdir=$PWD
for py in $pys; do
echo "=== python$py ==="
if [ "$pkgbuild" = "yes" ]; then
export PYTHONPATH="$srcdir/debian/tmp/usr/lib/python$py/dist-packages"
cd "$srcdir/build/"
else
cd "$ADTTMP"
fi
xvfb-run -a python$py /usr/bin/nosetests -s -v --exclude test_tools.py skimage 2>&1
done
ํ
์คํธ๊ฐ X11 ํ๊ฒฝ์์ ์คํ๋์ด์ผํ๊ธฐ ๋๋ฌธ์ xvfb-run
๊ฐ ์์ต๋๋ค.
Hmmmpf, ์ฝ๊ฐ ๋ชจ๋์ ํ ์คํธํ๊ธฐ ์์ํ ๋ ํ๋ ์๋์์ ์ ํํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น? ์ฝ๊ฐ ๋๋ฅผ ํท๊ฐ ๋ฆฌ๊ฒํ๊ณ , ์ ๊ฒฝ๊ณ ๋ฅผ ์๋ง์ผ๋ก ๋ง๋๋์ง ์ ์ ์์ต๋๋ค .... ์๋๋ฉด ๊ฒฐ๊ตญ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ๋ ๋ฒ๊ทธ์ด์ง๋ง ์ค์ ๋ก ๋ณผ ์๋ ์์ต๋๋ค.
๋ด nosetests ๋งจ ํ์ด์ง์์ ๋๋
--processes=NUM
Spread test run among this many processes. Set a number equal to the number of processors or cores in your machine for best results. Pass a negative
number to have the number of processes automatically set to the number of cores. Passing 0 means to disable parallel testing. Default is 0 unless
NOSE_PROCESSES is set. [NOSE_PROCESSES]
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๋ ฌ ํ ์คํธ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ด๋ ๊ฒฝ์ ์กฐ๊ฑด์ด ์์ด์ผํฉ๋๋ค.
nose๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ๊ธฐ๋ฐ์ผ๋ก teardownContext
๋ฅผ ์คํํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น?!
์๋, ์๋ง ๋ฐ๋ณด ๊ฐ์. ์ต์ ๊ฒฝ๊ณ ์ปจํ
์คํธ๋ ์์ฑ์ ์ญ์ ํ๊ธฐ ์ ์ warnings.showwarning
์ฌ์ค์ ํ๋ฏ๋ก gc ์์์กฐ์ฐจ๋ ๋ค๋ฅธ ์์
์์ด๋ ์๋ฌด๊ฒ๋ ์์ฑ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ํ ๋ชฐ๋์ต๋๋ค. :).
๊ธ์, ๋๋ skimage-0.9.3์์ 33 ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์๋๋ฐ, ๋๋ถ๋ถ์ PIL์ด๋ ์ธ๋ฑ์ฑ์์ ๋ฐ์ํ์ง๋ง ์ต์ ์๋ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ค๋ฅ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?
@charris ์ด ๋ฌธ์ ๋ 0.9.3์ด ์๋ 0.12.3์ ๋ํด๋ณด๊ณ ๋์์ต๋๋ค. :)
์ข์, ๋ง์นจ๋ด ์ ์คํธ๋ฆผ์์ ํ๋ค์ด๋์ด ์ด์ 39 ๊ฐ์ ์ค๋ฅ์ ์๋ง์ ์ง์ ์ค๋จ์ด ๋ฐ์ํ์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ๊ณ ๋ ํ ์คํธ๊ฐ Wayland๊ฐ ์๋ QT์์ ์คํ๋๊ณ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์ ๊ตฌ์ฑ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค. ๋ํ ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ๋ฅผ ์คํํด์ผํฉ๋๋ค.
python -c'import skimage; skimage.test()'
nosetests
๋ ์ ํ ์๋ํ์ง ์์ต๋๋ค.
์ง์ ์ค๋จ์ ์ ์์ ๋๋ค. ์ง์ ์ค๋จ์ด ์์ ๋๋๋ผ๋ ์ด์ API๋ฅผ ๊ณ์ ํ์ธํฉ๋๋ค. ์ค๋ฅ์ ๋ํด์๋ ์ ์์ด ์๋๋๋ค. (scikit-image) ๋ฒ๊ทธ ์ถ์ ๊ธฐ์๋ณด๊ณ ํด ์ฃผ์๊ฒ ์ต๋๊น?
@sciunto ๋ฌธ์๋ ๋ก์ปฌ ํ ์คํธ ์ง์นจ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ข์์, ๊ฐ์ ๊ณณ์์ ๋ด ๋๋ค. ํ ์คํธ๋
def test_vectorized_integrate():
r0 = np.array([12, 0, 0, 10, 0, 10, 30])
c0 = np.array([10, 0, 10, 0, 0, 10, 31])
r1 = np.array([23, 19, 19, 19, 0, 10, 49])
c1 = np.array([19, 19, 19, 19, 0, 10, 49])
expected = np.array([x[12:24, 10:20].sum(),
x[:20, :20].sum(),
x[:20, 10:20].sum(),
x[10:20, :20].sum(),
x[0,0],
x[10, 10],
x[30:, 31:].sum()])
start_pts = [(r0[i], c0[i]) for i in range(len(r0))]
end_pts = [(r1[i], c1[i]) for i in range(len(r0))]
assert_equal(expected, integrate(s, r0, c0, r1, c1)) # test deprecated
assert_equal(expected, integrate(s, start_pts, end_pts))
# test deprecated
์ฃผ์์ ์๋ง๋ ํ
์คํธ์ ์ฝ๊ฐ์ ์์ ์ด ํ์ํ์ง๋ง suppress_warnings
๋ ๋ ์ฐ์ํ๊ฒ ์คํจํด์ผํ๋ค๊ณ ๋์๊ฒ ์ ์ํฉ๋๋ค.
์ข ๋ ๋ง์ ์ ๋ณด๋ฅผ
$ python skimage/transform/tests/test_integral.py
NumPy run_module_suite
๊ฒ์ ์คํจํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค.
======================================================================
ERROR: skimage.transform.tests.test_integral.test_vectorized_integrate
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/home/charris/Workspace/scikit-image/skimage/transform/tests/test_integral.py", line 46, in test_vectorized_integrate
assert_equal(expected, integrate(s, r0, c0, r1, c1)) # test deprecated
File "/home/charris/Workspace/scikit-image/skimage/transform/integral.py", line 86, in integrate
warn("The syntax 'integrate(ii, r0, c0, r1, c1)' is "
File "/home/charris/Workspace/scikit-image/skimage/_shared/_warnings.py", line 16, in warn
warnings.warn(message, stacklevel=stacklevel)
UserWarning: The syntax 'integrate(ii, r0, c0, r1, c1)' is deprecated, and will be phased out in release 0.14. The new syntax is 'integrate(ii, (r0, c0), (r1, c1))'.
scikit-image์๋ skimage/_shared/_warnings.py
๊ฒฝ๊ณ ์ ๋ํ ์์ฒด ์ปจํ
์คํธ ๊ด๋ฆฌ์๊ฐ ์์ต๋๋ค. suppress_warnings
์ ์ถฉ๋ ํ ์ ์์ต๋๋ค.
ํธ๊ธฐ์ฌ ๋๋ฌธ์ ๊ธฐ๋ณธ UserWarning
๋ฅผ ์ฌ์ฉํ๋ ๋์ DeprecationWarning
๋ฅผ ๋ช
์ ์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด ์ฐจ์ด๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋์ ๋๋ ์ค๋ฅ๊ฐ ๋ณด์ด์ง ์์ต๋๋ค.
$ nosetests-2.7 skimage/transform/tests/test_integral.py |& grep orig_show
์ด๋ฏ๋ก
$ nosetests-2.7 skimage/transform/tests/ |& grep orig_show
์๊ฐ์ ์ฝ 25 %๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ์ค๋ฅ์ ์์ธ์ด ๋ค๋ฅธ ๊ณณ์ ์๊ณ ์คํจํ ํ ์คํธ๊ฐ์ด๋ฅผ ๋ ธ์ถํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํนํ skimage/transform/tests/test_geometric.py
์๋ ๊ฒฝ๊ณ ์ปจํ
์คํธ ๊ด๋ฆฌ์ expected_warnings
๊ฐ ํฌํจ๋์ด์์ด ์์ฌ ์ค๋ฝ์ต๋๋ค.
์ด์ test_parallel
๋ฐ์ฝ๋ ์ดํฐ ์ธ https://github.com/scikit-image/scikit-image/blob/master/skimage/_shared/testing.py๊ฐ ์์ฌ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋ ๊ฐ์ ์ค๋ ๋์
๋๋ค.
test_parallel
๊ฐ์ ธ ์ค๋ ์ธ ํ์ผ์ ์ ๊ฑฐํ๋ฉด ๋ ์ด์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํธ์ง : ๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ์ ํ ๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์์ต๋๋ค. ํ ... ์๋ง๋ ๋จธ์ ์์ ์คํ์ค์ธ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
ํ , test_parallel
๋ ์ฝ๋๋ฅผ ์ดํด ๋ณด๋๋ผ๋ ๋ถ๋ช
ํ ๊ฒฝ๊ณ ์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ ์์ง๋ง ๋ถ๊ฐ๋ฅํ์ง๋ ์์ต๋๋ค.
test_hough_transform.py
๋ฌด์ธ๊ฐ๊ฐ ๊ฐ์์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํด๋น ํ์ผ์ ์ ๊ฑฐํ๋ฉด ์ค๋ฅ๊ฐ ์์ต๋๋ค.
ํธ์ง : ์๋ง๋ test_integral.py
๋ชจ๋ ์์ ์๊ธฐ ๋๋ฌธ์ผ๊น์?
๋ฌธ์ ๋ test_hough_transform.py
์์ด ํ
์คํธ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@test_parallel()
def test_hough_circle():
# Prepare picture
img = np.zeros((120, 100), dtype=int)
radius = 20
x_0, y_0 = (99, 50)
y, x = circle_perimeter(y_0, x_0, radius)
img[x, y] = 1
out1 = tf.hough_circle(img, radius)
out2 = tf.hough_circle(img, [radius])
assert_equal(out1, out2)
out = tf.hough_circle(img, np.array([radius], dtype=np.intp))
assert_equal(out, out1)
x, y = np.where(out[0] == out[0].max())
assert_equal(x[0], x_0)
assert_equal(y[0], y_0)
Particuler์์ ๋ ์ค ์ค ํ๋
assert_equal(out1, out2)
# or
assert_equal(out, out1)
์ค๋ฅ๋ฅผ ํ์ฑํํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก @parallel
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ์ค๋ฅ๊ฐ ์์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฒฐ๋ก ์ ๋ฒกํฐ์ ํจ๊ป ํธ์ถ ๋ assert_equal
์ ๊ฒฐํฉ ๋ ์ค๋ ๋๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค๋ ๊ฒ์
๋๋ค.
๋น์ฐํ, assert equal ํจ์๋ ".*NAT =="
๊ฒฝ๊ณ ๋ฅผ ํํฐ๋งํ๊ธฐ ์ํด ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๋ค assert_equal
์ค๋ ๋ฉ ์ง์).
์ฒ ์ถ์ ์ ํ์ด!
๊ทธ๊ฒ์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ข์ ์ผ์ ๋๋ค.
์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ ๋ค๋ฅธ numpy ํจ์๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
ํ์คํ์ง๋ ์์ง๋ง, ํ
์คํธ ์ํธ์๋ ๊ฒฝ๊ณ ๋ง ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ np.errstate
๋ ์๋ง๋ ์ค๋ ๋ ์ธ์ดํ์ผ๊น์?
์ด ๋ฉ์ง ์กฐ์ฌ @charris ์ @seberg์ ๋ง์ ๊ฐ์ฌ๋ฅผ๋๋ฆฝ๋๋ค.
ํ , ์ข ์ง์ฆ๋ ๋ค์. ์ต์ ๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ค์ด ์คํธ๋ฆผ์ ๋์์ด ๋ณ๊ฒฝ ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ด์ฐฎ์ ์ ์์ง๋ง (์๋ง๋ ๋ ๊นจ๋ํ ์ ์์ต๋๋ค) ๋ฒ๊ทธ ์์ ๋ฆด๋ฆฌ์ค์ ์ข์์ง ํ์ ํ ์ ์์ต๋๋ค. ๋ํ ๋น๊ต ์ ํ ํ ์คํธ์์ ๋ฎคํ ์ค๋ฅผ ์ ๊ธ ์ ์์ต๋๋ค. ์์น์ ์ผ๋ก ํญ์ ๊ด์ฐฎ์ ๊ฒ์ ์๋์ง๋ง ์ด๋ป๊ฒ ๊นจ์ง ์ ์๋์ง ์ ๋ง ์๊ฐํ ์ ์์ต๋๋ค.
assert_equal
์์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํฅํ NaT ๋น๊ต๋ฅผ ์ํด ์ด๋ค ๊ฒฝ์ฐ์๋ ์์ ํด์ผํฉ๋๋ค. NaT๋ int64๋ก ๋ณํ ํ ์ ์์ผ๋ฉฐ ๊ฐ์ min_int64์
๋๋ค.
์, ์ฌ์ค, ์ฐ๋ฆฌ๋ ์ค์ ๋ก NaT๋ฅผ ๋ช ์ ์ ์ผ๋ก ์ง์ํ ์ ์์ต๋๋ค. ํ์ฌ ์ฝ๊ฐ ์ฑ๊ฐ ์์ง๋ง (ํนํ NaT๋ฅผ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์) ์ด๋ ต์ง๋ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฐ์ด ๋น๊ต์ ๊ด๋ จํ์ฌ ์ด๋ฌํ ๊ฒ ์ค ๋ ๋ค๋ฅธ ๊ฒ์ด ์์ง๋ง ๋ง์ด ์ฌ์ฉ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค (๊ทธ๋ฆฌ๊ณ ๋ฌด์์ ๋ํด ํ์คํ์ง ์์ต๋๋ค).
์ด์ค ์
์ NaT ๋ก์ง์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ง์คํฐ์๊ฒ๋ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ฐฑ ํฌํ
์๋ ์๋ํ ์ง ํ์ ํ ์ ์์ต๋๋ค. suppress_warnings
๊ฐ ์๋ก์ด ๊ฒ์ด ๊ธดํ์ง๋ง ๊ฒฝ์ ์กฐ๊ฑด ์์ฒด๋ ์ด๋ฏธ ์ง๋ ๋ฆด๋ฆฌ์ค์์์์ต๋๋ค.
์ฌ์ ํ isnat
ํจ์๊ฐ ํ์ํ๊ฑฐ๋ datetime/timedelta
์์ isnan
datetime/timedelta
๋ฅผ ์ง์ํ ์๋ ์์ต๋๋ค.
์, isnat
๊ธฐ๋ฅ์ ๋์ํฉ๋๋ค. accurs์๋ timedelta64
๋ฐ datetime64
๋ ๊ฐ์ง ์ ํ๋ ์์ต๋๋ค. NaT ๊ฐ์ ์ด๋์๋ ๋
ธ์ถ๋์ง ์์ผ๋ฉฐ np.nat
๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ์ ์๋ ndarraytypes.h
์
๋๋ค.
@charris , Chuck, ๋์ np.isnat
ํ๊ฑฐ๋ isnan
์์ datetime ๋ฐ timedelta๋ฅผ ํ์ฉ ํ์๊ฒ ์ต๋๊น?
ํ , isnan
๋ชจ๋ ๋ฃ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ด ์๊ฐ์ด์ง๋ง์ด ์์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. @jsmith @juliantaylor ์๊ฐ?
@shoyer๋ ์๊ฒฌ์ด์์ ์ ์์ต๋๋ค.
๋ฐฉ๊ธ isnat
๊ตฌํํ์ง๋ง ๋ฆด๋ฆฌ์ค์ ๊ด๋ จ๋ ๋ชจ๋ ํ์ด๋ฐ์ ๋ํด ํ์ ํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ต์ํ์ ๋ฒ์ ์ผ๋ก ์์ ํด์ผํ๋ค๋ฉด, ๋ ์ข์ ๋ฐฉ๋ฒ์ ์๋ง๋ ํ์ด์ฌ isnat
๋ฒ์ ์ ํ
์คํธ ์ํธ์ ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค. ์ต์ํ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด์ ๋ณด๋ค ๋ ๋ง์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ๊ฒ ๋ ๊ฒ์
๋๋ค. 1. ์ฐ๋ฆฌ์ ํ
์คํธ ์ํธ๋ฅผ ์ฌ์ฉํ๊ณ 2. ์ค์ ๋ก ๊ฒฝ๊ณ ๋ฅผ์ฃผ์ ๊น๊ฒ ํ
์คํธํ์ญ์์ค).
๋๋ ์คํจ๊ฐ ๋ชน์ ์ฌ๊ฐํ๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง ๊ทธ๊ฒ์ ๊ณ ์น๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. isnat์ (๋น๊ณต๊ฐ?) ํ์ด์ฌ ๋ฒ์ ์ 1.12์์ ๋์๊ฒ ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค.
suppress_warnings
๋
์คํธ๋ง์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์์ ์ธ๊ธํด์ผํฉ๋๋ค.
๊ทธ๋ ์ต๋๋ค :)
ํด์ผ ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฒ ์ ํ ๋๋ฒ๊ทธ๋ฅผ ํด์ฃผ์ ๋ง์ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด์ ๋ํ ์๋ฃจ์ ์ ๊ตฌํ / ํ ์คํธํ๊ธฐ ์ํด ํ ์์๋ ์ผ์ด ์์ต๋๊น? ๋ฐ๋น์์ ์ด๊ฒ์ ๋ํ ์์ ์ ์ด๋งํฉ๋๋ค :)
@sandrotosi , ์ํ๊น๊ฒ๋ ์ฝ๊ฐ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ด isnat์์์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ํ ์ ์์ต๋๋ค (isnat์ ๋น๊ณต๊ฐ ํ์ด์ฌ ๋ฒ์ ์ฌ์ฉ). ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ด ๋ค๋ฅธ ๊ณณ์์ ํ ์คํธ ํ๊ท๋ฅผ ๋ง๋ค์ง ์์์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค : /.
์ด ๋ ๊ฒฝ์ฐ์ ๋ฎคํ
์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ค์ ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๊ณ (๋น์ ์ด ํธ์ถ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋์ ๊ฐ ๊ฐ๋ฅ์ฑ์ด ๋ณด์ธ๋คํด์ผ ๊ทธ๋ด๋ฏํ ํดํน ๋ ์์๋ค assert_equal
๋๋ ๋ด๋ถ์์ ๋น์ทํ assert_equal
). ๋๋ ์ค์ ๋ก ๊ทธ๊ฒ์ numpy master์์ ์ฌ์ฉํ์ง๋ ์์ ๊ฒ์ด์ง๋ง 1.12์ ๋ํ ์ต์ํ์ ๋ฒ๊ทธ ์์ ์ผ๋ก ์ค์ ์ต์
์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ skimage ํ
์คํธ ์์ฒด๋ฅผ ๋ฐฉํดํ์ง ์์ต๋๋ค.
@olebole ์
@seberg ๊ทธ๋ ๋๋ ๋ชฉํ๊ฐ 1.12์ ๋ํ ์ต์ํ์ ์์ ์ ๊ฐ์ง๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ง์คํฐ์์ ๋ ์์ ํ๊ณ ํฌ๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค-์ ์ด๋ ๋ค์ ๋ฐ๋น์ ๋ฆด๋ฆฌ์ค ๊ฐ์ด ๋ฌธ์ ์์ด numpy๋ฅผ ๊ฐ๋๋ก ํ ๊ฒ์ ๋๋ค.
@sandrotosi gh-8427์์ ์ ๊ธ ๋ฐฉ์์ ์๋ํ์ต๋๋ค. ๋๋ ์๊ฐ์ด ๋ฏธ์ณค๋์ง ์๋์ง๊ฐ ์๋๋ผ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์๋ํ๊ณ ์ถ๋ค๋ฉด ....
์ ์๋์ง ์์ ๋์์ ๊ฐ์ง๋๋ก ๋จ์ํ suppress_warnings
๋ฅผ ์์ ํ ์ ์์ง๋ง ๋ค์ค ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ ๋ ์ถฉ๋ํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
(๋๋ ๋ช ๊ฐ์ง ์์ด๋์ด๊ฐ ์์ง๋ง ์ ํํ ์ด๋ป๊ฒ ์๋ ํ ์ ์๋์ง ์ฌ์ ํ ์๊ฐํ๊ณ ์์ต๋๋ค.)
๋ฌผ๋ก , ์์ฑ์ ์ญ์ ํ ์๋ ์์ง๋ง ๋์ค์ ํ ์คํธ์์ ๋ฒ๊ทธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ํ ์คํธ ์ํธ๋ ๊ฒฝ๊ณ ํ ์คํธ์ ๋ํด ๋ฉ์ฒญํ์ง ์์ต๋๋ค.
1.12.0rc2 (https://github.com/numpy/numpy/pull/8427 ํฌํจ)๋ฅผ ๋ฐ๋น์์ ์ ๋ก๋ํ๊ณ skimage (ํ ์คํธ ์ค์ํธ๊ฐ ์์ ํ ๋นํ์ฑํ๋์ง ์์ ์ฝ๊ฐ ์ค๋๋ ๋ฒ์ ์ ๋ฐ๋น์ ํจํค์ง)๋ฅผ 3 ๋ฒ โโ๋ค์ ๋น๋ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํญ์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
ํด์ผ ๋์์ด ์์ ์ ํด์ฃผ์ ๋ง์ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด์ ์ต์ข 1.12.0 ๋ฆด๋ฆฌ์ค์ ๋ํ ๊ณํ์ด ์์ต๋๊น? :)
์ต์ข ๋ฐ๋งค๋ 1 ์ 15 ์ผ์ ๋๋ค.
rc2์์ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๊ทํ์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋ง์คํฐ์์ ์์ ๋ ๋๊น์ง ์ด์ด ๋ก๋๋ค.
ํ , ๋ง์คํฐ์์ ๊ณ ์ ๋์ง ์์์ต๋๋ค. @seberg # 8421์ด ์ด๊ฒ์ ๋ซ๋ ๊ฒ์ด ๋ง์ต๋๊น?
# 8421๋ก ์์ ๋์์ต๋๋ค.