Return a markdown summary of the samples on this sample sheet.

        This property supports displaying rendered markdown only when running
        within an IPython interpreter. If we are not running in an IPython
        interpreter, then print out a nicely formatted ASCII table.

        Returns:
            Markdown, str: A visual table of IDs and names for all samples.

def experimental_design(self) -> Any:
        """Return a markdown summary of the samples on this sample sheet.

        This property supports displaying rendered markdown only when running
        within an IPython interpreter. If we are not running in an IPython
        interpreter, then print out a nicely formatted ASCII table.

        Returns:
            Markdown, str: A visual table of IDs and names for all samples.

        """
        if not self.samples:
            raise ValueError('No samples in sample sheet')

        markdown = tabulate(
            [[getattr(s, h, '') for h in DESIGN_HEADER] for s in self.samples],
            headers=DESIGN_HEADER,
            tablefmt='pipe',
        )

        return maybe_render_markdown(markdown)