Skip to content

Commit

Permalink
turn one function into an iterator + other minor details
Browse files Browse the repository at this point in the history
  • Loading branch information
fchapoton authored and spj101 committed Jul 15, 2024
1 parent 081c9af commit cf6b778
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 19 deletions.
16 changes: 10 additions & 6 deletions pySecDec/decomposition/geometric.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'''
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -226,7 +231,6 @@ def make_sector(cone_indices, cone):

return subsector


for cone_indices in incidence_lists.values():
cone = transformation[:,cone_indices].T

Expand All @@ -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
Expand Down
13 changes: 5 additions & 8 deletions pySecDec/decomposition/splitting.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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 ****************************

Expand Down
10 changes: 5 additions & 5 deletions pySecDec/decomposition/test_splitting.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit cf6b778

Please sign in to comment.