code: def subset_glyphs(self, s) -> bool:
      if etree is None:
          raise ImportError(
              "No module named 'lxml', required to subset SVG"
          )
  
      # glyph names (before subsetting)
      glyph_order: List[str] = s.orig_glyph_order
      # map from glyph names to original glyph indices
      rev_orig_glyph_map: Dict[str, int] = s.reverseOrigGlyphMap
      # map from original to new glyph indices (after subsetting)
      glyph_index_map: Dict[int, int] = s.glyph_index_map
  
      new_docs: List[SVGDocument] = []
      for doc in self.docList:
          glyphs = {
              glyph_order[i]
              for i in range(doc.startGlyphID, doc.endGlyphID + 1)
          }.intersection(s.glyphs)
          if not glyphs:
              # no intersection: we can drop the whole record
              continue
  
          svg = etree.fromstring(
              # encode because fromstring dislikes xml encoding decl if input is str.
              # SVG xml encoding must be utf-8 as per OT spec.
              doc.data.encode("utf-8"),
              parser=etree.XMLParser(
                  # Disable libxml2 security restrictions to support very deep trees.
                  # Without this we would get an error like this:
                  # `lxml.etree.XMLSyntaxError: internal error: Huge input lookup`
                  # when parsing big fonts e.g. noto-emoji-picosvg.ttf.
                  huge_tree=True,
                  # ignore blank text as it's not meaningful in OT-SVG; it also prevents
                  # dangling tail text after removing an element when pretty_print=True
                  remove_blank_text=True,
                  # don't replace entities; we don't expect any in OT-SVG and they may
                  # be abused for XXE attacks
                  resolve_entities=False,
              ),
          )
  
          elements = group_elements_by_id(svg)
          gids = {rev_orig_glyph_map[g] for g in glyphs}
          element_ids = {f"glyph{i}" for i in gids}
          closure_element_ids(elements, element_ids)
  
          if not subset_elements(svg, element_ids):
              continue
  
          if not s.options.retain_gids:
              id_map = remap_glyph_ids(svg, glyph_index_map)
              update_glyph_href_links(svg, id_map)
  
          new_doc = etree.tostring(
              svg, pretty_print=s.options.pretty_svg
          ).decode("utf-8")
  
          new_gids = (glyph_index_map[i] for i in gids)
          for start, end in ranges(new_gids):
              new_docs.append(
                  SVGDocument(new_doc, start, end, doc.compressed)
              )
  
      self.docList = new_docs
  
      return bool(self.docList)
  
file_path: catboost/contrib/python/fonttools/fontTools/subset/svg.py
imports: from __future__ import annotations
  import re
  from functools import lru_cache
  from itertools import chain, count
  from typing import Dict, Iterable, Iterator, List, Optional, Set, Tuple
  from fontTools import ttLib
  from fontTools.subset.util import _add_method
  from fontTools.ttLib.tables.S_V_G_ import SVGDocument
label_desc: Use image node_id 11 for calling a global function with example usage: subset_glyphs(s) and returns: bool