code: def _populate(self, glyphset):
      glyph = glyphset[self.name]
      self.doesnt_exist = glyph is None
      if self.doesnt_exist:
          return
  
      perContourPen = PerContourOrComponentPen(
          RecordingPen, glyphset=glyphset
      )
      try:
          glyph.draw(perContourPen, outputImpliedClosingLine=True)
      except TypeError:
          glyph.draw(perContourPen)
      self.recordings = perContourPen.value
      del perContourPen
  
      for ix, contour in enumerate(self.recordings):
          nodeTypes = [op for op, arg in contour.value]
          self.nodeTypes.append(nodeTypes)
  
          greenStats = StatisticsPen(glyphset=glyphset)
          controlStats = StatisticsControlPen(glyphset=glyphset)
          try:
              contour.replay(greenStats)
              contour.replay(controlStats)
              self.openContours.append(False)
          except OpenContourError as e:
              self.openContours.append(True)
              self._fill_in(ix)
              continue
          self.greenStats.append(greenStats)
          self.controlStats.append(controlStats)
          self.greenVectors.append(
              contour_vector_from_stats(greenStats)
          )
          self.controlVectors.append(
              contour_vector_from_stats(controlStats)
          )
  
          # Check starting point
          if nodeTypes[0] == "addComponent":
              self._fill_in(ix)
              continue
  
          assert nodeTypes[0] == "moveTo"
          assert nodeTypes[-1] in ("closePath", "endPath")
          points = SimpleRecordingPointPen()
          converter = SegmentToPointPen(points, False)
          contour.replay(converter)
          # points.value is a list of pt,bool where bool is true if on-curve and false if off-curve;
          # now check all rotations and mirror-rotations of the contour and build list of isomorphic
          # possible starting points.
          self.points.append(points.value)
  
          isomorphisms = []
          self.isomorphisms.append(isomorphisms)
  
          # Add rotations
          add_isomorphisms(points.value, isomorphisms, False)
          # Add mirrored rotations
          add_isomorphisms(points.value, isomorphisms, True)
  
imports: from .interpolatableHelpers import *
  from .interpolatableTestContourOrder import test_contour_order
  from .interpolatableTestStartingPoint import test_starting_point
  from fontTools.pens.recordingPen import RecordingPen, DecomposingRecordingPen, lerpRecordings
  from fontTools.pens.transformPen import TransformPen
  from fontTools.pens.statisticsPen import StatisticsPen, StatisticsControlPen
  from fontTools.pens.momentsPen import OpenContourError
  from fontTools.varLib.models import piecewiseLinearMap, normalizeLocation
  from fontTools.misc.fixedTools import floatToFixedToStr
  from fontTools.misc.transform import Transform
  from collections import defaultdict
  from types import SimpleNamespace
  from functools import wraps
  from pprint import pformat
  from math import sqrt, atan2, pi
  import logging
  import os
label_desc: Use image node_id 3 for calling the Glyph obj's underlying member method code with example usage: obj._populate(glyphset) without return types