Skip to content

Commit

Permalink
Remove python function wrapper. (#6012)
Browse files Browse the repository at this point in the history
* Remove python function wrapper.

* Increase ref

* Fix doc test

* Update python/oneflow/framework/docstr/utils.py

Co-authored-by: Yao Chi <later@usopp.net>

Co-authored-by: oneflow-ci-bot <69100618+oneflow-ci-bot@users.noreply.github.com>
Co-authored-by: Yao Chi <later@usopp.net>
  • Loading branch information
3 people committed Aug 25, 2021
1 parent 69caea8 commit bd30b9e
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 64 deletions.
45 changes: 45 additions & 0 deletions oneflow/api/python/framework/doc.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
Copyright 2020 The OneFlow Authors. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include <pybind11/pybind11.h>

#include "oneflow/api/python/of_api_registry.h"
#include "oneflow/api/python/framework/throw.h"

namespace py = pybind11;

namespace oneflow {

py::object AddFunctionDoc(py::object f, const std::string& doc_string) {
static std::vector<std::string> all_doc_strings;
all_doc_strings.emplace_back(doc_string);
const char* doc_str = all_doc_strings.back().c_str();
PyObject* obj = f.ptr();
if (PyCFunction_Check(obj)) {
auto* f = (PyCFunctionObject*)obj;
if (f->m_ml->ml_doc) {
THROW(RuntimeError) << "function " << f->m_ml->ml_name << " already has a docstring.";
}
f->m_ml->ml_doc = doc_str;
} else {
THROW(RuntimeError) << "function is " << Py_TYPE(obj)->tp_name << ", not a valid PyCFunction.";
}
f.inc_ref();
return f;
}

} // namespace oneflow

ONEFLOW_API_PYBIND11_MODULE("", m) { m.def("add_doc", &oneflow::AddFunctionDoc); }
16 changes: 16 additions & 0 deletions python/oneflow/F/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
Copyright 2020 The OneFlow Authors. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
from oneflow._oneflow_internal.F import *
6 changes: 2 additions & 4 deletions python/oneflow/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,10 @@ def atexit_hook(hook):
del ExitHook
del atexit
del oneflow

import oneflow.F
import oneflow.framework.docstr as docstr
from oneflow.framework.docstr.utils import register_docstr

register_docstr()
del register_docstr
del docstr
from oneflow.autograd import grad_enable, no_grad, inference_mode, is_grad_enabled
import oneflow.nn.image
import oneflow.nn.modules.acosh
Expand Down
10 changes: 3 additions & 7 deletions python/oneflow/framework/docstr/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,9 @@
See the License for the specific language governing permissions and
limitations under the License.
"""
_function_docstr = {}


def add_docstr(fun, docstr: str):
_function_docstr[fun] = docstr
import oneflow._oneflow_internal


def register_docstr():
for (fun, docstr) in _function_docstr.items():
setattr(fun, "__doc__", docstr)
def add_docstr(fun, docstr: str):
return oneflow._oneflow_internal.add_doc(fun, docstr)
45 changes: 0 additions & 45 deletions python/oneflow/framework/functional.py

This file was deleted.

2 changes: 0 additions & 2 deletions python/oneflow/framework/register_class_method_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
limitations under the License.
"""
import oneflow._oneflow_internal
import oneflow.framework.functional as functional
import oneflow.framework.generator as generator
import oneflow.framework.op_expr_util as op_expr_util
import oneflow.framework.tensor as tensor_util
Expand All @@ -23,4 +22,3 @@
def RegisterMethod4Class():
tensor_util.RegisterMethods()
op_expr_util.RegisterMethod4UserOpExpr()
functional.RegisterFunctionalApis()
7 changes: 1 addition & 6 deletions python/oneflow/test/modules/test_functional_docstr.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@

import oneflow as flow
import oneflow.unittest
from oneflow.framework.functional import Function


def _is_oneflow_functional(object):
return isinstance(object, Function)


def _run_functional_doctest(
Expand All @@ -44,7 +39,7 @@ def _run_functional_doctest(
runner = doctest.DebugRunner(verbose=verbose, optionflags=optionflags)
else:
runner = doctest.DocTestRunner(verbose=verbose, optionflags=optionflags)
r = inspect.getmembers(flow.F, _is_oneflow_functional)
r = inspect.getmembers(flow.F)
for (name, fun) in r:
if fun.__doc__ is not None:
print("test on docstr of: ", ".".join([module.__name__, name]))
Expand Down
4 changes: 4 additions & 0 deletions tools/generate_functional_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,11 @@
namespace functional = one::functional;
ONEFLOW_API_PYBIND11_MODULE("F", m) {{
py::options options;
options.disable_function_signatures();
{1}
options.enable_function_signatures();
}}
}} // namespace oneflow
Expand Down

0 comments on commit bd30b9e

Please sign in to comment.