fastai / nbdev

Create delightful software with Jupyter Notebooks
https://nbdev.fast.ai/
Apache License 2.0
4.8k stars 484 forks source link

Error in nbdev_readme due to potential bug in ```_non_empty_keys(d: dict)``` #1322

Open nikolas-claussen opened 1 year ago

nikolas-claussen commented 1 year ago

I got an error when running nbdev_readme. Traceback:

concurrent.futures.process._RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/IPython/core/formatters.py", line 221, in catch_format_error
    r = method(self, *args, **kwargs)
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/IPython/core/formatters.py", line 342, in __call__
    return method()
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/nbdev/showdoc.py", line 175, in _repr_markdown_
    if self.dm.has_docment: doc += f"\n\n{self.dm}"
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/nbdev/showdoc.py", line 64, in has_docment
    def has_docment(self): return 'docment' in self._columns and self._row_list
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/nbdev/showdoc.py", line 59, in _columns
    cols = set(flatten(L(self.dm.values()).filter().map(_non_empty_keys)))
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/fastcore/foundation.py", line 156, in map
    def map(self, f, *args, gen=False, **kwargs): return self._new(map_ex(self, f, *args, gen=gen, **kwargs))
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/fastcore/basics.py", line 840, in map_ex
    return list(res)
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/fastcore/basics.py", line 825, in __call__
    return self.func(*fargs, **kwargs)
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/nbdev/showdoc.py", line 23, in _non_empty_keys
    def _non_empty_keys(d:dict): return L([k for k,v in d.items() if v != inspect._empty])
  File "/home/nikolas/Programs/miniconda3/lib/python3.9/site-packages/nbdev/showdoc.py", line 23, in <listcomp>
    def _non_empty_keys(d:dict): return L([k for k,v in d.items() if v != inspect._empty])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Fixed this as follows: In nbs/api/08_showdoc.ipynb, modify the function _non_empty_keys to

def _non_empty_keys(d:dict): return L([k for k,v in d.items() if all(v != inspect._empty)])

nbdev_readme then works and creates the correct output.