From cc668395806e6dd05f38e4bf677bc540b06a8639 Mon Sep 17 00:00:00 2001 From: sofia_ov Date: Wed, 26 Jun 2019 20:56:07 +0200 Subject: [PATCH] Modify Ricci Tensor from christoffel method and add from riemann. Fix indentation --- .gitignore | 2 +- src/einsteinpy/symbolic/ricci.py | 39 ++++++++----- src/einsteinpy/symbolic/tensor.py | 2 +- src/einsteinpy/symbolic/vaccum_metrics.py | 58 ++++++++----------- .../test_symbolic/test_vaccum_metrics.py | 3 +- 5 files changed, 51 insertions(+), 53 deletions(-) diff --git a/.gitignore b/.gitignore index a1daf14dd..306c866d0 100644 --- a/.gitignore +++ b/.gitignore @@ -30,7 +30,7 @@ docs/_build # Pycharm editor project files .idea - +# for virtual environment venv/ # Floobits project files diff --git a/src/einsteinpy/symbolic/ricci.py b/src/einsteinpy/symbolic/ricci.py index f0eada6fb..c3fe64167 100644 --- a/src/einsteinpy/symbolic/ricci.py +++ b/src/einsteinpy/symbolic/ricci.py @@ -1,8 +1,8 @@ import numpy as np import sympy -from .tensor import Tensor from .metric import MetricTensor +from .tensor import Tensor class RicciTensor(Tensor): @@ -43,25 +43,23 @@ def from_christoffels(cls, chris): Parameters ---------- - chris : ~einsteinpy.symbolic.ricci.RicciTensor + chris : ~einsteinpy.symbolic.christoffel.ChristoffelSymbols Christoffel Symbols from which Ricci Tensor to be calculated """ arr, syms = chris.tensor(), chris.symbols() dims = len(syms) - ricci_list = (np.zeros(shape=(dims, dims, dims, dims), dtype=int)).tolist() - for i in range(dims ** 4): - # t,s,r,n each goes from 0 to (dims-1) - # hack for codeclimate. Could be done with 4 nested for loops - n = i % dims + ricci_list = (np.zeros(shape=(dims, dims), dtype=int)).tolist() + for i in range(dims ** 2): + # r,t each goes from 0 to (dims-1) + # hack for codeclimate. Could be done with 2 nested for loops r = (int(i / dims)) % (dims) - s = (int(i / (dims ** 2))) % (dims) - t = n + t = (int(i / (dims ** 1))) % (dims) - temp = sympy.diff(arr[t, s, n], syms[r]) - sympy.diff(arr[t, r, n], syms[s]) + temp = sympy.diff(arr[t], syms[r]) for p in range(dims): - temp += arr[p, s, n] * arr[t, p, r] - arr[p, r, n] * arr[t, p, s] - ricci_list[t][s][r][n] = sympy.simplify(temp) + temp += arr[p, r, p, t] + ricci_list[t][r] = sympy.simplify(temp) return cls(ricci_list, syms) @classmethod @@ -71,13 +69,26 @@ def from_metric(cls, metric): Parameters ---------- - metric : ~einsteinpy.symbolic.ricci.RicciTensor - Ricci Tensor + metric : ~~einsteinpy.symbolic.metric.MetricTensor + Metric Tensor """ rc = RicciTensor.from_metric(metric) return cls.from_christoffels(rc) + @classmethod + def from_riemann(cls, riemann): + """ + Get Ricci Tensor calculated from a Metric Tensor + + Parameters + ---------- + metric : ~~einsteinpy.symbolic.metric.MetricTensor + Metric Tensor + + """ + return cls(sympy.tensorcontraction(riemann.tensor(), (0, 2)), riemann.syms) + def symbols(self): """ Returns the symbols used for defining the time & spacial axis diff --git a/src/einsteinpy/symbolic/tensor.py b/src/einsteinpy/symbolic/tensor.py index ac45f2e7b..6cd154baa 100644 --- a/src/einsteinpy/symbolic/tensor.py +++ b/src/einsteinpy/symbolic/tensor.py @@ -1,6 +1,7 @@ import numpy as np import sympy + class Tensor: """ Base Class @@ -12,7 +13,6 @@ def __getitem__(self, index): def __setitem__(self, index, value): self.arr[index] = value - def __init__(self, arr): """ Constructor and Initializer diff --git a/src/einsteinpy/symbolic/vaccum_metrics.py b/src/einsteinpy/symbolic/vaccum_metrics.py index 76f7cbdd6..bfe5b3326 100644 --- a/src/einsteinpy/symbolic/vaccum_metrics.py +++ b/src/einsteinpy/symbolic/vaccum_metrics.py @@ -3,21 +3,18 @@ from .metric import MetricTensor -def SchwarzschildMetric(symbolstr="t r theta phi" ): +def SchwarzschildMetric(symbolstr="t r theta phi"): """ - Returns Metric Tensor of symbols of Schwarzschild Metric. - - Parameters - ---------- - symbolstr : string + Returns Metric Tensor of symbols of Schwarzschild Metric. + Parameters + ---------- + symbolstr : string symbols to be used to define schwarzschild space, defaults to 't r theta phi' - - Returns - ------- - Metric Tensor - - - """ + Returns + ------- + ~einsteinpy.symbolic.metric.MetricTensor + Metric Tensor for Schwarzschild space-time + """ list2d = [[0 for i in range(4)] for i in range(4)] syms = sympy.symbols(symbolstr) c, a = sympy.symbols("c a") @@ -31,18 +28,16 @@ def SchwarzschildMetric(symbolstr="t r theta phi" ): def KerrMetric(symbolstr="t r theta phi"): """ - Returns Metric Tensor of symbols of Kerr metric(BL coordinates) in Plank units : G=1, c=1. - - Parameters - ---------- - symbolstr : string - symbols to be used to define kerr space in BL coordinates, defaults to 't r theta phi' - - Returns - ------- - Metric Tensor - - """ + Returns Metric Tensor of symbols of Kerr metric(BL coordinates) in Plank units : G=1, c=1. + Parameters + ---------- + symbolstr : string + symbols to be used to define kerr space in BL coordinates, defaults to 't r theta phi' + Returns + ------- + ~einsteinpy.symbolic.metric.MetricTensor + Metric Tensor for Kerr space-time + """ list2d = [[0 for i in range(4)] for i in range(4)] syms = sympy.symbols(symbolstr) a, R = sympy.symbols("a R") @@ -52,16 +47,9 @@ def KerrMetric(symbolstr="t r theta phi"): list2d[1][1] = sigma / A list2d[2][2] = sigma list2d[3][3] = ( - (sympy.sin(syms[2]) ** 2) - * ( - (a ** 2 + syms[1] ** 2) ** 2 - - (a ** 2) * (A * (sympy.sin(syms[2]) ** 2)) - ) - ) / sigma + (sympy.sin(syms[2]) ** 2) + * ((a ** 2 + syms[1] ** 2) ** 2 - (a ** 2) * (A * (sympy.sin(syms[2]) ** 2))) + ) / sigma list2d[3][0] = -1 * (R * a * (syms[1])) * (sympy.sin(syms[2]) ** 2) / sigma list2d[0][3] = list2d[3][0] return MetricTensor(list2d, syms) - - - - diff --git a/src/einsteinpy/tests/test_symbolic/test_vaccum_metrics.py b/src/einsteinpy/tests/test_symbolic/test_vaccum_metrics.py index aca8e112e..92240bf83 100644 --- a/src/einsteinpy/tests/test_symbolic/test_vaccum_metrics.py +++ b/src/einsteinpy/tests/test_symbolic/test_vaccum_metrics.py @@ -1,7 +1,7 @@ import numpy as np import sympy -from einsteinpy.symbolic import vaccum_metrics, MetricTensor +from einsteinpy.symbolic import MetricTensor, vaccum_metrics def schwarzschild_metric(): @@ -16,4 +16,3 @@ def kerr_metric(): syms = sympy.symbols(symbolstr) sch = vaccum_metrics.KerrMetric(syms) return sch -