Skip to content

Commit a296e71

Browse files
author
Onur R. Bingol
committed
Simplify evaluators API
1 parent 70df3a2 commit a296e71

File tree

2 files changed

+42
-100
lines changed

2 files changed

+42
-100
lines changed

geomdl/BSpline.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,13 @@ def evaluate_single(self, param):
171171
if self._kv_normalize:
172172
utilities.check_params([param])
173173

174-
# Evaluate
175-
return self._evaluator.evaluate_single(parameter=param, degree=self.degree, knotvector=self.knotvector,
176-
ctrlpts=self._control_points, dimension=self._dimension,
177-
precision=self._precision)
174+
# Evaluate the curve point
175+
pt = self._evaluator.evaluate(start=param, stop=param,
176+
degree=self.degree, knotvector=self.knotvector,
177+
ctrlpts=self._control_points, sample_size=self.sample_size,
178+
dimension=self._dimension, precision=self._precision)
179+
180+
return pt[0]
178181

179182
def evaluate_list(self, param_list):
180183
""" Evaluates the curve for an input range of parameters.
@@ -212,9 +215,9 @@ def derivatives(self, u, order=0, **kwargs):
212215
super(Curve, self).derivatives(u=u, order=order, **kwargs)
213216

214217
# Evaluate and return the derivative at knot u
215-
return self._evaluator.derivatives_single(parameter=u, deriv_order=order, degree=self.degree,
216-
knotvector=self.knotvector, ctrlpts=self._control_points,
217-
dimension=self._dimension)
218+
return self._evaluator.derivatives(parameter=u, deriv_order=order, degree=self.degree,
219+
knotvector=self.knotvector, ctrlpts=self._control_points,
220+
dimension=self._dimension)
218221

219222
# Knot insertion
220223
def insert_knot(self, u, **kwargs):
@@ -640,12 +643,14 @@ def evaluate_single(self, param):
640643
# Call parent method
641644
super(Surface, self).evaluate_single(param)
642645

643-
# Evaluate the surface
644-
spt = self._evaluator.evaluate_single(parameter=param, degree=self._degree, knotvector=self._knot_vector,
645-
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
646-
dimension=self._dimension, precision=self._precision)
646+
# Evaluate the surface point
647+
pt = self._evaluator.evaluate(start=param, stop=param,
648+
degree=self._degree, knotvector=self._knot_vector,
649+
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
650+
sample_size=self.sample_size, dimension=self._dimension,
651+
precision=self._precision)
647652

648-
return spt
653+
return pt[0]
649654

650655
def evaluate_list(self, param_list):
651656
""" Evaluates the surface for a given list of (u, v) parameters.
@@ -689,10 +694,10 @@ def derivatives(self, u, v, order=0, **kwargs):
689694
super(Surface, self).derivatives(u=u, v=v, order=order, **kwargs)
690695

691696
# Evaluate and return the derivatives
692-
return self._evaluator.derivatives_single(parameter=(u, v), deriv_order=order,
693-
degree=self._degree, knotvector=self._knot_vector,
694-
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
695-
dimension=self.dimension)
697+
return self._evaluator.derivatives(parameter=(u, v), deriv_order=order,
698+
degree=self._degree, knotvector=self._knot_vector,
699+
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
700+
dimension=self.dimension)
696701

697702
# Insert knot 'r' times at the given (u, v) parametric coordinates
698703
def insert_knot(self, u=None, v=None, **kwargs):
@@ -966,13 +971,14 @@ def evaluate_single(self, param):
966971
if self._kv_normalize:
967972
utilities.check_params(param)
968973

969-
# Evaluate the volume
970-
vpt = self._evaluator.evaluate_single(parameter=param,
971-
degree=self._degree, knotvector=self._knot_vector,
972-
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
973-
dimension=self._dimension, precision=self._precision)
974+
# Evaluate the volume point
975+
pt = self._evaluator.evaluate(start=param, stop=param,
976+
degree=self._degree, knotvector=self._knot_vector,
977+
ctrlpts_size=self._control_points_size, ctrlpts=self._control_points,
978+
sample_size=self.sample_size, dimension=self._dimension,
979+
precision=self._precision)
974980

975-
return vpt
981+
return pt[0]
976982

977983
def evaluate_list(self, param_list):
978984
""" Evaluates the volume for a given list of (u, v, w) parameters.

geomdl/evaluators.py

Lines changed: 14 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,6 @@ def name(self):
4343
"""
4444
return self._name
4545

46-
@abc.abstractmethod
47-
def evaluate_single(self, **kwargs):
48-
""" Abstract method for computation of a single point at a single parameter.
49-
50-
.. note::
51-
52-
This is an abstract method and it must be implemented in the subclass.
53-
"""
54-
pass
55-
5646
@abc.abstractmethod
5747
def evaluate(self, **kwargs):
5848
""" Abstract method for computation of points over a range of parameters.
@@ -64,7 +54,7 @@ def evaluate(self, **kwargs):
6454
pass
6555

6656
@abc.abstractmethod
67-
def derivatives_single(self, **kwargs):
57+
def derivatives(self, **kwargs):
6858
""" Abstract method for computation of derivatives at a single parameter.
6959
7060
.. note::
@@ -122,24 +112,6 @@ def __init__(self, **kwargs):
122112
super(CurveEvaluator, self).__init__(**kwargs)
123113
self._span_func = kwargs.get('find_span_func', helpers.find_span_linear)
124114

125-
def evaluate_single(self, **kwargs):
126-
""" Evaluates a single curve point. """
127-
# Call parent method
128-
super(CurveEvaluator, self).evaluate_single(**kwargs)
129-
130-
param = kwargs.get('parameter')
131-
degree = kwargs.get('degree')
132-
knotvector = kwargs.get('knotvector')
133-
ctrlpts = kwargs.get('ctrlpts')
134-
dimension = kwargs.get('dimension')
135-
precision = kwargs.get('precision')
136-
137-
# Algorithm A3.1
138-
crvpt = self.evaluate(start=param, stop=param, degree=degree, knotvector=knotvector,
139-
ctrlpts=ctrlpts, sample_size=1, dimension=dimension, precision=precision)
140-
141-
return crvpt[0]
142-
143115
def evaluate(self, **kwargs):
144116
""" Evaluates the curve. """
145117
# Call parent method
@@ -170,10 +142,10 @@ def evaluate(self, **kwargs):
170142

171143
return eval_points
172144

173-
def derivatives_single(self, **kwargs):
145+
def derivatives(self, **kwargs):
174146
""" Evaluates the derivatives at the input parameter. """
175147
# Call parent method
176-
super(CurveEvaluator, self).derivatives_single(**kwargs)
148+
super(CurveEvaluator, self).derivatives(**kwargs)
177149

178150
param = kwargs.get('parameter')
179151
deriv_order = kwargs.get('deriv_order', 0)
@@ -310,10 +282,10 @@ def derivatives_ctrlpts(**kwargs):
310282
# Return a 2-dimensional list of control points
311283
return PK
312284

313-
def derivatives_single(self, **kwargs):
285+
def derivatives(self, **kwargs):
314286
""" Evaluates the derivatives at the input parameter. """
315287
# Call parent method
316-
super(CurveEvaluator2, self).derivatives_single(**kwargs)
288+
super(CurveEvaluator2, self).derivatives(**kwargs)
317289

318290
param = kwargs.get('parameter')
319291
deriv_order = kwargs.get('deriv_order', 0)
@@ -381,13 +353,13 @@ def evaluate(self, **kwargs):
381353

382354
return eval_points
383355

384-
def derivatives_single(self, **kwargs):
356+
def derivatives(self, **kwargs):
385357
""" Evaluates the derivatives at the input parameter. """
386358
deriv_order = kwargs.get('deriv_order')
387359
dimension = kwargs.get('dimension')
388360

389361
# Call the parent function to evaluate A(u) and w(u) derivatives
390-
CKw = super(CurveEvaluatorRational, self).derivatives_single(**kwargs)
362+
CKw = super(CurveEvaluatorRational, self).derivatives(**kwargs)
391363

392364
# Algorithm A4.2
393365
CK = [[0.0 for _ in range(dimension - 1)] for _ in range(deriv_order + 1)]
@@ -421,24 +393,6 @@ def __init__(self, **kwargs):
421393
super(SurfaceEvaluator, self).__init__(**kwargs)
422394
self._span_func = kwargs.get('find_span_func', helpers.find_span_linear)
423395

424-
def evaluate_single(self, **kwargs):
425-
""" Evaluates a single surface point. """
426-
# Call parent method
427-
super(SurfaceEvaluator, self).evaluate_single(**kwargs)
428-
429-
param = kwargs.get('parameter')
430-
degree = kwargs.get('degree')
431-
knotvector = kwargs.get('knotvector')
432-
ctrlpts = kwargs.get('ctrlpts')
433-
ctrlpts_size = kwargs.get('ctrlpts_size')
434-
dimension = kwargs.get('dimension')
435-
precision = kwargs.get('precision')
436-
437-
spt = self.evaluate(start=param, stop=param, degree=degree, knotvector=knotvector, ctrlpts=ctrlpts,
438-
ctrlpts_size=ctrlpts_size, sample_size=(1, 1), dimension=dimension, precision=precision)
439-
440-
return spt[0]
441-
442396
def evaluate(self, **kwargs):
443397
""" Evaluates the surface. """
444398
# Call parent method
@@ -479,10 +433,10 @@ def evaluate(self, **kwargs):
479433

480434
return eval_points
481435

482-
def derivatives_single(self, **kwargs):
436+
def derivatives(self, **kwargs):
483437
""" Evaluates the derivatives at the input parameter. """
484438
# Call parent method
485-
super(SurfaceEvaluator, self).derivatives_single(**kwargs)
439+
super(SurfaceEvaluator, self).derivatives(**kwargs)
486440

487441
deriv_order = kwargs.get('deriv_order')
488442
param = kwargs.get('parameter')
@@ -614,7 +568,7 @@ def derivatives_ctrlpts(**kwargs):
614568

615569
return PKL
616570

617-
def derivatives_single(self, **kwargs):
571+
def derivatives(self, **kwargs):
618572
""" Evaluates the derivatives at the input parameter. """
619573
deriv_order = kwargs.get('deriv_order')
620574
param = kwargs.get('parameter')
@@ -691,13 +645,13 @@ def evaluate(self, **kwargs):
691645

692646
return eval_points
693647

694-
def derivatives_single(self, **kwargs):
648+
def derivatives(self, **kwargs):
695649
""" Evaluates the derivatives at the input parameter. """
696650
deriv_order = kwargs.get('deriv_order')
697651
dimension = kwargs.get('dimension')
698652

699653
# Call the parent function to evaluate A(u) and w(u) derivatives
700-
SKLw = super(SurfaceEvaluatorRational, self).derivatives_single(**kwargs)
654+
SKLw = super(SurfaceEvaluatorRational, self).derivatives(**kwargs)
701655

702656
# Generate an empty list of derivatives
703657
SKL = [[[0.0 for _ in range(dimension)] for _ in range(deriv_order + 1)] for _ in range(deriv_order + 1)]
@@ -739,24 +693,6 @@ def __init__(self, **kwargs):
739693
super(VolumeEvaluator, self).__init__(**kwargs)
740694
self._span_func = kwargs.get('find_span_func', helpers.find_span_linear)
741695

742-
def evaluate_single(self, **kwargs):
743-
""" Evaluates a single point. """
744-
# Call parent method
745-
super(VolumeEvaluator, self).evaluate_single(**kwargs)
746-
747-
param = kwargs.get('parameter')
748-
degree = kwargs.get('degree')
749-
knotvector = kwargs.get('knotvector')
750-
ctrlpts = kwargs.get('ctrlpts')
751-
ctrlpts_size = kwargs.get('ctrlpts_size')
752-
dimension = kwargs.get('dimension')
753-
precision = kwargs.get('precision')
754-
755-
spt = self.evaluate(start=param, stop=param, degree=degree, knotvector=knotvector, ctrlpts=ctrlpts,
756-
ctrlpts_size=ctrlpts_size, sample_size=(1, 1, 1), dimension=dimension, precision=precision)
757-
758-
return spt[0]
759-
760696
def evaluate(self, **kwargs):
761697
""" Evaluates the volume. """
762698
# Call parent method
@@ -802,7 +738,7 @@ def evaluate(self, **kwargs):
802738

803739
return eval_points
804740

805-
def derivatives_single(self, **kwargs):
741+
def derivatives(self, **kwargs):
806742
""" Evaluates the derivative at the given parametric coordinate. """
807743
pass
808744

@@ -834,6 +770,6 @@ def evaluate(self, **kwargs):
834770

835771
return eval_points
836772

837-
def derivatives_single(self, **kwargs):
773+
def derivatives(self, **kwargs):
838774
""" Evaluates the derivatives at the input parameter. """
839775
pass

0 commit comments

Comments
 (0)