':type shape_name: string
:param shape_name: The name of the shape.
:type shape_model: dict
:param shape_model: The shape model.  This would be the value
associated with the key in the "shapes" dict of the
service model (i.e ``model[\'shapes\'][shape_name]``)
:type shape_resolver: botocore.model.ShapeResolver
:param shape_resolver: A shape resolver object.  This is used to
resolve references to other shapes.  For scalar shape types
(string, integer, boolean, etc.), this argument is not
required.  If a shape_resolver is not provided for a complex
type, then a ``ValueError`` will be raised when an attempt
to resolve a shape is made.'

def __init__(self, shape_name, shape_model, shape_resolver=None):

    self.name = shape_name
    self.type_name = shape_model['type']
    self.documentation = shape_model.get('documentation', '')
    self._shape_model = shape_model
    if (shape_resolver is None):
        shape_resolver = UnresolvableShapeMap()
    self._shape_resolver = shape_resolver
    self._cache = {}
