DisCoPy bridge

to_tensor

Convert an FXTensor to a discopy.tensor.Tensor.

from_tensor

Convert a discopy.tensor.Tensor to an FXTensor.

to_box

Wrap an FXTensor as a discopy.markov.Box.

to_diagram

Wrap an FXTensor as a Markov diagram (a single box).

from_box

Convert a Markov box with array data to an FXTensor.

from_diagram

Evaluate a Markov diagram as an FXTensor.

FXTensorFunctor

Interpret discopy.markov diagrams as FXTensor morphisms.

fxtensor_salmon.discopy.to_tensor(tensor)[source]

Convert an FXTensor to a discopy.tensor.Tensor.

Axis order is domain factors then codomain factors, matching Tensor.array as dom.inside + cod.inside. Empty domain or codomain becomes the monoidal unit Dim(). Labels are dropped; restore them with from_tensor() or use to_box().

Parameters:

tensor (FXTensor)

Return type:

Tensor

fxtensor_salmon.discopy.from_tensor(tensor, labels=None)[source]

Convert a discopy.tensor.Tensor to an FXTensor.

labels is an optional (domain_labels, codomain_labels) pair in the same format as FXTensor.labels. Without it the result is unlabeled and uses tensor.dom.inside / tensor.cod.inside.

Parameters:
  • tensor (Tensor)

  • labels (Tuple[List[List[str]], List[List[str]]] | None)

Return type:

FXTensor

fxtensor_salmon.discopy.to_box(tensor, name='FXTensor')[source]

Wrap an FXTensor as a discopy.markov.Box.

Each profile factor becomes one wire. Unlabeled factor n is named n; labeled factor ['Sunny', 'Rainy'] is stored as a JSON list on the type name so from_box() can restore it.

Parameters:
Return type:

Box

fxtensor_salmon.discopy.to_diagram(tensor, name='FXTensor')[source]

Wrap an FXTensor as a Markov diagram (a single box).

Parameters:
Return type:

Diagram

fxtensor_salmon.discopy.from_box(box)[source]

Convert a Markov box with array data to an FXTensor.

Dimensions come from box.data (reshaped to dom then cod) and labels are restored from type names produced by to_box().

Parameters:

box (Box)

Return type:

FXTensor

fxtensor_salmon.discopy.from_diagram(diagram, ob=None, ar=None)[source]

Evaluate a Markov diagram as an FXTensor.

A single box with data is converted directly. Composite diagrams are interpreted by FXTensorFunctor. Object images are inferred from encoded type names when ob is omitted.

Parameters:
  • diagram (Diagram)

  • ob (Mapping[Ty, int | Sequence[str] | Dim] | None)

  • ar (Mapping[Box, FXTensor | Tensor | ndarray | Sequence[Any]] | Callable[[Box], FXTensor | Tensor | ndarray | Sequence[Any]] | None)

Return type:

FXTensor

class fxtensor_salmon.discopy.FXTensorFunctor(ob, ar=None)[source]

Interpret discopy.markov diagrams as FXTensor morphisms.

Copy, Discard, Swap and Id are sent to FXTensor.copy_tensor(), FXTensor.exclamation(), FXTensor.swap() and FXTensor.identity_tensor(). Custom boxes are read from ar (an FXTensor, a DisCoPy Tensor, or an array).

Parameters:
  • ob (Union[Mapping[Ty, ObImage], Callable[[Ob], ObImage]]) – Atomic Ty to a dimension (int), a label list, or a Dim.

  • ar (Optional[Union[Mapping[Box, ArImage], Callable[[Box], ArImage]]]) – Generating Box to an FXTensor or array. Copy / Discard / Swap / Id are interpreted automatically and need no entry.