Skip to content

Commit

Permalink
More doctest fixes.
Browse files Browse the repository at this point in the history
This is incomplete but I'm going to try to deal with the following:

1) each line in a black example is after jupyter#308 it's own line, so try to
   collapse subsequent code blocks.

2) It seem that we get a number of report_failure, but failure is just
   when the output does not match, though when we have a block with
   multiple >>> in sequence and we ignore output on purpose they now are
   seen as failure.

It's not super great and will need a buch of workaround
  • Loading branch information
Carreau committed Jan 18, 2024
1 parent 0befe71 commit f606b85
Showing 1 changed file with 59 additions and 2 deletions.
61 changes: 59 additions & 2 deletions papyri/gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,17 @@
from itertools import count
from pathlib import Path
from types import FunctionType, ModuleType
from typing import Any, Dict, FrozenSet, List, MutableMapping, Optional, Sequence, Tuple
from typing import (
Any,
Dict,
FrozenSet,
List,
MutableMapping,
Optional,
Sequence,
Tuple,
Union,
)
import io

import jedi
Expand Down Expand Up @@ -1139,12 +1149,57 @@ def report_failure(self, out, test, example, got):
Code(tok_entries, got, ExecutionStatus.failure)
)

def get_example_section_data(self):
def get_example_section_data(self) -> Section:
example_section_data = self._example_section_data
self._example_section_data = Section([], None)
return example_section_data


def _compact(self, example_section_data) -> Section:
"""
Compact consecutive execution items that do have the same execution status.
TODO:
This is not perfect as doctest tests that the output is the same, thus when we have a multiline block
If any of the intermediate items produce an output, the result will be failure.
"""
acc: List[Union[MText, Code]] = []
current_code: Optional[
Code
] = None


for item in example_section_data:
if not isinstance(item, Code):
if current_code is not None:
acc.append(current_code)
acc.append(MText(str(current_code.out)))
acc.append(MText(str(current_code.ce_status)))
current_code = None
acc.append(item)
else:
if current_code is None:
assert item is not None
current_code = item
continue

if current_code.ce_status == item.ce_status:
current_code = Code(
current_code.entries + item.entries, item.out, item.ce_status
)
else:
acc.append(current_code)
acc.append(MText(str(current_code.out)))
acc.append(MText(str(current_code.ce_status)))
assert item is not None
current_code = item

if current_code:
acc.append(current_code)
return Section(acc, None)


class Gen:
"""
Core class to generate a DocBundle for a given library.
Expand Down Expand Up @@ -1347,6 +1402,8 @@ def debugprint(*args):
elif block:
example_section_data.append(MText(block))

example_section_data = doctest_runner._compact(example_section_data)

# TODO fix this if plt.close not called and still a lingering figure.
fig_managers = _pylab_helpers.Gcf.get_all_fig_managers()
if len(fig_managers) != 0:
Expand Down

0 comments on commit f606b85

Please sign in to comment.