Skip to content

Commit

Permalink
[varLib.avarPlanner] Use proper logging
Browse files Browse the repository at this point in the history
  • Loading branch information
behdad committed Jul 23, 2023
1 parent 3efd204 commit a493f6b
Showing 1 changed file with 33 additions and 15 deletions.
48 changes: 33 additions & 15 deletions Lib/fontTools/varLib/avarPlanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
from fontTools.pens.areaPen import AreaPen
from fontTools.varLib.models import piecewiseLinearMap
from fontTools.misc.cliTools import makeOutputFileName
from math import exp, log
import math
import logging
from pprint import pformat

log = logging.getLogger("fontTools.varLib.avarPlanner")

WEIGHTS = [
50,
Expand Down Expand Up @@ -53,7 +57,7 @@ def getGlyphsetBlackness(glyphset, frequencies=None):
def planWeightAxis(
font, minValue, defaultValue, maxValue, weights=WEIGHTS, frequencies=None
):
print("Weight min/default/max:", minValue, defaultValue, maxValue)
log.info("Weight min %g / default %g / max %g", minValue, defaultValue, maxValue)

Check warning on line 60 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L60

Added line #L60 was not covered by tests

out = {}
outNormalized = {}

Check warning on line 63 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L62-L63

Added lines #L62 - L63 were not covered by tests
Expand All @@ -66,7 +70,7 @@ def planWeightAxis(
upem * upem
)

print("Calculated average glyph black ratio:", axisWeightAverage)
log.info("Calculated average glyph black ratio:\n%s", pformat(axisWeightAverage))

Check warning on line 73 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L73

Added line #L73 was not covered by tests

outNormalized[-1] = -1

Check warning on line 75 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L75

Added line #L75 was not covered by tests
for extremeValue in sorted({minValue, maxValue} - {defaultValue}):
Expand All @@ -78,31 +82,31 @@ def planWeightAxis(

bias = -1 if extremeValue < defaultValue else 0

Check warning on line 83 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L83

Added line #L83 was not covered by tests

print("Planning target weights", sorted(targetWeights))
print("Sampling", SAMPLES, "points in range", rangeMin, rangeMax)
log.info("Planning target weights %s", sorted(targetWeights))
log.info("Sampling %u points in range %g,%g", SAMPLES, rangeMin, rangeMax)
weightBlackness = axisWeightAverage.copy()

Check warning on line 87 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L85-L87

Added lines #L85 - L87 were not covered by tests
for sample in range(1, SAMPLES + 1):
weight = rangeMin + (rangeMax - rangeMin) * sample / (SAMPLES + 1)
print("Sampling weight", weight)
log.info("Sampling weight %g", weight)
glyphset = font.getGlyphSet(location={"wght": weight})
weightBlackness[weight] = getGlyphsetBlackness(glyphset, frequencies) / (

Check warning on line 92 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L89-L92

Added lines #L89 - L92 were not covered by tests
upem * upem
)
print("Sampled average glyph black ratio:", weightBlackness)
log.info("Sampled average glyph black ratio:\n%s", pformat(weightBlackness))

Check warning on line 95 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L95

Added line #L95 was not covered by tests

blacknessWeight = {}

Check warning on line 97 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L97

Added line #L97 was not covered by tests
for weight in sorted(weightBlackness):
blacknessWeight[weightBlackness[weight]] = weight

Check warning on line 99 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L99

Added line #L99 was not covered by tests

logMin = log(weightBlackness[rangeMin])
logMax = log(weightBlackness[rangeMax])
logMin = math.log(weightBlackness[rangeMin])
logMax = math.log(weightBlackness[rangeMax])
out[rangeMin] = rangeMin
outNormalized[bias] = bias

Check warning on line 104 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L101-L104

Added lines #L101 - L104 were not covered by tests
for weight in sorted(targetWeights):
t = (weight - rangeMin) / (rangeMax - rangeMin)
targetBlackness = exp(logMin + t * (logMax - logMin))
targetBlackness = math.exp(logMin + t * (logMax - logMin))
targetWeight = piecewiseLinearMap(targetBlackness, blacknessWeight)
print("Planned mapping weight %g to %g" % (weight, targetWeight))
log.info("Planned mapping weight %g to %g" % (weight, targetWeight))
out[weight] = targetWeight
outNormalized[t + bias] = (targetWeight - rangeMin) / (

Check warning on line 111 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L106-L111

Added lines #L106 - L111 were not covered by tests
rangeMax - rangeMin
Expand All @@ -117,12 +121,14 @@ def planWeightAxis(
# )
# pyplot.show()

print("Planned mapping:", out)
print("Planned normalized mapping:", outNormalized)
log.info("Planned mapping:\n%s", pformat(out))
log.info("Planned normalized mapping:\n%s", pformat(outNormalized))
return out, outNormalized

Check warning on line 126 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L124-L126

Added lines #L124 - L126 were not covered by tests


def main(args=None):
from fontTools import configLogger

Check warning on line 130 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L130

Added line #L130 was not covered by tests

if args is None:
import sys

Check warning on line 133 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L133

Added line #L133 was not covered by tests

Expand All @@ -137,8 +143,20 @@ def main(args=None):
)
parser.add_argument("font", metavar="font.ttf", help="Font file.")

Check warning on line 144 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L144

Added line #L144 was not covered by tests

logging_group = parser.add_mutually_exclusive_group(required=False)
logging_group.add_argument(

Check warning on line 147 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L146-L147

Added lines #L146 - L147 were not covered by tests
"-v", "--verbose", action="store_true", help="Run more verbosely."
)
logging_group.add_argument(

Check warning on line 150 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L150

Added line #L150 was not covered by tests
"-q", "--quiet", action="store_true", help="Turn verbosity off."
)

options = parser.parse_args(args)

Check warning on line 154 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L154

Added line #L154 was not covered by tests

configLogger(

Check warning on line 156 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L156

Added line #L156 was not covered by tests
level=("DEBUG" if options.verbose else "ERROR" if options.quiet else "INFO")
)

font = TTFont(options.font)
fvar = font["fvar"]
wghtAxis = slntAxis = None

Check warning on line 162 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L160-L162

Added lines #L160 - L162 were not covered by tests
Expand All @@ -159,14 +177,14 @@ def main(args=None):
)

if existingMapping is not None:
print("Existing weight mapping:", existingMapping)
log.info("Existing weight mapping:\n%s", pformat(existingMapping))

Check warning on line 180 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L180

Added line #L180 was not covered by tests

if "avar" not in font:
font["avar"] = newTable("avar")
avar = font["avar"]
avar.segments["wght"] = mapping

Check warning on line 185 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L183-L185

Added lines #L183 - L185 were not covered by tests

print("Saving font")
log.info("Saving font")
outfile = makeOutputFileName(options.font, overWrite=True, suffix=".avar")
font.save(outfile)

Check warning on line 189 in Lib/fontTools/varLib/avarPlanner.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/avarPlanner.py#L187-L189

Added lines #L187 - L189 were not covered by tests

Expand Down

0 comments on commit a493f6b

Please sign in to comment.