class_docstr: Static class that resolves shape names to their corresponding
  shape drawer classes.
  
  Classes that are derived from L{ShapeDrawer} in this module are
  automatically registered by L{ShapeDrawerDirectory} when the module
  is loaded for the first time.
class_docstr_tok: ["Static","class","that","resolves","shape","names","to","their","corresponding","shape","drawer","classes",".","Classes","that","are","derived","from","L","{","ShapeDrawer","}","in","this","module","are","automatically","registered","by","L","{","ShapeDrawerDirectory","}","when","the","module","is","loaded","for","the","first","time","."]
docstr: Given a shape name, returns the corresponding shape drawer class
  
  @param shape: the name of the shape
  @return: the corresponding shape drawer class
  
  @raise ValueError: if the shape is unknown
docstr_tok: ["Given","a","shape","name",",","returns","the","corresponding","shape","drawer","class","@","param","shape",":","the","name","of","the","shape","@","return",":","the","corresponding","shape","drawer","class","@","raise","ValueError",":","if","the","shape","is","unknown"]
code: def resolve(cls, shape):
      """Given a shape name, returns the corresponding shape drawer class
  
      @param shape: the name of the shape
      @return: the corresponding shape drawer class
  
      @raise ValueError: if the shape is unknown
      """
      try:
          return cls.known_shapes[shape]
      except KeyError:
          raise ValueError("unknown shape: %s" % shape) from None
  
imports: from abc import ABCMeta, abstractmethod
  from math import atan2, copysign, cos, pi, sin
  import sys
  from igraph.drawing.matplotlib.utils import find_matplotlib
label_desc: Use image node_id 3 for calling the ShapeDrawerDirectory obj's underlying member method code with example usage: obj.resolve(cls, shape) and returns: cls