A few months ago Microsoft announced about the creation of Jupyter for .NET. However, people are barely interested in it despite how attractive the topic is. I decided to make a LaTeX wrapper for the
Looks awesome. Is simple. Very enjoyable. Let's see more!
It's some kind of IDE for interactive notebooks. Instead of execucting the whole code, you can interact with it by executing some parts of it, preserving the variables' values. It's very convenient for research and simple everyday scripts for whatever needs.
This is what allows us to use .NET inside Jupyter. You can literally write like this
and see the results immediately, without rerunning the whole code.
There are some features without any additional overhead:
It's a symbolic algebra library for .NET for working with mathematical expressions. One surely could work with them in-line, like we normally work with them in the code, but it's still inconvenient.
All mathematical expressions in this library inherit from
We can register our own, custom output for any type. That is how I did it:
That is, we register type
Now all classes inhereting from
As long as Jupyter is more about small pieces of code without following any OOP or other industrial principles, F# is best suited for it. That is why it also supported, let me show an example of a school-level equation, solved via this triplet of technologies:
I'm a big fan of .NET, but I also love Jupyter. That is why the creation of Interactive was an amazing event for me, so I made a wrapper supporting Interactive for AngouriMath for LaTeX output.
Now I think of creating something lke
and get the graph immediately. In my opinion, it can be a useful feature for simple use-cases.
If you want to try it without installation, try this: (for some reason, it's quite slow, so you will have to wait)
Thank you for your attention! Hope you liked this mini-article.
1. Jupyter — Interactive IDE for research & creating notebooks
2. .NET Interactive — Wrapper for .NET allowing to use .NET in Jupyter
3. AngouriMath — Computer algebra library, for which I wrote a wrapper for LaTeX
4. MyBinder — Demo to play
Entity
class from a symbolic algebra library:Looks awesome. Is simple. Very enjoyable. Let's see more!
About Jupyter
It's some kind of IDE for interactive notebooks. Instead of execucting the whole code, you can interact with it by executing some parts of it, preserving the variables' values. It's very convenient for research and simple everyday scripts for whatever needs.
About dotnet/interactive
This is what allows us to use .NET inside Jupyter. You can literally write like this
and see the results immediately, without rerunning the whole code.
There are some features without any additional overhead:
About AngouriMath
It's a symbolic algebra library for .NET for working with mathematical expressions. One surely could work with them in-line, like we normally work with them in the code, but it's still inconvenient.
All mathematical expressions in this library inherit from
Entity
, which has method Latexise
of the string
. We only need render this LaTeX.Injecting LaTeX rendering
We can register our own, custom output for any type. That is how I did it:
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")
That is, we register type
ILatexiseable
to be printed in html which is generated by our function. I use MathJax, a well-known LaTeX rendering library.Now all classes inhereting from
ILatexiseable
will be rendered like this:
Explanation for every block
1. In the first block we call an extension method
2. In the second block we create a system of equations and immediately print out it
3. In the third block we create a matrix and immediately print out it
ToEntity()
, which parses the expression2. In the second block we create a system of equations and immediately print out it
3. In the third block we create a matrix and immediately print out it
As long as Jupyter is more about small pieces of code without following any OOP or other industrial principles, F# is best suited for it. That is why it also supported, let me show an example of a school-level equation, solved via this triplet of technologies:
Further ideas
I'm a big fan of .NET, but I also love Jupyter. That is why the creation of Interactive was an amazing event for me, so I made a wrapper supporting Interactive for AngouriMath for LaTeX output.
Now I think of creating something lke
Entity.Plot()
, which would plot a function's graph. Imagine you write something likeplot "x" 10 12 "x2 + sqrt(x) + e^x"
and get the graph immediately. In my opinion, it can be a useful feature for simple use-cases.
If you want to try it without installation, try this: (for some reason, it's quite slow, so you will have to wait)
Thank you for your attention! Hope you liked this mini-article.
References
1. Jupyter — Interactive IDE for research & creating notebooks
2. .NET Interactive — Wrapper for .NET allowing to use .NET in Jupyter
3. AngouriMath — Computer algebra library, for which I wrote a wrapper for LaTeX
4. MyBinder — Demo to play