Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ45

の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。

describeメソッドの続きから。

    if useBlackList:
        bl = read_blacklist()
        co = bl.columns.values
        is_blacklist = ((bl[co[0]] == m) &
                        (eq(bl[co[1]], i[0])) &
                        (eq(bl[co[2]], i[1])) &
                        (eq(bl[co[3]], j[0])) &
                        (eq(bl[co[4]], j[1])) &
                        (eq(bl[co[5]], k[1])) &
                        (eq(bl[co[6]], k[0])) &
                        (eq(bl[co[7]], l[0])) &
                        (eq(bl[co[8]], l[1]))).any()

前回はi,j,k,lに入る要素について明らかにしました。
今回はbit演算部分を追います。

def eq(a, b):
    return (a == b) | (pd.isnull(a) & pd.isnull(b))

eqメソッドでは(a == b)の一致判定とpd.isnull(a) & pd.isnull(b)のbit演算が行われています。

例えば

>>> a = 1
>>> b = 1
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
True
>>> a = None
>>> b = None
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
True
>>> a = 1
>>> b = None
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
False

となります。

これを全てのconfig値で試行してさらにbit演算することでこの設定組み合わせの一部がblacklistに載っているかを確認します。
しかしこれだと.any()の謎が解けません。
これはおそらくnumpy array.any() だと思うのですが、単なるTrue, Falseの値はnumpy配列ではありません。
csvでpandasから読み込んだ bl[co[1]] の値がnumpy配列になっているのかもしれません。

15分経ったので今日はここまで。

↓次


この記事が気に入ったらサポートをしてみませんか?