DisCoPy 連携¶
fxtensor_salmon.discopy は、テンソルを DisCoPy の
マルコフ図式と相互に変換します。このモジュールの import には discopy extra と
Python 3.10 以上が必要です。
pip install "fxtensor-salmon[discopy]"
プロファイルの各因子が1本のワイヤです。
to_tensor() はラベルを落とします。必要なら
from_tensor() に戻してください。
to_box() はラベルをマルコフ型の名前に格納し、
from_box() が復元します。
to_diagram() はその箱を図式にしたものです。
FXTensorFunctor は、DisCoPy の Copy、
Discard、Swap、Id を
copy_tensor()、
exclamation()、
swap()、
identity_tensor() に送ります。対象の対応は、
原子型を int、ラベルのリスト、または DisCoPy の Dim に写します。
import numpy as np
from discopy.markov import Copy, Discard, Id, Swap, Ty
from fxtensor_salmon import FXTensor
from fxtensor_salmon.discopy import (
FXTensorFunctor,
from_box,
from_tensor,
to_box,
to_diagram,
to_tensor,
)
kernel = FXTensor([[2], [2]], data=np.array([[0.8, 0.2], [0.4, 0.6]]))
assert from_tensor(to_tensor(kernel)) == kernel
weather = ["Sunny", "Rainy"]
forecast = FXTensor([[weather], [weather]], data=np.array([[0.8, 0.2], [0.4, 0.6]]))
assert from_tensor(to_tensor(forecast)).labels == (None, None)
assert from_tensor(to_tensor(forecast), labels=forecast.labels) == forecast
box = to_box(forecast, name="forecast")
assert from_box(box) == forecast
assert from_diagram(to_diagram(forecast, name="forecast")) == forecast
x, y = Ty("x"), Ty("y")
functor = FXTensorFunctor({x: 2, y: 3}, {})
assert functor(Copy(x)) == FXTensor.copy_tensor([2])
assert functor(Discard(x)) == FXTensor.exclamation([2])
assert functor(Swap(x, y)) == FXTensor.swap([2], [3])
assert functor(Id(x)) == FXTensor.identity_tensor([2])