Symbolic differential geometry on Julia

I like Pluto.jl reactive notebook paradigm and I miss it when I use Python for symbolic work on differential geometry. More precisely, I use the SageManifolds package. I am looking for an alternative workflow on Julia. I work on applied differential geometry (mainly on classical mechanics and thermodynamics). My needs are

  • Local differential geometry: working on one chart with local coordinates is enough for me, I do not need multiple coordinate patches. An easy way to compute changes of coordinates would be nice, but it is not a must.
  • Ability to define symbolic functions, tensor fields, vector fields and forms on the manifold.
  • Cartan calculus for vector fields and differential forms: ability to take Lie derivatives, exterior differentials and contractions.
  • Basic ability to simplify expressions and substitute variables.

I have looked to the following packages:

  • Symbolics.jl: seems to provide enough symbolic capabilities for my needs, but it lacks the geometric definitions I am looking for. I think it might be combined with another package.
  • Manifolds.jl: I find this package a little bit confusing. It seems to be developed with applications on optimization and numerics in mind. Apparently it does not work with the usual geometric definition of manifolds based on atlases, but it works with a more analytic definition of smooth subsets of \mathbb{R}^n (specially matrix manifolds), which makes it hard to use it for my purposes. It also assumes that all manifolds have a metric, which is not true for the applications I have in mind. After a quick look on the documentation I do not find a way to compute Lie derivatives or define tensor fields.
  • There are many tensor packages, but as far as I see, no one distinguishes covariant (forms) and contravariant (multivector fields) asymmetric tensors.

I would like to know if somebody uses Julia for doing computations on differential geometry, and which packages/workflow he uses. I might have overlooked some functionality on the packages I have mentioned or missed some interesting package.

I don’t think it’s all together yet, but it would be a great thing to build on Symbolics.jl! We should chat in the Zulip and figure out exactly how to build it.


I’ve been playing with Symbolics.jl and it looks very promising. Probably, when it is more mature I will be able to switch to Julia full time.

I would be very happy to give feedback about my usecase and the functionality I think it is missing. However I think that the package is on very early stages and you probably have more urgent priorities than implementing a differential geometry framework.