Example #1
0
def extract():
    """Extract docs from tf namespace and write them to disk."""
    visitor = doc_generator_visitor.DocGeneratorVisitor('tf')
    api_visitor = public_api.PublicAPIVisitor(visitor)

    # Access something in contrib so tf.contrib is properly loaded (it's hidden
    # behind lazy loading)
    _ = tf.contrib.__name__

    # Exclude some libaries in contrib from the documentation altogether.
    # TODO(wicke): Shrink this list.
    api_visitor.do_not_descend_map.update({
        'contrib': [
            'compiler',
            'factorization',
            'grid_rnn',
            'labeled_tensor',
            'ndlstm',
            'quantization',
            'session_bundle',
            'slim',
            'solvers',
            'specs',
            'tensor_forest',
            'tensorboard',
            'testing',
            'tfprof',
        ],
        'contrib.bayesflow': [
            'entropy', 'monte_carlo', 'special_math',
            'stochastic_gradient_estimators', 'stochastic_graph',
            'stochastic_tensor', 'stochastic_variables',
            'variational_inference'
        ],
        'contrib.distributions': ['bijector'],
        'contrib.ffmpeg': ['ffmpeg_ops'],
        'contrib.graph_editor':
        ['edit', 'match', 'subgraph', 'transform', 'select', 'util'],
        'contrib.layers': ['feature_column', 'summaries'],
        'contrib.learn': [
            'datasets',
            'head',
            'graph_actions',
            'io',
            'models',
            'monitors',
            'ops',
            'preprocessing',
            'utils',
        ],
        'contrib.util': ['loader'],
    })

    traverse.traverse(tf, api_visitor)

    # tf_debug is not imported with tf, it's a separate module altogether
    visitor.set_root_name('tfdbg')
    traverse.traverse(tf_debug, api_visitor)

    return visitor
Example #2
0
    def test_duplicates(self):
        visitor = doc_generator_visitor.DocGeneratorVisitor()
        visitor('submodule.DocGeneratorVisitor',
                doc_generator_visitor.DocGeneratorVisitor,
                [('index', doc_generator_visitor.DocGeneratorVisitor.index),
                 ('index2', doc_generator_visitor.DocGeneratorVisitor.index)])
        visitor('submodule2.DocGeneratorVisitor',
                doc_generator_visitor.DocGeneratorVisitor,
                [('index', doc_generator_visitor.DocGeneratorVisitor.index),
                 ('index2', doc_generator_visitor.DocGeneratorVisitor.index)])
        visitor('DocGeneratorVisitor2',
                doc_generator_visitor.DocGeneratorVisitor,
                [('index', doc_generator_visitor.DocGeneratorVisitor.index),
                 ('index2', doc_generator_visitor.DocGeneratorVisitor.index)])

        # The shorter path should be master, or if equal, the lexicographically
        # first will be.
        self.assertEqual(
            {
                'DocGeneratorVisitor2':
                sorted([
                    'submodule.DocGeneratorVisitor',
                    'submodule2.DocGeneratorVisitor', 'DocGeneratorVisitor2'
                ]),
                'DocGeneratorVisitor2.index':
                sorted([
                    'submodule.DocGeneratorVisitor.index',
                    'submodule.DocGeneratorVisitor.index2',
                    'submodule2.DocGeneratorVisitor.index',
                    'submodule2.DocGeneratorVisitor.index2',
                    'DocGeneratorVisitor2.index', 'DocGeneratorVisitor2.index2'
                ]),
            }, visitor.duplicates)
        self.assertEqual(
            {
                'submodule.DocGeneratorVisitor': 'DocGeneratorVisitor2',
                'submodule.DocGeneratorVisitor.index':
                'DocGeneratorVisitor2.index',
                'submodule.DocGeneratorVisitor.index2':
                'DocGeneratorVisitor2.index',
                'submodule2.DocGeneratorVisitor': 'DocGeneratorVisitor2',
                'submodule2.DocGeneratorVisitor.index':
                'DocGeneratorVisitor2.index',
                'submodule2.DocGeneratorVisitor.index2':
                'DocGeneratorVisitor2.index',
                'DocGeneratorVisitor2.index2': 'DocGeneratorVisitor2.index'
            }, visitor.duplicate_of)
        self.assertEqual(
            {
                id(doc_generator_visitor.DocGeneratorVisitor):
                'DocGeneratorVisitor2',
                id(doc_generator_visitor.DocGeneratorVisitor.index):
                'DocGeneratorVisitor2.index',
            }, visitor.reverse_index)
Example #3
0
    def test_call_class(self):
        visitor = doc_generator_visitor.DocGeneratorVisitor()
        visitor('DocGeneratorVisitor',
                doc_generator_visitor.DocGeneratorVisitor,
                [('index', doc_generator_visitor.DocGeneratorVisitor.index)])

        self.assertEqual({'DocGeneratorVisitor': ['index']}, visitor.tree)
        self.assertEqual(
            {
                'DocGeneratorVisitor':
                doc_generator_visitor.DocGeneratorVisitor,
                'DocGeneratorVisitor.index':
                doc_generator_visitor.DocGeneratorVisitor.index
            }, visitor.index)
Example #4
0
    def test_call_module(self):
        visitor = doc_generator_visitor.DocGeneratorVisitor()
        visitor('doc_generator_visitor', doc_generator_visitor, [
            ('DocGeneratorVisitor', doc_generator_visitor.DocGeneratorVisitor)
        ])

        self.assertEqual({'doc_generator_visitor': ['DocGeneratorVisitor']},
                         visitor.tree)
        self.assertEqual(
            {
                'doc_generator_visitor':
                doc_generator_visitor,
                'doc_generator_visitor.DocGeneratorVisitor':
                doc_generator_visitor.DocGeneratorVisitor,
            }, visitor.index)
Example #5
0
def extract(py_modules, do_not_descend_map):
    """Extract docs from tf namespace and write them to disk."""
    # Traverse the first module.
    visitor = doc_generator_visitor.DocGeneratorVisitor(py_modules[0][0])
    api_visitor = public_api.PublicAPIVisitor(visitor)
    add_dict_to_dict(do_not_descend_map, api_visitor.do_not_descend_map)

    traverse.traverse(py_modules[0][1], api_visitor)

    # Traverse all py_modules after the first:
    for module_name, module in py_modules[1:]:
        visitor.set_root_name(module_name)
        traverse.traverse(module, api_visitor)

    return visitor
Example #6
0
 def test_call_raises(self):
     visitor = doc_generator_visitor.DocGeneratorVisitor()
     with self.assertRaises(RuntimeError):
         visitor('non_class_or_module', 'non_class_or_module_object', [])