From cf6b77808ed1fd77b4ff701151009f3ca3f4b8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Chapoton?= Date: Wed, 29 May 2024 09:06:15 +0200 Subject: [PATCH] turn one function into an iterator + other minor details --- pySecDec/decomposition/geometric.py | 16 ++++++++++------ pySecDec/decomposition/splitting.py | 13 +++++-------- pySecDec/decomposition/test_splitting.py | 10 +++++----- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/pySecDec/decomposition/geometric.py b/pySecDec/decomposition/geometric.py index 882172ca..9302ea35 100644 --- a/pySecDec/decomposition/geometric.py +++ b/pySecDec/decomposition/geometric.py @@ -35,9 +35,12 @@ def Cheng_Wu(sector, index=-1): Jacobian = sector.Jacobian.replace(index, 1, remove) other = [poly.replace(index, 1, remove) for poly in sector.other] - cast = [Product( *(product.factors[i].replace(index, 1, remove) for i in (0,1)) ) for product in sector.cast] + cast = [Product( *(product.factors[i].replace(index, 1, remove) + for i in (0, 1)) ) + for product in sector.cast] return Sector(cast, other, Jacobian) + # ********************** geometric decomposition ********************** def generate_fan(*polynomials): r''' @@ -82,6 +85,7 @@ def generate_fan(*polynomials): fan.append(cone) return fan + def transform_variables(polynomial, transformation, polysymbols='y'): r''' Transform the parameters :math:`x_i` of a @@ -122,6 +126,7 @@ def transform_variables(polynomial, transformation, polysymbols='y'): outpoly.number_of_variables = number_of_new_variables return outpoly + def geometric_decomposition(sector, indices=None, normaliz=None, workdir='normaliz_tmp'): ''' Run the sector decomposition using the geomethod @@ -226,7 +231,6 @@ def make_sector(cone_indices, cone): return subsector - for cone_indices in incidence_lists.values(): cone = transformation[:,cone_indices].T @@ -237,15 +241,15 @@ def make_sector(cone_indices, cone): assert len(triangular_cones.shape) == 3 for i, triangular_cone in enumerate(triangular_cones): - triangular_cone_indices = [] - for vector in triangular_cone: - # find the indices of the vectors defining the triangular cone - triangular_cone_indices.append(int( np.where( (vector == transformation.T).all(axis=1) )[0] )) + # find the indices of the vectors defining the triangular cone + triangular_cone_indices = [int( np.where( (vector == transformation.T).all(axis=1) )[0] ) + for vector in triangular_cone] yield make_sector(triangular_cone_indices, triangular_cone) else: yield make_sector(cone_indices, cone) + def geometric_decomposition_ku(sector, indices=None, normaliz=None, workdir='normaliz_tmp'): ''' Run the sector decomposition using the original geometric diff --git a/pySecDec/decomposition/splitting.py b/pySecDec/decomposition/splitting.py index 4b53b546..bc9b2d0b 100644 --- a/pySecDec/decomposition/splitting.py +++ b/pySecDec/decomposition/splitting.py @@ -73,6 +73,7 @@ def remap_one_to_zero(polynomial, *indices): return remapped_polynomial + def find_singular_sets_at_one(polynomial): ''' Find all possible sets of parameters such that the `polynomial`'s @@ -84,7 +85,7 @@ def find_singular_sets_at_one(polynomial): >>> from pySecDec.decomposition.splitting import find_singular_sets_at_one >>> polysymbols = ['x0', 'x1'] >>> poly = Polynomial.from_expression('1 - 10*x0 - x1', polysymbols) - >>> find_singular_sets_at_one(poly) + >>> list(find_singular_sets_at_one(poly)) [(1,)] :param polynomial: @@ -93,19 +94,15 @@ def find_singular_sets_at_one(polynomial): ''' # ignore parameters that do not appear - indices_to_consider = [] - for i in range(polynomial.number_of_variables): - if (polynomial.expolist[:,i] != 0).any(): - indices_to_consider.append(i) + indices_to_consider = [i for i in range(polynomial.number_of_variables) + if (polynomial.expolist[:,i] != 0).any()] - singular_sets = [] for singular_set in powerset(indices_to_consider): poly_copy = polynomial.copy() poly_copy.expolist[:,singular_set] = 0 poly_copy.simplify() if ( not poly_copy.has_constant_term() ) or ( len(poly_copy.coeffs) == 1 and poly_copy.coeffs[0] == 0 ): - singular_sets.append(singular_set) - return singular_sets + yield singular_set # **************************** split **************************** diff --git a/pySecDec/decomposition/test_splitting.py b/pySecDec/decomposition/test_splitting.py index f36ede8e..51639337 100644 --- a/pySecDec/decomposition/test_splitting.py +++ b/pySecDec/decomposition/test_splitting.py @@ -88,19 +88,19 @@ class TestFindSingularSetsAtOne(unittest.TestCase): #@pytest.mark.active def test_find_singular_sets_at_one_empty(self): poly = Polynomial.from_expression('x0 - x1', ['x0','x1']) - singular_set = find_singular_sets_at_one(poly) + singular_set = list(find_singular_sets_at_one(poly)) self.assertEqual(singular_set, [tuple(),(0,1)]) #@pytest.mark.active def test_find_singular_sets_at_one_simple(self): poly = Polynomial.from_expression('1 - x0 + x1', ['x0','x1']) - singular_set = find_singular_sets_at_one(poly) + singular_set = list(find_singular_sets_at_one(poly)) self.assertEqual(singular_set, [(0,)]) #@pytest.mark.active def test_find_singular_sets_at_one_medium(self): poly = Polynomial.from_expression('2 - x0 + a*x1**2*x5**4 - x3*x0**8', ['x0','x1','x2','x3','x4','x5']) - singular_set = find_singular_sets_at_one(poly) + singular_set = list(find_singular_sets_at_one(poly)) self.assertEqual(singular_set, [(0,3),(0,1,3),(0,3,5)]) #@pytest.mark.active @@ -111,13 +111,13 @@ def test_find_singular_sets_at_one_complicated(self): + (s)*x0*x1**2*x3**2 + (s)*x1*x3*x4 + (s)*x1*x3 + (s)*x2*x3*x4 \ + (s)*x2*x3 + (s)*x1*x3**2*x4 + (s)*x1*x3**2 poly = Polynomial.from_expression(poly, ['x0','x1','x2','x3','x4','x5']) - singular_set = find_singular_sets_at_one(poly) + singular_set = list(find_singular_sets_at_one(poly)) self.assertEqual(singular_set, [(2,3),(0,2,3),(2,3,4),(0,2,3,4)]) #@pytest.mark.active def test_find_singular_sets_only_at_one(self): poly = Polynomial.from_expression('2 - x0 - x2*x0**8', ['x0','x1','x2']) - singular_set = find_singular_sets_at_one(poly) + singular_set = list(find_singular_sets_at_one(poly)) self.assertEqual(singular_set, [(0,2)]) #@pytest.mark.active