Skip to content

Commit bdc7795

Browse files
committed
Added return_value for naive derivative
1 parent 5dedf9f commit bdc7795

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

darmonpoints/schottky.py

+28-23
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from copy import copy, deepcopy
22
from itertools import chain
3+
from math import e
34

45
from sage.categories.groups import Groups
56
from sage.combinat.rooted_tree import LabelledRootedTree as LTR
@@ -244,42 +245,36 @@ def theta_naive(self, m, a=ZZ(0), b=ZZ(1), z=None, gamma=None, **kwargs):
244245
return num / den
245246

246247
def theta_derivative_naive(
247-
self, m, a, b, z=None, max_length=-1, base_field=None, s=None
248+
self, m, a, b, z=None, max_length=-1, base_field=None, s=None, return_value=False
248249
):
249250
if s is not None:
250-
A = self.theta_naive(
251-
m, a, b, z=z, max_length=max_length, base_field=base_field
251+
Ap, A = self.theta_derivative_naive(
252+
m, a, b, z=z, max_length=max_length, base_field=base_field, s=None, return_value=True
252253
)
253-
B = self.theta_naive(
254+
Bp, B = self.theta_derivative_naive(
254255
m,
255256
act(s, a),
256257
act(s, b),
257258
z=z,
258259
max_length=max_length,
259260
base_field=base_field,
261+
s=None, return_value=True
260262
)
261-
Ap = self.theta_derivative_naive(
262-
m, a, b, z=z, max_length=max_length, base_field=base_field, s=None
263-
)
264-
Bp = self.theta_derivative_naive(
265-
m,
266-
act(s, a),
267-
act(s, b),
268-
z=z,
269-
max_length=max_length,
270-
base_field=base_field,
271-
s=None,
272-
)
273-
return Ap * B + A * Bp
263+
if return_value:
264+
return Ap * B + A * Bp, A * B
265+
else:
266+
return Ap * B + A * Bp
274267

275268
num = 1
276269
den = 1
277-
278270
second_term = 0
279271
old_ans = 1
280272
val = 0
273+
can_stop = False
281274
for i in NN:
282275
verbose(f"{i = }")
276+
if i > 2 and max_length == -1:
277+
can_stop = True
283278
for _, g in self.enumerate_group_elements(i):
284279
ga = act(g, a)
285280
gb = act(g, b)
@@ -289,14 +284,24 @@ def theta_derivative_naive(
289284
den *= new_den
290285
new_second_term = (ga - gb) / (new_num * new_den)
291286
second_term += new_second_term
287+
try:
288+
tmp1 = (new_num / new_den - 1).valuation()
289+
tmp1val = tmp1.valuation()
290+
except TypeError:
291+
val = -Infinity
292+
tmp1val = 0
293+
if val < m - tmp1val:
294+
can_stop = False
292295
new_ans = (num / den) * second_term
293-
if i == max_length or (
294-
i > 0 and val >= (new_ans / old_ans - 1).valuation()
295-
):
296-
break
297296
old_ans = new_ans
298297
val = (new_ans / old_ans - 1).valuation()
299-
return new_ans.add_bigoh(val + new_ans.valuation())
298+
if can_stop:
299+
break
300+
new_ans.add_bigoh(val + new_ans.valuation())
301+
if return_value:
302+
return new_ans, num / den
303+
else:
304+
return new_ans
300305

301306

302307
class PreSchottkyGroup(SchottkyGroup_abstract):

0 commit comments

Comments
 (0)