factory#
- discopy.cat.factory(cls)[source]#
Allows the identity and composition of an
Arrowsubclass to remain within the subclass, by settingcls.factory = cls.- Parameters:
cls – Some subclass of
Arrow.
Note
The factory method pattern (FMP) is used all over DisCoPy. For backward compatibility, the factory is also available as the class property
cls.ar, seediscopy.abc.Category.Example
Let’s create
Circuitas a subclass ofArrowwith anObsubclassQubitas domain and codomain.>>> from discopy.cat import Ob, Arrow, Box >>> class Qubit(Ob): ... pass >>> @factory ... class Circuit(Arrow): ... ob = Qubit
The
Circuitsubclass itself has a subclassGateas boxes.>>> class Gate(Box, Circuit): ... pass
The identity and composition of
Circuitis again aCircuit.>>> X = Gate('X', Qubit(), Qubit()) >>> assert isinstance(X >> X, Circuit) >>> assert isinstance(Circuit.id(), Circuit) >>> assert isinstance(Circuit.id().dom, Qubit) >>> assert Circuit.factory is Circuit.ar is Circuit