数値解析日記

数値解析関係のネタ帳。C++,pythonなど

pythonの区間演算ライブラリ進捗2016-01-05

実は大体できた(唐突)。
今回はvmathクラスの紹介

github.com

import pint as pn
from pint import vmath
a = 2.
itv_a = pn.interval(a)
print(itv_a)
[2.0,2.0]
vmath.sqrt(a)
1.4142135623730951

floatを代入するとfloatが返ってくる

vmath.sqrt(itv_a)
[1.414213562373095,1.4142135623730951]

intervalを代入するとintervalが返ってくる
じゃあ、少し変なことをしてみる

itvmath = pn.vmath()
itvmath.arg_type = pn.interval

このitvmathのmath関数を使う時は代入する前にinterval型に変換するように設定

itvmath.sqrt(a)
[1.414213562373095,1.4142135623730951]

返ってくるのはinterval型になる。
itvmath.sqrt(pn.interval(a))と同じ

itvmath.sqrt(itv_a)
[1.414213562373095,1.4142135623730951]
itvmath2 = pn.vmath()
itvmath2.return_type = pn.interval
itvmath2.sqrt(a)
[1.4142135623730951,1.4142135623730951]

return_typeはreturnする直前に変換を行う
return return_type(answer)となる そのため、変換するタイミングが違うitvmath.sqrt(2.)とitvmath2.sqrt(2.)は結果が少し違う
このようにmath関数の振る舞いを自由に変更することができるのがvmathクラスの特徴です。
今はinterval型とビルトインされている型にしか対応してませんが、そのうち増やす予定