Hello everyone. I’ll do it quick, ’cause I’m really tired, and by the way, today… Feb. 8th, I’m turning 30 years old 🙂

First of all, I create a page in my google site for the GRmodule files. Note that the name is GRmodule and not GR-module, because the dash is not admissible in a module name (beginner mistake!)

#### In the last post…

The *Metric* class was defined, and the first steps of the implementation were walked.

## Inverting the metric

Once the components of the metric are given, one can call the *invert* method for assigning the inverse of the metric. Don’t know why, but I’d like to keep track of what’s going on! so, I change a little bit the code from Sergei, and my invert method returns the inverse metric tensor,

```
def invert(self):
'''Find the inverse of the metric and store the result in a
Metric object self.inverse'''
'''Create a unit matrix of dimension dim'''
temp = sympy.eye(self.dim)
'''Assign the values of the metric to temp'''
for key in self.components.keys():
id = tuple(np.abs(key))
temp[id] = self.components[key]
'''invert the matrix with inv() from sympy'''
inv = temp.inv()
'''convert the matrix in a dictionary'''
inverse = self._dictkeycopy(self.components)
for i in range(self.dim):
for j in range(self.dim):
inverse[i,j] = inv[i,j]
self.inverse = Metric(self.coord,rank=(2,0),sh=(1,1),symbol='g_inv')
self.inverse.components = inverse
return self.inverse
```

First a temporal matrix is created, and just for assuring it’s invertible, one creates a unit matrix of dimension *dim*. That’s what the **sympy.eye** does!

Secondly, the values of the metric are assigned to *temp*.

The temp matrix is inverted. The sympy command to inver a matrix is **inv**.

Next, the inverse matrix is converted in a dictionary (just like in previous cases).

Finally, the characteristic of tensor is given to the inverse matrix object… and it’s returned!, i.e., it can be assigned.

In the implementation file the components of the metric are assigned, the metric is invert… and the result of the inversion is printed.

### How to run it?!

` cd path/to/GR`

` $ python Proof-GR-module.py > Result.txt`

`$ emacs Result.txt `

Enjoy life!

DOX

Happy B-day to me!!! 🙂

on February 8, 2011 at 4:13 am |Ondřej ČertíkHi,

you can also try the relativity module that I wrote for sympy, it’s in the examples directory, here is a sample output:

I just noticed the final solve() fails in the latest sympy, so I reported it:

http://code.google.com/p/sympy/issues/detail?id=2180

anyway, if you are interested in this, feel free to get in touch with us on the sympy mailinglist (see sympy.org). You could for example contribute a GR module into SymPy, so far it’s only an example. That way, a lot more people could use it.

Happy birthday!

Ondrej

on February 8, 2011 at 5:34 am |doxdrumHi Ondrej:

Than you for your comment! I saw the links you posted, and looks great! But I found the output of the GR calculation, and not the source python file.

The other thing is that in the sympy documentation there is a section about Geometric algebra… quite wonderful, but I found nothing about differential geometry.

Finally, I’ll add your list to my feeds 😉 for keeping the contact!

Thank you for the contribution and the congraz! 🙂

on February 8, 2011 at 5:58 amOndřej ČertíkHi Oscar,

the source file is in the sympy git repository (should be also in the tarballs):

https://github.com/sympy/sympy/blob/master/examples/advanced/relativity.py

there is nothing about differential geometry, because nobody wrote it yet. The only code + documentation is in the relativity.py file. As I said, if you are interested in writing a GR module (+some docs), that’d be really awesome. I would help you as I can.

Feel free to ask on our mailinglist if you run into any problems with sympy.

Ondrej

on February 8, 2011 at 6:27 amdoxdrumAwesome!!! THX Ondrej!

I’ll keep you posted.