Jupyter para .NET. "Como en Python"

Hace unos meses Microsoft habló de Jupyter en .NET. Pero hay muy poca actividad sobre este tema y el tema es muy interesante. Pero, ¿en qué es genial pensar? Decidí hacer una derivación conveniente de la clase a Entitypartir de la biblioteca de álgebra simbólica: se







ve mejor que en Python. Se hace de forma sencilla, es muy divertido. ¡Te invito bajo el corte!



Sobre Jupyter



Es como un IDE para crear cuadernos interactivos. En lugar de ejecutar todo el código a la vez en sus entornos habituales, aquí lo ejecuta en fragmentos, guardando los estados de las variables. Es muy conveniente para la investigación y los scripts simples "calcular algo".



Acerca de dotnet / interactive



Este proyecto solo le permite incrustar Dotnet en Jupiter. Es decir, puede escribir literalmente



Y obtener los resultados del código de inmediato.



Y algunos de los chips funcionan fuera de la caja





Acerca de AngouriMath



Es una biblioteca de álgebra simbólica relativamente pequeña para .NET para trabajar con expresiones matemáticas. Por supuesto, puede trabajar con expresiones matemáticas en una línea, pero esto no siempre es conveniente / atractivo.



Todas las expresiones matemáticas de alguna manera heredan de una clase Entityque tiene un método Latexiseque devuelve una cadena. Por lo tanto, todo lo que queda es rendirlo.



Incrustar latech



Tenemos la capacidad de registrar nuestra propia inferencia para nuestros tipos, que es lo que hago:



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 alguna razón no admite F #)



Es decir, simplemente registramos que el tipo ILatexiseabledebe mostrarse en formato html, y el código en sí será generado por nuestra función. Para renderizar, tomé MathJax, aunque probablemente tenga sentido almacenar en caché el script js, pero esto es para futuras actualizaciones.



Bueno, eso es todo, ahora todas las expresiones heredadas de esta interfaz estarán bellamente renderizadas. Así es como se ve en C #:







Qué está pasando aquí?
1. extension- ToEntity(),

2.

3.





Dado que Jupiter está diseñado para pequeños fragmentos de código que no tienen que seguir ningún requisito de diseño, F # es más adecuado para esto. Por lo tanto, como se desprende de la captura de pantalla al principio del artículo, también es compatible. Por ejemplo, la solución de la ecuación de la escuela se ve así:







Planes futuros



Soy un gran admirador de .NET, pero también me encanta Jupyter. Por lo tanto, Interactive me hizo muy feliz y me apresuré a hacer soporte Interactive para AngouriMath para mostrar expresiones en LaTeX. Pero además, más interesante. Estoy pensando en hacer algo del tipo Entity.Plot()que mostraría inmediatamente el gráfico de la función. Para casos de uso simples, creo que la cosa es realmente necesaria.



Si quieres probar sin instalar nada de lo necesario, puedes hurgar por aquí: (alarma: por alguna razón tarda mucho en cargar, tendrás que esperar) ¡



Gracias por tu atención! Esa es una nota corta.



Enlaces



1. Jupyter : un entorno de navegador conveniente para la programación interactiva

2. .NET Interactive : lo más brillante, gracias al cual puedes usar dotnet en Jupiter

3. AngouriMath : una biblioteca matemática para la que escribí un contenedor para latech

4. MyBinder : una demostración para los perezosos



All Articles