#! /usr/bin/env python

import inspect
import os
from abjad.tools import *
from abjad import abjad_configuration


total = 0
root = os.path.join(abjad_configuration.abjad_directory_path, 'tools')
crawler = documentationtools.ClassCrawler(root)
for abjad_class in crawler():
    if not inspect.isabstract(abjad_class):
        if 'exception' in abjad_class.__module__:
            qualified_class_name = '.'.\
                join(abjad_class.__module__.split('.')[-2:])
        else:
            qualified_class_name = '.'.\
                join(abjad_class.__module__.split('.')[-3:-1])
        args = getattr(
            abjad_class, '_default_mandatory_input_arguments', [])
        args = [str(arg) for arg in args]
        if args:
            args = ', '.join(args)
        else:
            args = ''
        command = '{}({})'.format(qualified_class_name, args)
        try:
            eval(command)
        except:
            total += 1
            print qualified_class_name
            print command
            print

print '{} noninstantiable classes.'.format(total)
