-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Visit Try 'orelse', 'finalbody' and 'handlers' and If 'orelse' #589
Visit Try 'orelse', 'finalbody' and 'handlers' and If 'orelse' #589
Conversation
…re. The older visitor relied on generic_visit() to be recursive. Where the provided generic_visit() is not recursive anymore, and moreover not called automatically when visiting unknow nodes! So what I'm saying here is that since #576 have been merged, we're not visiting the statements inside the 'orelse' field of Try and If nodes, same goes for 'finalbody' and 'handlers'. This commit fixes that issue. The rationale is now the following: All statements in the 'orelse' block of IF nodes and statements in the except handlers of TRY nodes that would override a name already defined in the main 'body' (or TRY 'orelse' or 'finalbody') are ignored. Meaning that in the context of the code below, 'ssl' would resolve to 'twisted.internet.ssl': try: from twisted.internet import ssl as _ssl except ImportError: ssl = None else: ssl = _ssl
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #589 +/- ##
==========================================
+ Coverage 92.03% 92.20% +0.16%
==========================================
Files 47 47
Lines 8465 8495 +30
Branches 1868 1882 +14
==========================================
+ Hits 7791 7833 +42
+ Misses 395 385 -10
+ Partials 279 277 -2 ☔ View full report in Codecov by Sentry. |
Tell me if you think the rationale is good @glyph @adiroiban. Also, this needs to be documented in the codedoc.rst file. |
Properly add support for that to override_guard() function instead.
This PR is somewhat liked to #17 and #33 in the sense that a duplicate name defined in except handlers or a If else block will not override the name previously defined. So in the case of class 'Arena' from https://github.com/python/cpython/blob/d2ef66a10be1250b13c32fbf3c0f9a9d2d98b124/Lib/multiprocessing/heap.py#L31 |
…:twisted/pydoctor into visit-try-orelse-finalbody-and-if-orelse
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with the caveat that the specific semantics of the priorities should be better explained in terms of specific order, rather than things not-getting-overridden which is a sort of a double negative.
docs/source/codedoc.rst
Outdated
When pydoctor deals with try/except/else or if/else block, it makes sure that the names defined in | ||
the "principal" branch do not get overriden by names defined in the except hanlders or ifs' else block. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This strikes me as a bit awkward. I think you want to be saying something about the priority of the binding of the name in the last branch? Or the else
branch?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No it's not about whether the branch is last or not. It's only the except hanlders and ifs' else blocks where we enable the override name guard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please advise on another wording you would have used :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the else
branch of try:
blocks have the priority over the except:
block. Similarly, the main body of if:
blocks have priority over what's defined in the else:
block.
So the thing that might be confusing here if that Try.orelse
and If.orelse
are NOT handled with the same override priority. Because the main branches in case of a if:
is the body
uniquely and in case of a try:
it's the body
, the orelse
and the finalbody
, in this order. So just saying else:
block can be confusing if we don't know if it's the else block of a IF statement or a TRY statement.
pydoctor/astbuilder.py
Outdated
@contextlib.contextmanager | ||
def override_guard(self) -> Iterator[None]: | ||
""" | ||
Returns a context manager that will make the builder ignore any extraneous |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A clearer explanation of the definition of "extraneous" would be interesting here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extraneous meaning assignments to name that already exist
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can read: "Returns a context manager that will make the builder ignore any new assignments to names that already existed in the same context"
pydoctor/astbuilder.py
Outdated
@@ -227,6 +294,9 @@ def visit_ClassDef(self, node: ast.ClassDef) -> None: | |||
parent = self.builder.current | |||
if isinstance(parent, model.Function): | |||
raise self.SkipNode() | |||
# Ignore in override guard | |||
if self._name_in_override_guard(parent, node.name): | |||
raise self.SkipNode() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder why this code is required, a module under an if branch is not possible. I also wonder how this code is not marked as unreached by the tests…
pydoctor/astbuilder.py
Outdated
@contextlib.contextmanager | ||
def override_guard(self) -> Iterator[None]: | ||
""" | ||
Returns a context manager that will make the builder ignore any extraneous |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extraneous meaning assignments to name that already exist
except ImportError: | ||
ssl = None | ||
else: | ||
ssl = _ssl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here the else branch have the priority over what defined in the except handler. Because it's the "principal" flow.
docs/source/codedoc.rst
Outdated
When pydoctor deals with try/except/else or if/else block, it makes sure that the names defined in | ||
the "principal" branch do not get overriden by names defined in the except hanlders or ifs' else block. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No it's not about whether the branch is last or not. It's only the except hanlders and ifs' else blocks where we enable the override name guard.
pydoctor/astbuilder.py
Outdated
return self._override_guard_state[0] is True \ | ||
and self._override_guard_state[1] is ob \ | ||
and name in self._override_guard_state[2] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@glyph please see this method for the implementation of the override guard.
The override guard is a re-entrant context manager that ensures that follow-up assignments to names that already existed before in the same frame context are simply ignored.
Co-authored-by: Glyph <[email protected]>
pydoctor/astbuilder.py
Outdated
@contextlib.contextmanager | ||
def override_guard(self) -> Iterator[None]: | ||
""" | ||
Returns a context manager that will make the builder ignore any extraneous |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Returns a context manager that will make the builder ignore any extraneous | |
Returns a context manager that will make the builder ignore any new |
I see this in the code: def handleDuplicate(self, obj: Documentable) -> None:
"""
This is called when we see two objects with the same
.fullName(), for example::
class C:
if something:
def meth(self):
implementation 1
else:
def meth(self):
implementation 2
The default is that the second definition "wins".
""" But clearly, that was never tested, so never officially supported.
|
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…nsions when desired. The naming is not the best at the moment but it passes the tests...
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…ionality stays the same
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…:twisted/pydoctor into visit-try-orelse-finalbody-and-if-orelse
…:twisted/pydoctor into visit-try-orelse-finalbody-and-if-orelse
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
Diff from pydoctor_primer, showing the effect of this PR on open source code: pycma (https://github.com/CMA-ES/pycma)
+ /projects/pycma/cma/wrapper.py:41: bad docstring: Unexpected indentation.
+ /projects/pycma/cma/wrapper.py:42: bad docstring: Block quote ends without a blank line; unexpected unindent.
- /projects/pycma/cma/__init__.py:20: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/__init__.py:27: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/__init__.py:27: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/__init__.py:27: Cannot find link target for "fmin"
- /projects/pycma/cma/__init__.py:96: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/__init__.py:96: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/__init__.py:96: Cannot find link target for "fmin"
- /projects/pycma/cma/constraints_handler.py:360: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/constraints_handler.py:361: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/constraints_handler.py:380: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/constraints_handler.py:380: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/constraints_handler.py:380: Cannot find link target for "fmin"
- /projects/pycma/cma/constraints_handler.py:829: Cannot find link target for "cma.ConstrainedFitnessAL"
- /projects/pycma/cma/constraints_handler.py:1323: Cannot find link target for "cma.fmin2"
- /projects/pycma/cma/evolution_strategy.py:3800: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/evolution_strategy.py:3840: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:3848: Cannot find link target for "cma.NoiseHandler"
- /projects/pycma/cma/evolution_strategy.py:3691: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/evolution_strategy.py:4323: Cannot find link target for "cma.ConstrainedFitnessAL"
- /projects/pycma/cma/evolution_strategy.py:4323: Cannot find link target for "cma.fmin_con2"
- /projects/pycma/cma/evolution_strategy.py:4328: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:4363: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/evolution_strategy.py:4523: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:4527: Cannot find link target for "cma.fmin2"
- /projects/pycma/cma/evolution_strategy.py:3499: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:3536: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/evolution_strategy.py:3569: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:3610: Cannot find link target for "objective_function"
- /projects/pycma/cma/evolution_strategy.py:476: Cannot find link target for "cma.ff.rosen"
+ /projects/pycma/cma/evolution_strategy.py:476: Cannot find link target for "cma.fitness_functions.ff.rosen", resolved from "cma.ff.rosen"
- /projects/pycma/cma/evolution_strategy.py:477: Cannot find link target for "cma.ff"
- /projects/pycma/cma/fitness_models.py:135: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/fitness_transformations.py:641: Cannot find link target for "cma.CMAOptions"
- /projects/pycma/cma/fitness_transformations.py:691: Cannot find link target for "cma.CMAOptions"
- /projects/pycma/cma/integer_centering.py:28: Cannot find link target for "cma.CMAEvolutionStrategy.tell"
- /projects/pycma/cma/integer_centering.py:34: Cannot find link target for "cma.CMAOptions"
- /projects/pycma/cma/integer_centering.py:70: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/logger.py:1857: Cannot find link target for "cma.plot"
- /projects/pycma/cma/logger.py:1860: Cannot find link target for "cma.plot"
- /projects/pycma/cma/optimization_tools.py:531: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:531: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:531: Cannot find link target for "fmin"
- /projects/pycma/cma/optimization_tools.py:536: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:536: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:536: Cannot find link target for "fmin"
- /projects/pycma/cma/optimization_tools.py:603: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:603: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:603: Cannot find link target for "fmin"
- /projects/pycma/cma/optimization_tools.py:627: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:627: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:627: Cannot find link target for "fmin"
- /projects/pycma/cma/optimization_tools.py:641: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:641: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/optimization_tools.py:641: Cannot find link target for "fmin"
- /projects/pycma/cma/options_parameters.py:181: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/options_parameters.py:135: Cannot find link target for "cma.CMAOptions"
- /projects/pycma/cma/options_parameters.py:997: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/options_parameters.py:997: ambiguous ref to fmin, could be cma.evolution_strategy.fmin, cma.purecma.fmin
- /projects/pycma/cma/options_parameters.py:997: Cannot find link target for "fmin"
- /projects/pycma/cma/purecma.py:26: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/purecma.py:26: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/restricted_gaussian_sampler.py:76: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/restricted_gaussian_sampler.py:77: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/restricted_gaussian_sampler.py:342: Cannot find link target for "cma.fmin"
- /projects/pycma/cma/restricted_gaussian_sampler.py:343: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/sigma_adaptation.py:21: Cannot find link target for "cma.CMAEvolutionStrategy"
- /projects/pycma/cma/wrapper.py:4: Cannot find link target for "SkoptCMAoptimizer"
+ /projects/pycma/cma/wrapper.py:38: Cannot find link target for "func"
+ /projects/pycma/cma/wrapper.py:45: Cannot find link target for "res"
+ /projects/pycma/cma/wrapper.py:48: Cannot find link target for "x"
+ /projects/pycma/cma/wrapper.py:49: Cannot find link target for "fun"
+ /projects/pycma/cma/wrapper.py:50: Cannot find link target for "x_iters"
+ /projects/pycma/cma/wrapper.py:52: Cannot find link target for "func_vals"
+ /projects/pycma/cma/wrapper.py:53: Cannot find link target for "space"
+ these 1 objects' docstrings contain syntax errors:
+ cma.wrapper.SkoptCMAoptimizer
numpy (https://github.com/numpy/numpy)
- /projects/numpy/numpy/_core/_type_aliases.py:3: Cannot find link target for "numpy.generic"
+ /projects/numpy/numpy/_core/_type_aliases.py:3: Cannot find link target for "numpy._core.generic", resolved from "numpy.generic"
- /projects/numpy/numpy/_core/_ufunc_config.py:165: Cannot find link target for "numpy.errstate"
+ /projects/numpy/numpy/_core/_ufunc_config.py:165: Cannot find link target for "numpy._core.errstate", resolved from "numpy.errstate"
- /projects/numpy/numpy/_core/_ufunc_config.py:174: Cannot find link target for "numpy.errstate"
+ /projects/numpy/numpy/_core/_ufunc_config.py:174: Cannot find link target for "numpy._core.errstate", resolved from "numpy.errstate"
- /projects/numpy/numpy/_core/arrayprint.py:651: Cannot find link target for "numpy.timedelta64"
+ /projects/numpy/numpy/_core/arrayprint.py:651: Cannot find link target for "numpy._core.timedelta64", resolved from "numpy.timedelta64"
- /projects/numpy/numpy/_core/arrayprint.py:652: Cannot find link target for "numpy.datetime64"
+ /projects/numpy/numpy/_core/arrayprint.py:652: Cannot find link target for "numpy._core.datetime64", resolved from "numpy.datetime64"
- /projects/numpy/numpy/_core/arrayprint.py:657: Cannot find link target for "numpy.void"
+ /projects/numpy/numpy/_core/arrayprint.py:657: Cannot find link target for "numpy._core.void", resolved from "numpy.void"
- /projects/numpy/numpy/_core/arrayprint.py:658: Cannot find link target for "numpy.bytes_"
+ /projects/numpy/numpy/_core/arrayprint.py:658: Cannot find link target for "numpy._core.bytes_", resolved from "numpy.bytes_"
- /projects/numpy/numpy/_core/arrayprint.py:658: Cannot find link target for "numpy.str_"
+ /projects/numpy/numpy/_core/arrayprint.py:658: Cannot find link target for "numpy._core.str_", resolved from "numpy.str_"
- /projects/numpy/numpy/_core/arrayprint.py:167: Cannot find link target for "numpy.timedelta64"
+ /projects/numpy/numpy/_core/arrayprint.py:167: Cannot find link target for "numpy._core.timedelta64", resolved from "numpy.timedelta64"
- /projects/numpy/numpy/_core/arrayprint.py:168: Cannot find link target for "numpy.datetime64"
+ /projects/numpy/numpy/_core/arrayprint.py:168: Cannot find link target for "numpy._core.datetime64", resolved from "numpy.datetime64"
- /projects/numpy/numpy/_core/arrayprint.py:173: Cannot find link target for "numpy.bytes_"
+ /projects/numpy/numpy/_core/arrayprint.py:173: Cannot find link target for "numpy._core.bytes_", resolved from "numpy.bytes_"
- /projects/numpy/numpy/_core/arrayprint.py:173: Cannot find link target for "numpy.str_"
+ /projects/numpy/numpy/_core/arrayprint.py:173: Cannot find link target for "numpy._core.str_", resolved from "numpy.str_"
- /projects/numpy/numpy/_core/arrayprint.py:174: Cannot find link target for "numpy.object_", resolved from "np.object_"
+ /projects/numpy/numpy/_core/arrayprint.py:174: Cannot find link target for "numpy._core.object_", resolved from "np.object_"
- /projects/numpy/numpy/_core/defchararray.py:65: Cannot find link target for "numpy.equal"
+ /projects/numpy/numpy/_core/defchararray.py:65: Cannot find link target for "numpy._core.equal", resolved from "numpy.equal"
- /projects/numpy/numpy/_core/strings.py:227: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/strings.py:227: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/strings.py:227: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/strings.py:227: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/defchararray.py:202: Cannot find link target for "numpy.greater"
+ /projects/numpy/numpy/_core/defchararray.py:202: Cannot find link target for "numpy._core.greater", resolved from "numpy.greater"
- /projects/numpy/numpy/_core/defchararray.py:133: Cannot find link target for "numpy.greater_equal"
+ /projects/numpy/numpy/_core/defchararray.py:133: Cannot find link target for "numpy._core.greater_equal", resolved from "numpy.greater_equal"
- /projects/numpy/numpy/_core/defchararray.py:236: Cannot find link target for "numpy.greater"
+ /projects/numpy/numpy/_core/defchararray.py:236: Cannot find link target for "numpy._core.greater", resolved from "numpy.greater"
- /projects/numpy/numpy/_core/defchararray.py:168: Cannot find link target for "numpy.less_equal"
+ /projects/numpy/numpy/_core/defchararray.py:168: Cannot find link target for "numpy._core.less_equal", resolved from "numpy.less_equal"
- /projects/numpy/numpy/_core/strings.py:189: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/strings.py:189: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/strings.py:189: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/strings.py:189: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/defchararray.py:274: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/defchararray.py:274: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/defchararray.py:274: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/defchararray.py:274: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/defchararray.py:99: Cannot find link target for "numpy.not_equal"
+ /projects/numpy/numpy/_core/defchararray.py:99: Cannot find link target for "numpy._core.not_equal", resolved from "numpy.not_equal"
- /projects/numpy/numpy/_core/strings.py:336: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/strings.py:336: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/strings.py:336: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/strings.py:336: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/strings.py:338: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/strings.py:338: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/strings.py:338: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/strings.py:338: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/strings.py:1524: Cannot find link target for "numpy.bytes_", resolved from "np.bytes_"
+ /projects/numpy/numpy/_core/strings.py:1524: Cannot find link target for "numpy._core.bytes_", resolved from "np.bytes_"
- /projects/numpy/numpy/_core/strings.py:1524: Cannot find link target for "numpy.str_", resolved from "np.str_"
+ /projects/numpy/numpy/_core/strings.py:1524: Cannot find link target for "numpy._core.str_", resolved from "np.str_"
- /projects/numpy/numpy/_core/defchararray.py:443: ambiguous ref to copy, could be numpy.lib._function_base_impl.copy, numpy.ma.core.copy
- /projects/numpy/numpy/_core/defchararray.py:443: Cannot find link target for "copy"
- /projects/numpy/numpy/_core/defchararray.py:722: Cannot find link target for "numpy.argsort"
+ /projects/numpy/numpy/_core/defchararray.py:722: Cannot find link target for "numpy._core.argsort", resolved from "numpy.argsort"
- /projects/numpy/numpy/_core/einsumfunc.py:1133: Cannot find link target for "numpy.trace"
+ /projects/numpy/numpy/_core/einsumfunc.py:1133: Cannot find link target for "numpy._core.trace", resolved from "numpy.trace"
- /projects/numpy/numpy/_core/einsumfunc.py:1134: Cannot find link target for "numpy.diag"
- /projects/numpy/numpy/_core/einsumfunc.py:1135: Cannot find link target for "numpy.sum"
+ /projects/numpy/numpy/_core/einsumfunc.py:1135: Cannot find link target for "numpy._core.sum", resolved from "numpy.sum"
- /projects/numpy/numpy/_core/einsumfunc.py:1136: Cannot find link target for "numpy.transpose"
+ /projects/numpy/numpy/_core/einsumfunc.py:1136: Cannot find link target for "numpy._core.transpose", resolved from "numpy.transpose"
- /projects/numpy/numpy/_core/einsumfunc.py:1137: Cannot find link target for "numpy.matmul"
+ /projects/numpy/numpy/_core/einsumfunc.py:1137: Cannot find link target for "numpy._core.matmul", resolved from "numpy.matmul"
- /projects/numpy/numpy/_core/einsumfunc.py:1138: Cannot find link target for "numpy.dot"
+ /projects/numpy/numpy/_core/einsumfunc.py:1138: Cannot find link target for "numpy._core.dot", resolved from "numpy.dot"
- /projects/numpy/numpy/_core/einsumfunc.py:1139: Cannot find link target for "numpy.inner"
+ /projects/numpy/numpy/_core/einsumfunc.py:1139: Cannot find link target for "numpy._core.inner", resolved from "numpy.inner"
- /projects/numpy/numpy/_core/einsumfunc.py:1140: Cannot find link target for "numpy.outer"
+ /projects/numpy/numpy/_core/einsumfunc.py:1140: Cannot find link target for "numpy._core.outer", resolved from "numpy.outer"
- /projects/numpy/numpy/_core/einsumfunc.py:1142: Cannot find link target for "numpy.multiply"
+ /projects/numpy/numpy/_core/einsumfunc.py:1142: Cannot find link target for "numpy._core.multiply", resolved from "numpy.multiply"
- /projects/numpy/numpy/_core/einsumfunc.py:1143: Cannot find link target for "numpy.tensordot"
+ /projects/numpy/numpy/_core/einsumfunc.py:1143: Cannot find link target for "numpy._core.tensordot", resolved from "numpy.tensordot"
- /projects/numpy/numpy/_core/einsumfunc.py:1145: Cannot find link target for "numpy.einsum_path"
+ /projects/numpy/numpy/_core/einsumfunc.py:1145: Cannot find link target for "numpy._core.einsum_path", resolved from "numpy.einsum_path"
... (truncated 585 lines) ...
|
See documentation here: https://pydoctor--589.org.readthedocs.build/en/589/codedoc.html#branch-priorities