@@ -95,6 +95,27 @@ def power_series(self):
95
95
def __call__ (self , D ):
96
96
return self .evaluate (D )
97
97
98
+ def polynomial_approximation (self , z , m ):
99
+ K = self .parent ().base_ring ()
100
+ a , b , c , d = self ._parameter .list ()
101
+ phi = lambda Q : K (a ) / c if Q == Infinity else (a * Q + b ) / (c * Q + d )
102
+ try :
103
+ pt = phi (self .normalize_point )
104
+ pole = - d / c
105
+ # valinf = evalpoly(self._value, pt) * (self.normalize_point - pole)
106
+ except AttributeError :
107
+ pole = None
108
+ # if c == 0:
109
+ # valinf = 1
110
+ # else:
111
+ # valinf = evalpoly(self._value, K(a) / c)
112
+ valinf = 1
113
+ assert pole is None
114
+ fac = (z - pole ) if pole is not None else 1
115
+ phiz = phi (z )
116
+ ans = fac * (sum (a * phiz ** n for n , a in enumerate (self ._value [:m ]))) / valinf
117
+ return ans
118
+
98
119
def evaluate (self , D ): # meromorphic functions
99
120
K = self .parent ().base_ring ()
100
121
if type (D ) in (int , Integer ):
@@ -104,13 +125,14 @@ def evaluate(self, D): # meromorphic functions
104
125
try :
105
126
pt = phi (self .normalize_point )
106
127
pole = - d / c
107
- valinf = evalpoly (self ._value , pt ) * (self .normalize_point - pole )
128
+ # valinf = evalpoly(self._value, pt) * (self.normalize_point - pole)
108
129
except AttributeError :
109
130
pole = None
110
- if c == 0 :
111
- valinf = 1
112
- else :
113
- valinf = evalpoly (self ._value , K (a ) / c )
131
+ # if c == 0:
132
+ # valinf = 1
133
+ # else:
134
+ # valinf = evalpoly(self._value, K(a) / c)
135
+ valinf = 1
114
136
assert pole is None
115
137
116
138
def ev (P ):
@@ -135,13 +157,14 @@ def eval_derivative(self, D):
135
157
try :
136
158
pt = phi (self .normalize_point )
137
159
pole = - d / c
138
- valinf = evalpoly (self ._value , pt ) * (self .normalize_point - pole )
160
+ # valinf = evalpoly(self._value, pt) * (self.normalize_point - pole)
139
161
except AttributeError :
140
162
pole = None
141
- if c == 0 :
142
- valinf = 1
143
- else :
144
- valinf = evalpoly (self ._value , K (a ) / c )
163
+ # if c == 0:
164
+ # valinf = 1
165
+ # else:
166
+ # valinf = evalpoly(self._value, K(a) / c)
167
+ valinf = 1
145
168
assert pole is None
146
169
chainrule = (a * d - b * c ) / (c * D + d ) ** 2
147
170
return (
0 commit comments