
A Discopy é um kit de ferramentas Python para computação com diagramas de cordas.
A discopy começou como uma implementação do Discocat e do QNLP. Isso agora se tornou sua própria biblioteca: Lambeq.
Arrow para categorias de punhal livre com somas formais, operadores unários e variáveis simbólicas da SympyDiagram para diagramas de cordas planas em qualquer categoria (pré) monoidal na hierarquia de linguagens gráficas (com tranças, torções, aranhas, etc.)Hypergraph para diagramas de cordas em categorias de hipergrafos e suas restrições às categorias simétricas, rastreadas, compactas e de MarkovFunctor em:Este exemplo é inspirado no post de Pawel Sobocinski, Crema Di Mascarpone e Raciocínio Diagramático.
from discopy . symmetric import Ty as Ingredient , Box as Step , Diagram as Recipe
egg , white , yolk = Ingredient ( "egg" ), Ingredient ( "white" ), Ingredient ( "yolk" )
crack = Step ( "crack" , egg , white @ yolk )
merge = lambda x : Step ( "merge" , x @ x , x )
# DisCoPy allows string diagrams to be defined as Python functions
@ Recipe . from_callable ( egg @ egg , white @ yolk )
def crack_two_eggs ( left_egg , right_egg ):
left_white , left_yolk = crack ( left_egg )
right_white , right_yolk = crack ( right_egg )
return ( merge ( white )( left_white , right_white ),
merge ( yolk )( left_yolk , right_yolk ))
# ... or in point-free style using parallel (@) and sequential (>>) composition
assert crack_two_eggs == crack @ crack
>> white @ Recipe . swap ( yolk , white ) @ yolk
>> merge ( white ) @ merge ( yolk )
crack_two_eggs . draw ()
pip install discopySe você quiser ver a discopy em ação, consulte o tutorial do QNLP!
Estamos ansiosos para receber novos colaboradores!
Primeiro, leia as diretrizes contribuintes. Em seguida, entre em contato com a discórdia ou abra um problema.
Se você usou a discopy no contexto de uma publicação acadêmica, sugerimos que você cite:
Se, além disso, seu trabalho estiver relacionado à computação quântica, você também pode citar:
Se você usar algum dos recursos recentes (por exemplo, Hypergraph ), também deve mencionar: