Jupyter para .NET. "Como em python"

Há alguns meses, a Microsoft falou sobre o Jupyter em .NET. Mas há muito pouca atividade neste tópico, e o tópico é muito interessante. Mas o que é legal de se pensar? Decidi fazer uma derivação conveniente da classe Entityda biblioteca de álgebra simbólica:







Parece mais legal do que em python. É feito de forma simples, é muito divertido. Convido você sob o corte!



Sobre Jupyter



É como um IDE para criar cadernos interativos. Em vez de executar todo o código de uma vez em ambientes familiares, aqui você o executa em partes, salvando os estados das variáveis. É muito conveniente para pesquisas e scripts simples “calcular algo”.



Sobre dotnet / interativo



Este projeto apenas permite que você insira Dotnet em Júpiter. Ou seja, você pode literalmente escrever



E obter os resultados do código imediatamente.



E alguns dos chips funcionam fora da caixa





Sobre AngouriMath



É uma biblioteca de álgebra simbólica relativamente pequena para .NET para trabalhar com expressões matemáticas. Claro, você pode trabalhar com expressões matemáticas em uma linha, mas isso nem sempre é conveniente / bonito.



Todas as expressões matemáticas de uma forma ou de outra herdam de uma classe Entityque possui um método Latexiseque retorna uma string. Portanto, tudo o que resta é representá-lo.



Incorporando latech



Temos a capacidade de registrar nossa própria inferência para nossos tipos, que é o que eu faço:



let magic() =
    let register (value : ILatexiseable) = $@"
            <script src='https://polyfill.io/v3/polyfill.min.js?features=es6'></script>
            <script id='MathJax-script' async src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>
            \[{value.Latexise()}\]
            "

    Formatter.Register<ILatexiseable>(register, "text/html")


(Habr por algum motivo não suporta F #)



Ou seja, simplesmente registramos que o tipo ILatexiseabledeve ser mostrado no formato html, e o próprio código será gerado por nossa função. Para renderizar, usei o MathJax, embora provavelmente faça sentido armazenar o script js em cache, mas isso é para atualizações futuras.



Bem, isso é tudo, agora todas as expressões herdadas dessa interface serão lindamente renderizadas. É assim que fica em C #:







O que exatamente está acontecendo aqui?
1. extension- ToEntity(),

2.

3.





Como Júpiter se destina a pequenos pedaços de código que não precisam seguir nenhum requisito de design, F # é mais adequado para isso. Portanto, como fica claro na captura de tela no início do artigo, também é compatível. Por exemplo, é assim que a solução para a equação da escola se parece:







Planos futuros



Sou um grande fã do .NET, mas também adoro o Jupyter. Portanto, Interactive me deixou muito feliz e me apressei em fazer o suporte interativo para AngouriMath para exibir expressões em LaTeX. Mas além disso - mais interessante. Estou pensando em fazer algo do tipo Entity.Plot()que exibiria imediatamente o gráfico da função. Para casos de uso simples, a coisa é realmente necessária, eu acho.



Se quiser experimentar sem instalar nada do necessário, você pode dar uma olhada aqui: (alarme: por algum motivo demora muito para carregar, você terá que esperar)



Obrigado pela atenção! Essa é uma nota curta.



Links



1. Jupyter - um ambiente de navegador conveniente para programação interativa

2. .NET Interactive - algo muito brilhante graças ao qual você pode usar o dotnet no Jupiter

3. AngouriMath - uma biblioteca matemática para a qual escrevi um wrapper para latech

4. MyBinder - uma demonstração para preguiçosos



All Articles