class_docstr: Locations must have the base master at the origin (ie. 0).
  
  If the extrapolate argument is set to True, then values are extrapolated
  outside the axis range.
  
    >>> from pprint import pprint
    >>> locations = [       {'wght':100},       {'wght':-100},       {'wght':-180},       {'wdth':+.3},       {'wght':+120,'wdth':.3},       {'wght':+120,'wdth':.2},       {},       {'wght':+180,'wdth':.3},       {'wght':+180},       ]
    >>> model = VariationModel(locations, axisOrder=['wght'])
    >>> pprint(model.locations)
    [{},
     {'wght': -100},
     {'wght': -180},
     {'wght': 100},
     {'wght': 180},
     {'wdth': 0.3},
     {'wdth': 0.3, 'wght': 180},
     {'wdth': 0.3, 'wght': 120},
     {'wdth': 0.2, 'wght': 120}]
    >>> pprint(model.deltaWeights)
    [{},
     {0: 1.0},
     {0: 1.0},
     {0: 1.0},
     {0: 1.0},
     {0: 1.0},
     {0: 1.0, 4: 1.0, 5: 1.0},
     {0: 1.0, 3: 0.75, 4: 0.25, 5: 1.0, 6: 0.6666666666666666},
     {0: 1.0,
      3: 0.75,
      4: 0.25,
      5: 0.6666666666666667,
      6: 0.4444444444444445,
      7: 0.6666666666666667}]
code: def __init__(self, locations, axisOrder=None, extrapolate=False):
      if len(set(tuple(sorted(l.items())) for l in locations)) != len(
          locations
      ):
          raise VariationModelError("Locations must be unique.")
  
      self.origLocations = locations
      self.axisOrder = axisOrder if axisOrder is not None else []
      self.extrapolate = extrapolate
      self.axisRanges = (
          self.computeAxisRanges(locations) if extrapolate else None
      )
  
      locations = [
          {k: v for k, v in loc.items() if v != 0.0}
          for loc in locations
      ]
      keyFunc = self.getMasterLocationsSortKeyFunc(
          locations, axisOrder=self.axisOrder
      )
      self.locations = sorted(locations, key=keyFunc)
  
      # Mapping from user's master order to our master order
      self.mapping = [self.locations.index(l) for l in locations]
      self.reverseMapping = [locations.index(l) for l in self.locations]
  
      self._computeMasterSupports()
      self._subModels = {}
  
imports: from fontTools.misc.roundTools import noRound
  from .errors import VariationModelError
label_desc: Use image node_id 1 to create a new VariationModel object from inherited base classes: object with example: obj = VariationModel(locations, axisOrder, extrapolate)