[varLib.models] Refactor common logic

This commit is contained in:
Behdad Esfahbod 2023-12-11 18:54:16 -07:00
parent 455fc87081
commit 381b55b936

View File

@ -500,20 +500,25 @@ class VariationModel(object):
return out return out
@staticmethod @staticmethod
def interpolateFromDeltasAndScalars(deltas, scalars): def interpolateFromValuesAndScalars(values, scalars):
"""Interpolate from deltas and scalars fetched from getScalars().""" """Interpolate from values and scalars coefficients."""
v = None v = None
assert len(deltas) == len(scalars) assert len(values) == len(scalars)
for delta, scalar in zip(deltas, scalars): for value, scalar in zip(values, scalars):
if not scalar: if not scalar:
continue continue
contribution = delta * scalar contribution = value * scalar
if v is None: if v is None:
v = contribution v = contribution
else: else:
v += contribution v += contribution
return v return v
@staticmethod
def interpolateFromDeltasAndScalars(deltas, scalars):
"""Interpolate from deltas and scalars fetched from getScalars()."""
return VariationModel.interpolateFromValuesAndScalars(deltas, scalars)
def interpolateFromDeltas(self, loc, deltas): def interpolateFromDeltas(self, loc, deltas):
"""Interpolate from deltas, at location loc.""" """Interpolate from deltas, at location loc."""
scalars = self.getScalars(loc) scalars = self.getScalars(loc)
@ -535,17 +540,9 @@ class VariationModel(object):
def interpolateFromMastersAndMasterScalars(masterValues, masterScalars): def interpolateFromMastersAndMasterScalars(masterValues, masterScalars):
"""Interpolate from master-values and master-scalars fetched """Interpolate from master-values and master-scalars fetched
from getMasterScalars().""" from getMasterScalars()."""
v = None return VariationModel.interpolateFromValuesAndScalars(
assert len(masterValues) == len(masterScalars) masterValues, masterScalars
for master, scalar in zip(masterValues, masterScalars): )
if not scalar:
continue
contribution = master * scalar
if v is None:
v = contribution
else:
v += contribution
return v
def piecewiseLinearMap(v, mapping): def piecewiseLinearMap(v, mapping):