<p dir="auto">In looking at the <a href="https://circleci.com/gh/numpy/numpy/5751?utm_campaign=vcs-integration-link&amp;utm_medium=referral&amp;utm_source=github-build-link" rel="nofollow">warnings while generating documentation</a>, there are dozens of "/home/circleci/repo/venv/lib/python3.6/site-packages/numpy/core/_internal.py:docstring of numpy.core._internal._ctypes.shape:1: <strong>WARNING: duplicate object description of</strong> numpy.core._internal._ctypes.shape, other instance in /home/circleci/repo/doc/source/reference/generated/numpy.core.defchararray.chararray.ctypes.rst, <strong>use :noindex: for one of them</strong></p>
<p dir="auto">I think this is caused by <code class="notranslate">chararray</code> being a subclass of <code class="notranslate">ndarray</code>, as similar warnings are generated for <code class="notranslate">MaskedArray</code>. I tried:</p>
<ul dir="auto">
<li>adding <code class="notranslate">autodoc_inherit_docstrings = False</code> to the <code class="notranslate">conf.py</code></li>
<li>messing with the <code class="notranslate">autosummary</code> <a href="https://github.com/numpy/numpy/tree/v1.16.0/doc/source/_templates/autosummary">templates</a></li>
</ul>
<p dir="auto">Any ideas how to turn those warnings off?</p>
<p dir="auto"><em>Original ticket <a href="http://projects.scipy.org/numpy/ticket/235" rel="nofollow">http://projects.scipy.org/numpy/ticket/235</a> on 2006-08-07 by <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/baxissimo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/baxissimo">@baxissimo</a>, assigned to unknown.</em></p>
<p dir="auto">Here's essentially what these different methods do:</p>
<p dir="auto">vstack(tup):<br>
concatenate( map(atleast_2d,tup), axis=0 )</p>
<p dir="auto">hstack(tup):<br>
concatenate( map(atleast_1d,tup),axis=1 )</p>
<p dir="auto">column_stack(tup):<br>
arrays = map( transpose,map(atleast_2d,tup) )<br>
concatenate(arrays,1)</p>
<p dir="auto">(note that column_stack transposes <em>everything</em> not just 1-d inputs,<br>
so it doesn't do quite what I would expect, i.e. only transposing<br>
1-d inputs)</p>
<p dir="auto">The above 3 are pretty much exactly the code used by numpy.  That's<br>
all there is to those 3 functions.<br>
For r_ and c_ I'm summarizing, but effectively they do something like:</p>
<p dir="auto">r_[args]:<br>
concatenate( map(atleast_1d,args),axis=0 )</p>
<p dir="auto">c_[args]:<br>
concatenate( map(atleast_1d,args),axis=1 )</p>
<p dir="auto">c_ behaves almost exactly like hstack -- with the addition of range<br>
literals being allowed.</p>
<p dir="auto">r_ is most like vstack, but a little different since it effectively<br>
uses atleast_1d, instead of atleast_2d.  So you have</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt;&gt;&gt; numpy.vstack((1,2,3,4))
array([[1],
      [2],
      [3],
      [4]])"><pre class="notranslate"><code class="notranslate">&gt;&gt;&gt; numpy.vstack((1,2,3,4))
array([[1],
      [2],
      [3],
      [4]])
</code></pre></div>
<p dir="auto">but</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&gt;&gt;&gt; numpy.r_[1,2,3,4]
array([1, 2, 3, 4])"><pre class="notranslate"><code class="notranslate">&gt;&gt;&gt; numpy.r_[1,2,3,4]
array([1, 2, 3, 4])
</code></pre></div>
<p dir="auto">However for cases like that with just 0-d or 1-d inputs, c_ behaves<br>
identically to r_, so if you wanted to get a 1-d output you could have<br>
just used c_.</p>
<p dir="auto">I think the right thing to do would be to make r_ behave more like vstack.  That would make things more consistent, and make for less for the user to remember.</p>
<p dir="auto">After making that change, to make things even more consistent, it<br>
might make sense to rename r_ and c_  to v_ and h_ instead.  Then it's<br>
easy to remember  'v_' is like 'vstack',  'h_' is like hstack.</p>
<p dir="auto">Furthermore, I propose that column_stack should only transpose its 1d<br>
inputs.  "Stack colums" defnitely doesn't imply to me that something<br>
that already has columns will be transposed.  Currently it is<br>
documented to only work on 1d inputs, so hopefully that's a change<br>
that wouldn't affect too many people.  The function in<br>
numpy/lib/shape_base.py could be replaced with this:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="def column_stack(tup):
   def transpose_1d(array):
        if array.ndim&lt;2: return _nx.transpose(atleast_2d(array))
        else: return array
   arrays = map(transpose_1d,map(atleast_1d,tup))
   return _nx.concatenate(arrays,1)"><pre class="notranslate"><code class="notranslate">def column_stack(tup):
   def transpose_1d(array):
        if array.ndim&lt;2: return _nx.transpose(atleast_2d(array))
        else: return array
   arrays = map(transpose_1d,map(atleast_1d,tup))
   return _nx.concatenate(arrays,1)
</code></pre></div>
<p dir="auto">If r_, and c_ get renamed to v_, h_, then c_ could be re-introduced<br>
with behavior similar to column_stack.</p>
<p dir="auto">SUMMARY:</p>
<ul dir="auto">
<li>make r_ behave like "vstack plus range literals"</li>
<li>make column_stack only transpose its 1d inputs.</li>
<li>rename r_,c_ to v_,h_ (or something else) to make their connection with vstack and hstack clearer.  Maybe vs_ and hs_ would be better?</li>
<li>make a new vertsion of 'c_' that acts like column_stack so that there's a nice parallel v_&lt;=&gt;vstack,  h_&lt;=&gt;hstack, c_&lt;=&gt;column_stack</li>
</ul>