# OpenType variations helper module

## Overview:

The `fontTools.ttLib.tables.TupleVariation` module is a helper for `fontTools.ttLib` that implements lower-level support for variable-font table converters.

class fontTools.ttLib.tables.TupleVariation.TupleVariation(axes, coordinates)

  Bases: `object`

  getUsedPoints()
  hasImpact()

    Returns True if this TupleVariation has any visible impact.

    If the result is False, the TupleVariation can be omitted from the font without making any visible difference.

  toXML(writer, axisTags)
  fromXML(name, attrs, _content)
  compile(axisTags, sharedCoordIndices={}, pointData=None, *, optimizeSize=True)
  compileCoord(axisTags)
  compileIntermediateCoord(axisTags)
  static decompileCoord_(axisTags, data, offset)
  static compilePoints(points)
  static decompilePoints_(numPoints, data, offset, tableTag)

    (numPoints, data, offset, tableTag) –> ([point1, point2, …], newOffset)

  compileDeltas(optimizeSize=True)
  static compileDeltaValues_(deltas, bytearr=None, *, optimizeSize=True)

    [value1, value2, value3, …] –> bytearray

    Emits a sequence of runs. Each run starts with a byte-sized header whose 6 least significant bits (header & 0x3F) indicate how many values are encoded in this run. The stored length is the actual length minus one; run lengths are thus in the range [1..64]. If the header byte has its most significant bit (0x80) set, all values in this run are zero, and no data follows. Otherwise, the header byte is followed by ((header & 0x3F) + 1) signed values. If (header & 0x40) is clear, the delta values are stored as signed bytes; if (header & 0x40) is set, the delta values are signed 16-bit integers.

  static encodeDeltaRunAsZeroes_(deltas, offset, bytearr)
  static encodeDeltaRunAsBytes_(deltas, offset, bytearr, optimizeSize=True)
  static encodeDeltaRunAsWords_(deltas, offset, bytearr, optimizeSize=True)
  static encodeDeltaRunAsLongs_(deltas, offset, bytearr, optimizeSize=True)
  static decompileDeltas_(numDeltas, data, offset=0)

    (numDeltas, data, offset) –> ([delta, delta, …], newOffset)

  static getTupleSize_(flags, axisCount)
  getCoordWidth()

    Return 2 if coordinates are (x, y) as in gvar, 1 if single values as in cvar, or 0 if empty.

  scaleDeltas(scalar)
  roundDeltas()
  calcInferredDeltas(origCoords, endPts)
  optimize(origCoords, endPts, tolerance=0.5, isComposite=False)

fontTools.ttLib.tables.TupleVariation.decompileSharedTuples(axisTags, sharedTupleCount, data, offset)

fontTools.ttLib.tables.TupleVariation.compileSharedTuples(axisTags, variations, MAX_NUM_SHARED_COORDS=4096)

fontTools.ttLib.tables.TupleVariation.compileTupleVariationStore(variations, pointCount, axisTags, sharedTupleIndices, useSharedPoints=True, *, optimizeSize=True)

fontTools.ttLib.tables.TupleVariation.decompileTupleVariationStore(tableTag, axisTags, tupleVariationCount, pointCount, sharedTuples, data, pos, dataPos)

fontTools.ttLib.tables.TupleVariation.decompileTupleVariation_(pointCount, sharedTuples, sharedPoints, tableTag, axisTags, data, tupleData)

fontTools.ttLib.tables.TupleVariation.inferRegion_(peak)

  Infer start and end for a (non-intermediate) region

  This helper function computes the applicability region for variation tuples whose INTERMEDIATE_REGION flag is not set in the TupleVariationHeader structure. Variation tuples apply only to certain regions of the variation space; outside that region, the tuple has no effect. To make the binary encoding more compact, TupleVariationHeaders can omit the intermediateStartTuple and intermediateEndTuple fields.