# Path: consort/tools/HashCachingObject.py
# class HashCachingObject(abctools.AbjadValueObject):
# 
#     ### CLASS VARIABLES ###
# 
#     __slots__ = (
#         '_format',
#         '_hash',
#         )
# 
#     ### INITIALIZER ###
# 
#     def __init__(self):
#         self._format = None
#         self._hash = None
# 
#     ### SPECIAL METHODS ###
# 
#     #@profile
#     def __eq__(self, expr):
#         if isinstance(expr, type(self)):
#             if format(self) == format(expr):
#                 return True
#         return False
# 
#     #@profile
#     def __format__(self, format_specification=''):
#         if self._format is None:
#             agent = systemtools.StorageFormatAgent(self)
#             self._format = agent.get_storage_format()
#         return self._format
# 
#     #@profile
#     def __hash__(self):
#         if self._hash is None:
#             self._hash = hash((type(self), format(self)))
#         return self._hash


import abjad
import collections
        import consort
        import consort
from consort.tools.HashCachingObject import HashCachingObject
                    layer=2,
                    music_specifier='three',
                    voice_name='Viola 1 LH',
                    ),
                ]
            )

    ::

        >>> durations = [1, 2]
        >>> timespans = music_specifier(
        ...     durations=durations,
        ...     layer=3,
        ...     padding=1,
        ...     seed=2,
        ...     )
        >>> print(format(timespans))
        abjad.TimespanList(
            [
                consort.tools.SilentTimespan(
                    start_offset=abjad.Offset(-1, 1),
                    stop_offset=abjad.Offset(0, 1),
                    layer=3,
                    voice_name='Viola 1 RH',
                    ),
                consort.tools.SilentTimespan(
                    start_offset=abjad.Offset(-1, 1),
                    stop_offset=abjad.Offset(0, 1),
                    layer=3,
                    voice_name='Viola 1 LH',

# Path: consort/tools/HashCachingObject.py
# class HashCachingObject(abctools.AbjadValueObject):
# 
#     ### CLASS VARIABLES ###
# 
#     __slots__ = (
#         '_format',
#         '_hash',
#         )
# 
#     ### INITIALIZER ###
# 
#     def __init__(self):
#         self._format = None
#         self._hash = None
# 
#     ### SPECIAL METHODS ###
# 
#     #@profile
#     def __eq__(self, expr):
#         if isinstance(expr, type(self)):
#             if format(self) == format(expr):
#                 return True
#         return False
# 
#     #@profile
#     def __format__(self, format_specification=''):
#         if self._format is None:
#             agent = systemtools.StorageFormatAgent(self)
#             self._format = agent.get_storage_format()
#         return self._format
# 
#     #@profile
#     def __hash__(self):
#         if self._hash is None:
#             self._hash = hash((type(self), format(self)))
#         return self._hash


# Path: consort/tools/CompositeMusicSpecifier.py
import abjad
import collections
        import consort
        import consort
from consort.tools.HashCachingObject import HashCachingObject

                    layer=2,
                    music_specifier='three',
                    voice_name='Viola 1 LH',
                    ),
                ]
            )

    ::

        >>> durations = [1, 2]
        >>> timespans = music_specifier(
        ...     durations=durations,
        ...     layer=3,
        ...     padding=1,
        ...     seed=2,
        ...     )
        >>> print(format(timespans))
        abjad.TimespanList(
            [
                consort.tools.SilentTimespan(
                    start_offset=abjad.Offset(-1, 1),
                    stop_offset=abjad.Offset(0, 1),
                    layer=3,
                    voice_name='Viola 1 RH',
                    ),
                consort.tools.SilentTimespan(
                    start_offset=abjad.Offset(-1, 1),
                    stop_offset=abjad.Offset(0, 1),
                    layer=3,
                    voice_name='Viola 1 LH',

                    ),