Example #1
0
File: fn.py Project: hannahaih/DALI
def _wrap_op(op_class, submodule, parent_module, wrapper_doc):
    """Wrap the DALI Operator with fn API and insert the function into appropriate module.

    Args:
        op_class: Op class to wrap
        submodule: Additional submodule (scope)
        parent_module (str): If set to None, the wrapper is placed in nvidia.dali.fn module,
            otherwise in a specified parent module.
        wrapper_doc (str): Documentation of the wrapper function
    """
    schema = _b.TryGetSchema(op_class.__name__)
    make_hidden = schema.IsDocHidden() if schema else False
    wrapper_name = _to_snake_case(op_class.__name__)
    if parent_module is None:
        fn_module = sys.modules[__name__]
    else:
        fn_module = sys.modules[parent_module]
    module = _internal.get_submodule(fn_module, submodule)
    if not hasattr(module, wrapper_name):
        wrap_func = _wrap_op_fn(op_class, wrapper_name, wrapper_doc)
        setattr(module, wrapper_name, wrap_func)
        if submodule:
            wrap_func.__module__ = module.__name__
        if make_hidden:
            parent_module = _internal.get_submodule(fn_module, submodule[:-1])
            setattr(parent_module, wrapper_name, wrap_func)
Example #2
0
def _load_ops():
    global _cpu_ops
    global _gpu_ops
    global _mixed_ops
    _cpu_ops = _cpu_ops.union(set(_b.RegisteredCPUOps()))
    _gpu_ops = _gpu_ops.union(set(_b.RegisteredGPUOps()))
    _mixed_ops = _mixed_ops.union(set(_b.RegisteredMixedOps()))
    _cpu_gpu_ops = _cpu_ops.union(_gpu_ops).union(_mixed_ops)
    ops_module = sys.modules[__name__]

    for op_reg_name in _cpu_gpu_ops:
        schema = _b.TryGetSchema(op_reg_name)
        make_hidden = schema.IsDocHidden() if schema else False
        op_full_name, submodule, op_name = _process_op_name(op_reg_name, make_hidden)
        module = _internal.get_submodule(ops_module, submodule)
        if not hasattr(module, op_name):
            op_class = python_op_factory(op_name, op_reg_name, op_device = "cpu")
            op_class.__module__ = module.__name__
            setattr(module, op_name, op_class)

            if op_name not in ["ExternalSource"]:
                _wrap_op(op_class, submodule)

            # The operator was inserted into nvidia.dali.ops.hidden module, let's import it here
            # so it would be usable, but not documented as coming from other module
            if make_hidden:
                parent_module = _internal.get_submodule(ops_module, submodule[:-1])
                setattr(parent_module, op_name, op_class)
Example #3
0
File: eager.py Project: NVIDIA/DALI
def _wrap_eager_op(op_class, submodule, wrapper_name, wrapper_doc):
    """Exposes eager operator to the appropriate module (similar to :func:`nvidia.dali.fn._wrap_op`).
    Uses ``op_class`` for preprocessing inputs and keyword arguments and filling OpSpec for backend
    eager operators.

    Args:
        op_class: Op class to wrap.
        submodule: Additional submodule (scope).
        wrapper_name: Wrapper name (the same as in fn API).
        wrapper_doc (str): Documentation of the wrapper function.
    """
    op_name = op_class.schema_name
    op_schema = _b.TryGetSchema(op_name)
    if op_schema.IsDeprecated(
    ) or op_name in _stateful_operators or op_name in _generator_operators:
        # TODO(ksztenderski): For now only exposing stateless operators.
        return
    else:
        # If operator is not stateful or a generator expose it as stateless.
        wrapper = _wrap_stateless(op_class, op_name, wrapper_name)

    # Exposing to eager.experimental module.
    eager_module = _internal.get_submodule(sys.modules[__name__],
                                           'experimental')
    op_module = _internal.get_submodule(eager_module, submodule)

    if not hasattr(op_module, wrapper_name):
        wrapper.__name__ = wrapper_name
        wrapper.__qualname__ = wrapper_name
        wrapper.__doc__ = wrapper_doc

        if submodule:
            wrapper.__module__ = op_module.__name__

        setattr(op_module, wrapper_name, wrapper)
Example #4
0
def _wrap_op(op_class, submodule):
    schema = _b.TryGetSchema(op_class.__name__)
    make_hidden = schema.IsDocHidden() if schema else False
    wrapper_name = _to_snake_case(op_class.__name__)
    fn_module = sys.modules[__name__]
    module = _internal.get_submodule(fn_module, submodule)
    if not hasattr(module, wrapper_name):
        wrap_func = _wrap_op_fn(op_class, wrapper_name)
        setattr(module, wrapper_name, wrap_func)
        if submodule:
            wrap_func.__module__ = module.__name__
        if make_hidden:
            parent_module = _internal.get_submodule(fn_module, submodule[:-1])
            setattr(parent_module, wrapper_name, wrap_func)
Example #5
0
def _load_readers_tfrecord():
    _TFRecordReaderImpl.__call__.__doc__ = _docstring_generator_call(
        "readers__TFRecord")

    global _cpu_ops
    _cpu_ops = _cpu_ops.union({'readers__TFRecord', 'TFRecordReader'})

    ops_module = sys.modules[__name__]

    class TFRecordReader(_TFRecordReaderImpl, metaclass=_DaliOperatorMeta):
        pass

    class TFRecord(_TFRecordReaderImpl, metaclass=_DaliOperatorMeta):
        pass

    for op_reg_name, internal_schema, op_class in [
        ('readers__TFRecord', 'readers___TFRecord', TFRecord),
        ('TFRecordReader', '_TFRecordReader', TFRecordReader)
    ]:
        op_class.schema_name = op_reg_name
        op_class._internal_schema_name = internal_schema
        op_full_name, submodule, op_name = _process_op_name(op_reg_name)
        module = _internal.get_submodule(ops_module, submodule)
        if not hasattr(module, op_name):
            op_class.__module__ = module.__name__
            setattr(module, op_name, op_class)
            _wrap_op(op_class, submodule)
Example #6
0
def _get_eager_target_module(parent_module, submodules, make_hidden):
    """ Returns target module inside ``parent_module`` if specified, otherwise inside eager. """
    if parent_module is None:
        # Exposing to nvidia.dali.experimental.eager module.
        parent_module = _internal.get_submodule('nvidia.dali',
                                                'experimental.eager')
    else:
        # Exposing to experimental.eager submodule of the specified parent module.
        parent_module = _internal.get_submodule(sys.modules[parent_module],
                                                'experimental.eager')

    if make_hidden:
        op_module = _internal.get_submodule(parent_module, submodules[:-1])
    else:
        op_module = _internal.get_submodule(parent_module, submodules)

    return op_module
Example #7
0
def _wrap_op(op_class, submodule):
    wrapper_name = _to_snake_case(op_class.__name__)
    fn_module = sys.modules[__name__]
    module = _internal.get_submodule(fn_module, submodule)
    if not hasattr(module, wrapper_name):
        wrap_func = _wrap_op_fn(op_class, wrapper_name)
        setattr(module, wrapper_name, wrap_func)
        if submodule:
            wrap_func.__module__ = module.__name__
Example #8
0
def _expose_eager_op_as_object(op_class, submodule):
    """ Exposes eager operators as objects. Can be used if we decide to change eager API from
    functional to objective.
    """

    op_name = op_class.schema_name
    module = _internal.get_submodule('nvidia.dali.experimental.eager',
                                     submodule)
    op = _eager_op_object_factory(op_class, op_name)
    setattr(module, op_name, op)
Example #9
0
def _load_ops():
    global _cpu_ops
    global _gpu_ops
    global _mixed_ops
    _cpu_ops = _cpu_ops.union(set(_b.RegisteredCPUOps()))
    _gpu_ops = _gpu_ops.union(set(_b.RegisteredGPUOps()))
    _mixed_ops = _mixed_ops.union(set(_b.RegisteredMixedOps()))
    _cpu_gpu_ops = _cpu_ops.union(_gpu_ops).union(_mixed_ops)
    ops_module = sys.modules[__name__]

    for op_reg_name in _cpu_gpu_ops:
        op_full_name, submodule, op_name = _process_op_name(op_reg_name)
        module = _internal.get_submodule(ops_module, submodule)
        if not hasattr(module, op_name):
            op_class = python_op_factory(op_name, op_reg_name, op_device="cpu")
            op_class.__module__ = module.__name__
            setattr(module, op_name, op_class)

            if op_name not in ["ExternalSource"]:
                _wrap_op(op_class, submodule)
Example #10
0
def _get_experimental():
    # TODO(klecki): this is WAR only for experimental module
    current_module = sys.modules[__name__]
    experimental = _internal.get_submodule(current_module, "experimental")
    return experimental