Hi Aaron,

You can see that the examples listed in elemwise_addDoc class in
https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/ndarray_doc.py#L57
are appended to the example section of elemwise_add op in
http://mxnet.incubator.apache.org/api/python/ndarray/ndarray.html?highlight=reshape#mxnet.ndarray.elemwise_add


You can take a look at the _build_doc function in ndarray_doc.py which
contains the logic to append examples from xxDoc classes. The
_build_doc function is called in _generate_ndarray_function_code when these
python functions are generated:
https://github.com/apache/incubator-mxnet/blob/e3a51b5a3ed989bf1e9c9f53b56819b32957527f/python/mxnet/ndarray/register.py#L54-L60
<https://github.com/apache/incubator-mxnet/blob/e3a51b5a3ed989bf1e9c9f53b56819b32957527f/python/mxnet/ndarray/register.py#L54-L60>

Best,
Haibin


On Wed, Mar 6, 2019 at 11:57 AM Aaron Markham <aaron.s.mark...@gmail.com>
wrote:

> Mu,
> Thanks for your response. I have some follow-up questions now. A lot
> actually.
> Can you explain more about what ndarray_doc.py is doing? I see that
> ndarray.register is calling it to do some transformations to
> docstrings by injecting "float". This seems quite buried to me. Some
> may have wondered tracing through the ndarray docs, "where does float
> come from? It's not listed here in the docstring. Strange."
> Is there a document that describes this pattern so other developers
> know how to use it and what impact it has? Why am I not seeing the
> pattern other than ndarray and symbol and only for float support? Why
> doesn't symbol have a correlating symbol_doc.py? This makes me wonder
> about the various issues I've seen where functions are properly
> described, or at all, when Sphinx runs. Is this something that should
> have been applied more widely, but has not? Wouldn't it make sense to
> have the docs massaging processes centralized for maintenance and
> clarity?
>
> Aside from that, I'm still not seeing the path for solving the issue
> with R and Scala and Java showing psuedocode or python code in their
> examples by using `make doctest`. Maybe they're first steps to make
> sure Python examples execute, but don't extend a solution to any other
> language binding? That's fine if so, but I still want to keep
> exploring what we do to facilitate good docs for the other bindings.
> Are you perhaps suggesting that each language binding follow this
> rewriting of the docstrings pattern that's in ndarray and symbol?
>
> Can you look at this PR and provide feedback on a tangible example of
> how to proceed? https://github.com/apache/incubator-mxnet/pull/14243
>
> ----
>
> Vishaal & Anton, thanks for your feedback too. Flagging the code makes
> a lot of sense as then it would be quite apparent what its intended
> language is. Rerunning sphinx to rewrite the output could work, and
> that assumes those packages have something specific and relevant to
> inject. Unfortunately for R, Scala, and Java, that doesn't seem to be
> the case as this point. Please correct me if I'm missing something
> here.
>
> ----
>
> Cheers,
> Aaron
>
> On Tue, Mar 5, 2019 at 9:44 AM Mu Li <muli....@gmail.com> wrote:
> >
> > The original design is putting psudo-code in cc files  (e.g. ndarray.cc
> > <
> https://github.com/apache/incubator-mxnet/blob/master/src/ndarray/ndarray.cc
> >)
> > that are languange indepent, then having python codes in .py files (e.g.
> > ndarray_doc.py
> > <
> https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/ndarray_doc.py
> >).
> > However, we haven't define the psudo-code format so some codes in cc
> files
> > look like python, and we didn't enable doctest so some py file codes
> cannot
> > be executed.
> >
> > I suggest the following next steps:
> >
> > 1. follow tensorflow's psudo-code format, e.g.
> > https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/fill
> > 2. enable doctest during building the doc (make doctest)
> >
> > On Mon, Mar 4, 2019 at 10:09 AM Vishaal Kapoor <vkapoor3...@gmail.com>
> > wrote:
> >
> > > Hey Aaron and  Anton,
> > >
> > > One of MXNet's strengths over other frameworks is the plethora of
> language
> > > bindings so having language specific examples is of importance. Perhaps
> > > indicating that an example is Python code by using a "#python" header
> on
> > > the example would make it clear.  Of course, for the important APIs,
> > > docstrings for the most popular languages would be desired.
> Additionally,
> > > making the holes clear would make it easier for users to contribute
> > > documentation for their favorite languages.
> > >
> > > Vishaal
> > >
> > > On Mon, Mar 4, 2019 at 8:34 AM Anton Chernov <mecher...@gmail.com>
> wrote:
> > >
> > > > Hi Aaron,
> > > >
> > > > Here is an idea: The main documentation is the one in .cc files. In
> > > theory
> > > > the language bindings should just override some stuff from it, like
> > > > examples. If I understand correctly there is a sphinx script that
> > > generates
> > > > the documentation. If run it first for core src folder and then from
> a
> > > > language binding folder it could use the -f, --force flag [1] to
> override
> > > > the needed parts. That would allow to provide a 'default' version of
> the
> > > > documentation, that could be adjusted where needed.
> > > >
> > > > Best
> > > > Anton
> > > >
> > > > [1]
> > > >
> > > >
> > >
> http://www.sphinx-doc.org/en/stable/man/sphinx-apidoc.html#sphinx-apidoc-manual-page
> > > >
> > > > вт, 26 февр. 2019 г. в 02:20, Aaron Markham <
> aaron.s.mark...@gmail.com>:
> > > >
> > > > > Hi everyone,
> > > > > A recent issue and pending PR has brought a thorny docs situation
> to
> > > > > my attention again and I'd like to hear from the community on how
> to
> > > > > proceed.
> > > > > We currently get some of the docs for the Python API pulled out of
> .cc
> > > > > files. Other APIs also get docs from there, or pull the Python
> docs to
> > > > > autogenerate their docs. This presents some problems:
> > > > > 1. (Some of) The code examples provided don't run when you copy and
> > > > > paste them. [1]
> > > > > 2. The code examples that show up in other APIs won't work as the
> code
> > > > > is Python and for (many/complicated) statements the syntax can be
> > > > > wrong.
> > > > >
> > > > > When I try out something new and go for the hello world example or
> > > > > browse around I do expect the docs' code examples to work. If they
> > > > > don't, well, that's a bad sign and I move on to another project.
> I'd
> > > > > like for new users to have a great experience no matter what
> language
> > > > > they use.
> > > > >
> > > > > One fix is to go ahead a be "Python 1st" and make sure the code
> > > > > executes. This route is proposed in a PR for some NDArray
> operators.
> > > > > [2] As I mention in the PR comments, this has the drawback of being
> > > > > very specific to Python and the psuedo-code, for what its worth,
> > > > > showing up in Scala docs (for example) will be much more obviously
> out
> > > > > of place. If I were an Scala person, I'd probably find this
> > > > > irritating. The same goes for R.
> > > > >
> > > > > So... what should we do? Here are some ideas:
> > > > > a) I thought about providing different examples in the .cc code,
> one
> > > > > for each language and then making sure those are parsed out
> properly
> > > > > when the APIs are generating their docs. I'm not sure how feasible
> > > > > this is.
> > > > > b) I thought that it would be nice if each operator had a wrapper
> for
> > > > > each language API, and this is where the example payload resides.
> > > > > Maybe docstrings go here too or the common docstrings just bubble
> up
> > > > > from the cc file. The benefit is that changes for a specific
> language
> > > > > remain in those packages and don't touch the shared core files.
> > > > > c) Another route is to keep the examples in the .cc files
> pseudo-code,
> > > > > but then also make sure each language has real examples in their
> docs.
> > > > > Then, any code block that's in the docs now that won't execute
> should
> > > > > be changed to a preformatted text block so people don't confuse it
> > > > > with functional code.
> > > > >
> > > > > I really don't like any of these options as they each sound like
> ton
> > > > > of work and difficult to maintain. Are there any projects that
> solve
> > > > > this problem in some elegant and efficient way?
> > > > >
> > > > > Cheers,
> > > > > Aaron
> > > > >
> > > > > [1] https://github.com/apache/incubator-mxnet/issues/14232
> > > > > [2] https://github.com/apache/incubator-mxnet/pull/14243
> > > > >
> > > >
> > >
>

Reply via email to