Skip to content

Commit 89c8536

Browse files
eric-wieserutensil
authored andcommitted
Extract a helper function from metric_symbols_list (#92)
This should address some CI warnings about deeply nested functions
1 parent bad5db8 commit 89c8536

File tree

1 file changed

+20
-26
lines changed

1 file changed

+20
-26
lines changed

galgebra/metric.py

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,21 @@ def dot_orthogonal(V1, V2, g=None):
305305
raise ValueError('In dot_orthogonal dimension of metric ' +
306306
'must equal dimension of vector')
307307

308+
def _build_metric_element(self, s, i1, i2):
309+
""" Build an element for the metric of `bases[i1] . basis[i2]` """
310+
if s == '#':
311+
if i1 <= i2: # for default element ensure symmetry
312+
return Symbol('(' + str(self.basis[i1]) +
313+
'.' + str(self.basis[i2]) + ')', real=True)
314+
else:
315+
return Symbol('(' + str(self.basis[i2]) +
316+
'.' + str(self.basis[i1]) + ')', real=True)
317+
elif '/' in s: # element is fraction
318+
num, dem = s.split('/')
319+
return Rational(num, dem)
320+
else: # element is integer
321+
return Rational(s)
322+
308323
def metric_symbols_list(self, s=None): # input metric tensor as string
309324
"""
310325
rows of metric tensor are separated by "," and elements
@@ -325,16 +340,8 @@ def metric_symbols_list(self, s=None): # input metric tensor as string
325340
if n_rows == 1: # orthogonal metric
326341
m_lst = s.split(' ')
327342
m = []
328-
for (s, base) in zip(m_lst, self.basis):
329-
if s == '#':
330-
s_symbol = Symbol('(' + str(base) + '.' + str(base) + ')', real=True)
331-
else:
332-
if '/' in s:
333-
[num, dem] = s.split('/')
334-
s_symbol = Rational(num, dem)
335-
else:
336-
s_symbol = Rational(s)
337-
m.append(s_symbol)
343+
for i, s in enumerate(m_lst):
344+
m.append(self._build_metric_element(s, i, i))
338345

339346
if len(m) != self.n:
340347
raise ValueError('Input metric "' + s + '" has' +
@@ -360,23 +367,10 @@ def metric_symbols_list(self, s=None): # input metric tensor as string
360367
if n != self.n:
361368
raise ValueError('Input metric "' + s + '" has' +
362369
' different rank than bases "' + str(self.basis) + '"')
363-
n_range = list(range(n))
364-
for (row, i1) in zip(m_lst, n_range):
370+
for i1, row in enumerate(m_lst):
365371
row_symbols = []
366-
for (s, i2) in zip(row, n_range):
367-
if s == '#':
368-
if i1 <= i2: # for default elment insure symmetry
369-
row_symbols.append(Symbol('(' + str(self.basis[i1]) +
370-
'.' + str(self.basis[i2]) + ')', real=True))
371-
else:
372-
row_symbols.append(Symbol('(' + str(self.basis[i2]) +
373-
'.' + str(self.basis[i1]) + ')', real=True))
374-
else:
375-
if '/' in s: # element is fraction
376-
[num, dem] = s.split('/')
377-
row_symbols.append(Rational(num, dem))
378-
else: # element is integer
379-
row_symbols.append(Rational(s))
372+
for i2, s in enumerate(row):
373+
row_symbols.append(self._build_metric_element(s, i1, i2))
380374
m.append(row_symbols)
381375
m = Matrix(m)
382376
return m

0 commit comments

Comments
 (0)