From 816471e426fac16a185f1d7211320e1d538654f2 Mon Sep 17 00:00:00 2001 From: Frh Date: Sat, 18 Apr 2020 17:25:47 -0700 Subject: [PATCH] Fix unit tests, lint, drop Python 2 support Drop EOL Python 2 support. Resolve unit test discrepancies. Update unit tests to pass in Travis across all supported Py. Linting. --- .bandit | 3 + .deepsource.toml | 12 + .gitignore | 3 + .travis.yml | 5 - README.md | 14 +- camelot/core.py | 39 +- camelot/handlers.py | 25 +- camelot/io.py | 9 +- camelot/parsers/base.py | 15 +- camelot/parsers/lattice.py | 55 ++- camelot/parsers/stream.py | 102 ++++-- camelot/plotting.py | 18 +- camelot/utils.py | 47 ++- docs/index.rst | 10 + docs/user/how-it-works.rst | 2 +- docs/user/install.rst | 2 +- requirements.txt | 2 +- setup.py | 5 +- tests/data.py | 343 ++++++++++-------- tests/files/baseline_plots/test_grid_plot.png | Bin 8367 -> 8366 bytes .../files/baseline_plots/test_joint_plot.png | Bin 48678 -> 33969 bytes .../test_lattice_contour_plot.png | Bin 47314 -> 47246 bytes tests/files/baseline_plots/test_line_plot.png | Bin 6833 -> 6832 bytes .../test_stream_contour_plot.png | Bin 13521 -> 14487 bytes .../baseline_plots/test_stream_grid_plot.png | Bin 0 -> 9940 bytes tests/files/baseline_plots/test_text_plot.png | Bin 8992 -> 9112 bytes .../baseline_plots/test_textedge_plot.png | Bin 17978 -> 19000 bytes tests/test_cli.py | 25 +- tests/test_common.py | 97 +++-- tests/test_plotting.py | 32 ++ 30 files changed, 564 insertions(+), 301 deletions(-) create mode 100644 .bandit create mode 100644 .deepsource.toml create mode 100644 tests/files/baseline_plots/test_stream_grid_plot.png diff --git a/.bandit b/.bandit new file mode 100644 index 0000000..c936150 --- /dev/null +++ b/.bandit @@ -0,0 +1,3 @@ +[bandit] +# Ignore concerns about asserts, necessary for unit test code +skips: B101,B102 diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 0000000..e8edbba --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,12 @@ +version = 1 + +exclude_patterns = [ + "camelot/ext/**" +] + +[[analyzers]] +name = "python" +enabled = true + +[analyzers.meta] +runtime_version = "3.x.x" diff --git a/.gitignore b/.gitignore index d0aea62..3af88c1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ __pycache__/ build/ dist/ +prof/ *.egg-info/ .eggs/ .coverage @@ -17,3 +18,5 @@ htmlcov/ # vscode .vscode + +.DS_Store \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 7426bb0..c603fd5 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ -sudo: true language: python cache: pip addons: @@ -8,10 +7,6 @@ install: - make install jobs: include: - - stage: test - script: - - make test - python: '2.7' - stage: test script: - make test diff --git a/README.md b/README.md index 4ecb665..1fa8be4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Build Status](https://travis-ci.org/camelot-dev/camelot.svg?branch=master)](https://travis-ci.org/camelot-dev/camelot) [![Documentation Status](https://readthedocs.org/projects/camelot-py/badge/?version=master)](https://camelot-py.readthedocs.io/en/master/) [![codecov.io](https://codecov.io/github/camelot-dev/camelot/badge.svg?branch=master&service=github)](https://codecov.io/github/camelot-dev/camelot?branch=master) [![image](https://img.shields.io/pypi/v/camelot-py.svg)](https://pypi.org/project/camelot-py/) [![image](https://img.shields.io/pypi/l/camelot-py.svg)](https://pypi.org/project/camelot-py/) [![image](https://img.shields.io/pypi/pyversions/camelot-py.svg)](https://pypi.org/project/camelot-py/) [![Gitter chat](https://badges.gitter.im/camelot-dev/Lobby.png)](https://gitter.im/camelot-dev/Lobby) -[![image](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) +[![image](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) [![image](https://img.shields.io/badge/continous%20quality-deepsource-lightgrey)](https://deepsource.io/gh/camelot-dev/camelot/?ref=repository-badge) **Camelot** is a Python library that makes it easy for *anyone* to extract tables from PDF files! @@ -71,7 +71,7 @@ $ conda install -c conda-forge camelot-py ### Using pip -After [installing the dependencies](https://camelot-py.readthedocs.io/en/master/user/install-deps.html) ([tk](https://packages.ubuntu.com/trusty/python-tk) and [ghostscript](https://www.ghostscript.com/)), you can simply use pip to install Camelot: +After [installing the dependencies](https://camelot-py.readthedocs.io/en/master/user/install-deps.html) ([tk](https://packages.ubuntu.com/bionic/python/python-tk) and [ghostscript](https://www.ghostscript.com/)), you can simply use pip to install Camelot:
 $ pip install camelot-py[cv]
@@ -124,6 +124,10 @@ After installation, you can run tests using:
 $ python setup.py test
 
+## Wrappers + +- [camelot-php](https://github.com/randomstate/camelot-php) provides a [PHP](https://www.php.net/) wrapper on Camelot. + ## Versioning Camelot uses [Semantic Versioning](https://semver.org/). For the available versions, see the tags on this repository. For the changelog, you can check out [HISTORY.md](https://github.com/camelot-dev/camelot/blob/master/HISTORY.md). @@ -132,4 +136,8 @@ Camelot uses [Semantic Versioning](https://semver.org/). For the available versi This project is licensed under the MIT License, see the [LICENSE](https://github.com/camelot-dev/camelot/blob/master/LICENSE) file for details. - +## Support the development + +You can support our work on Camelot with a one-time or monthly donation [on OpenCollective](https://opencollective.com/camelot). Organizations who use camelot can also sponsor the project for an acknowledgement on [our documentation site](https://camelot-py.readthedocs.io/en/master/) and this README. + +Special thanks to all the users, organizations and contributors that support Camelot! diff --git a/camelot/core.py b/camelot/core.py index b7a02b1..5fff3c6 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -38,7 +38,7 @@ class TextEdge(object): intersections: int Number of intersections with horizontal text rows. is_valid: bool - A text edge is valid if it intersections with at least + A text edge is valid if it intersects with at least TEXTEDGE_REQUIRED_ELEMENTS horizontal text rows. """ @@ -65,7 +65,8 @@ class TextEdge(object): the is_valid attribute. """ if np.isclose(self.y0, y0, atol=edge_tol): - self.x = (self.intersections * self.x + x) / float(self.intersections + 1) + self.x = (self.intersections * self.x + x) / \ + float(self.intersections + 1) self.y0 = y0 self.intersections += 1 # a textedge is valid only if it extends uninterrupted @@ -141,13 +142,16 @@ class TextEdges(object): """ intersections_sum = { "left": sum( - te.intersections for te in self._textedges["left"] if te.is_valid + te.intersections for te in self._textedges["left"] + if te.is_valid ), "right": sum( - te.intersections for te in self._textedges["right"] if te.is_valid + te.intersections for te in self._textedges["right"] + if te.is_valid ), "middle": sum( - te.intersections for te in self._textedges["middle"] if te.is_valid + te.intersections for te in self._textedges["middle"] + if te.is_valid ), } @@ -292,7 +296,10 @@ class Cell(object): def __repr__(self): return "".format( - round(self.x1, 2), round(self.y1, 2), round(self.x2, 2), round(self.y2, 2) + round(self.x1, 2), + round(self.y1, 2), + round(self.x2, 2), + round(self.y2, 2) ) @property @@ -342,7 +349,9 @@ class Table(object): def __init__(self, cols, rows): self.cols = cols self.rows = rows - self.cells = [[Cell(c[0], r[1], c[1], r[0]) for c in cols] for r in rows] + self.cells = [ + [Cell(c[0], r[1], c[1], r[0]) for c in cols] for r in rows + ] self.df = None self.shape = (0, 0) self.accuracy = 0 @@ -579,7 +588,8 @@ class Table(object): Output filepath. """ - kw = {"encoding": "utf-8", "index": False, "header": False, "quoting": 1} + kw = {"encoding": "utf-8", "index": False, "header": False, + "quoting": 1} kw.update(kwargs) self.df.to_csv(path, **kw) @@ -616,6 +626,7 @@ class Table(object): "encoding": "utf-8", } kw.update(kwargs) + # pylint: disable=abstract-class-instantiated writer = pd.ExcelWriter(path) self.df.to_excel(writer, **kw) writer.save() @@ -692,7 +703,8 @@ class TableList(object): ext = kwargs.get("ext") for table in self._tables: filename = os.path.join( - "{}-page-{}-table-{}{}".format(root, table.page, table.order, ext) + "{}-page-{}-table-{}{}".format(root, table.page, table.order, + ext) ) filepath = os.path.join(dirname, filename) to_format = self._format_func(table, f) @@ -707,7 +719,10 @@ class TableList(object): with zipfile.ZipFile(zipname, "w", allowZip64=True) as z: for table in self._tables: filename = os.path.join( - "{}-page-{}-table-{}{}".format(root, table.page, table.order, ext) + "{}-page-{}-table-{}{}".format(root, + table.page, + table.order, + ext) ) filepath = os.path.join(dirname, filename) z.write(filepath, os.path.basename(filepath)) @@ -739,10 +754,12 @@ class TableList(object): self._compress_dir(**kwargs) elif f == "excel": filepath = os.path.join(dirname, basename) + # pylint: disable=abstract-class-instantiated writer = pd.ExcelWriter(filepath) for table in self._tables: sheet_name = "page-{}-table-{}".format(table.page, table.order) - table.df.to_excel(writer, sheet_name=sheet_name, encoding="utf-8") + table.df.to_excel(writer, sheet_name=sheet_name, + encoding="utf-8") writer.save() if compress: zipname = os.path.join(os.path.dirname(path), root) + ".zip" diff --git a/camelot/handlers.py b/camelot/handlers.py index 3a6d663..a689ee5 100644 --- a/camelot/handlers.py +++ b/camelot/handlers.py @@ -113,14 +113,20 @@ class PDFHandler(object): outfile.addPage(p) with open(fpath, "wb") as f: outfile.write(f) - layout, dim = get_page_layout(fpath) + layout, __ = get_page_layout(fpath) # fix rotated PDF chars = get_text_objects(layout, ltype="char") horizontal_text = get_text_objects(layout, ltype="horizontal_text") vertical_text = get_text_objects(layout, ltype="vertical_text") rotation = get_rotation(chars, horizontal_text, vertical_text) if rotation != "": - fpath_new = "".join([froot.replace("page", "p"), "_rotated", fext]) + fpath_new = "".join( + [ + froot.replace("page", "p"), + "_rotated", + fext + ] + ) os.rename(fpath, fpath_new) infile = PdfFileReader(open(fpath_new, "rb"), strict=False) if infile.isEncrypted: @@ -136,7 +142,8 @@ class PDFHandler(object): outfile.write(f) def parse( - self, flavor="lattice", suppress_stdout=False, layout_kwargs={}, **kwargs + self, flavor="lattice", suppress_stdout=False, layout_kwargs=None, + **kwargs ): """Extracts tables by calling parser.get_tables on all single page PDFs. @@ -149,7 +156,7 @@ class PDFHandler(object): suppress_stdout : str (default: False) Suppress logs and warnings. layout_kwargs : dict, optional (default: {}) - A dict of `pdfminer.layout.LAParams `_ kwargs. + A dict of `pdfminer.layout.LAParams `_ kwargs. # noqa kwargs : dict See camelot.read_pdf kwargs. @@ -159,17 +166,21 @@ class PDFHandler(object): List of tables found in PDF. """ + layout_kwargs = layout_kwargs or {} tables = [] with TemporaryDirectory() as tempdir: for p in self.pages: self._save_page(self.filepath, p, tempdir) pages = [ - os.path.join(tempdir, "page-{0}.pdf".format(p)) for p in self.pages + os.path.join(tempdir, "page-{0}.pdf".format(p)) + for p in self.pages ] - parser = Lattice(**kwargs) if flavor == "lattice" else Stream(**kwargs) + parser = Lattice(**kwargs) \ + if flavor == "lattice" else Stream(**kwargs) for p in pages: t = parser.extract_tables( - p, suppress_stdout=suppress_stdout, layout_kwargs=layout_kwargs + p, suppress_stdout=suppress_stdout, + layout_kwargs=layout_kwargs ) tables.extend(t) return TableList(sorted(tables)) diff --git a/camelot/io.py b/camelot/io.py index a27a7c6..49d05cb 100644 --- a/camelot/io.py +++ b/camelot/io.py @@ -12,7 +12,7 @@ def read_pdf( password=None, flavor="lattice", suppress_stdout=False, - layout_kwargs={}, + layout_kwargs=None, **kwargs ): """Read PDF and return extracted tables. @@ -80,16 +80,16 @@ def read_pdf( Size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, and so on. - For more information, refer `OpenCV's adaptiveThreshold `_. + For more information, refer `OpenCV's adaptiveThreshold `_. # noqa threshold_constant* : int, optional (default: -2) Constant subtracted from the mean or weighted mean. Normally, it is positive but may be zero or negative as well. - For more information, refer `OpenCV's adaptiveThreshold `_. + For more information, refer `OpenCV's adaptiveThreshold `_. # noqa iterations* : int, optional (default: 0) Number of times for erosion/dilation is applied. - For more information, refer `OpenCV's dilate `_. + For more information, refer `OpenCV's dilate `_. # noqa resolution* : int, optional (default: 300) Resolution used for PDF to PNG conversion. @@ -98,6 +98,7 @@ def read_pdf( tables : camelot.core.TableList """ + layout_kwargs = layout_kwargs or {} if flavor not in ["lattice", "stream"]: raise NotImplementedError( "Unknown flavor specified." " Use either 'lattice' or 'stream'" diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index cb1bc21..5713625 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -12,9 +12,18 @@ class BaseParser(object): def _generate_layout(self, filename, layout_kwargs): self.filename = filename self.layout_kwargs = layout_kwargs - self.layout, self.dimensions = get_page_layout(filename, **layout_kwargs) + self.layout, self.dimensions = get_page_layout( + filename, + **layout_kwargs + ) self.images = get_text_objects(self.layout, ltype="image") - self.horizontal_text = get_text_objects(self.layout, ltype="horizontal_text") - self.vertical_text = get_text_objects(self.layout, ltype="vertical_text") + self.horizontal_text = get_text_objects( + self.layout, + ltype="horizontal_text" + ) + self.vertical_text = get_text_objects( + self.layout, + ltype="vertical_text" + ) self.pdf_width, self.pdf_height = self.dimensions self.rootname, __ = os.path.splitext(self.filename) diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index 197ff9f..3a40f47 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -2,14 +2,10 @@ from __future__ import division import os -import sys import copy -import locale import logging import warnings -import subprocess -import numpy as np import pandas as pd from .base import BaseParser @@ -80,7 +76,7 @@ class Lattice(BaseParser): Size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, and so on. - For more information, refer `OpenCV's adaptiveThreshold `_. + For more information, refer `OpenCV's adaptiveThreshold `_. # noqa threshold_constant : int, optional (default: -2) Constant subtracted from the mean or weighted mean. Normally, it is positive but may be zero or negative as well. @@ -102,7 +98,7 @@ class Lattice(BaseParser): process_background=False, line_scale=15, copy_text=None, - shift_text=["l", "t"], + shift_text=None, split_text=False, flag_size=False, strip_text="", @@ -114,6 +110,7 @@ class Lattice(BaseParser): resolution=300, **kwargs ): + shift_text = shift_text or ["l", "t"] self.table_regions = table_regions self.table_areas = table_areas self.process_background = process_background @@ -217,8 +214,7 @@ class Lattice(BaseParser): ) gs_call = gs_call.encode().split() null = open(os.devnull, "wb") - with Ghostscript(*gs_call, stdout=null) as gs: - pass + Ghostscript(*gs_call, stdout=null) null.close() def _generate_table_bbox(self): @@ -247,7 +243,8 @@ class Lattice(BaseParser): image_height_scaler = image_height / float(self.pdf_height) pdf_width_scaler = self.pdf_width / float(image_width) pdf_height_scaler = self.pdf_height / float(image_height) - image_scalers = (image_width_scaler, image_height_scaler, self.pdf_height) + image_scalers = (image_width_scaler, + image_height_scaler, self.pdf_height) pdf_scalers = (pdf_width_scaler, pdf_height_scaler, image_height) if self.table_areas is None: @@ -291,7 +288,11 @@ class Lattice(BaseParser): self.table_bbox_unscaled = copy.deepcopy(table_bbox) - self.table_bbox, self.vertical_segments, self.horizontal_segments = scale_image( + [ + self.table_bbox, + self.vertical_segments, + self.horizontal_segments + ] = scale_image( table_bbox, vertical_segments, horizontal_segments, pdf_scalers ) @@ -315,7 +316,10 @@ class Lattice(BaseParser): rows.extend([tk[1], tk[3]]) # sort horizontal and vertical segments cols = merge_close_lines(sorted(cols), line_tol=self.line_tol) - rows = merge_close_lines(sorted(rows, reverse=True), line_tol=self.line_tol) + rows = merge_close_lines( + sorted(rows, reverse=True), + line_tol=self.line_tol + ) # make grid using x and y coord of shortlisted rows and cols cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] rows = [(rows[i], rows[i + 1]) for i in range(0, len(rows) - 1)] @@ -359,7 +363,10 @@ class Lattice(BaseParser): accuracy = compute_accuracy([[100, pos_errors]]) if self.copy_text is not None: - table = Lattice._copy_spanning_text(table, copy_text=self.copy_text) + table = Lattice._copy_spanning_text( + table, + copy_text=self.copy_text + ) data = table.data table.df = pd.DataFrame(data) @@ -383,20 +390,28 @@ class Lattice(BaseParser): return table - def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): + def extract_tables( + self, + filename, + suppress_stdout=False, + layout_kwargs=None + ): + layout_kwargs = layout_kwargs or {} self._generate_layout(filename, layout_kwargs) + rootname = os.path.basename(self.rootname) if not suppress_stdout: - logger.info("Processing {}".format(os.path.basename(self.rootname))) + logger.info("Processing {rootname}".format(rootname=rootname)) if not self.horizontal_text: if self.images: warnings.warn( - "{} is image-based, camelot only works on" - " text-based pages.".format(os.path.basename(self.rootname)) + "{rootname} is image-based, " + "camelot only works on text-based pages." + .format(rootname=rootname) ) else: warnings.warn( - "No tables found on {}".format(os.path.basename(self.rootname)) + "No tables found on {rootname}".format(rootname=rootname) ) return [] @@ -408,8 +423,10 @@ class Lattice(BaseParser): for table_idx, tk in enumerate( sorted(self.table_bbox.keys(), key=lambda x: x[1], reverse=True) ): - cols, rows, v_s, h_s = self._generate_columns_and_rows(table_idx, tk) - table = self._generate_table(table_idx, cols, rows, v_s=v_s, h_s=h_s) + cols, rows, v_s, h_s = self._generate_columns_and_rows( + table_idx, tk) + table = self._generate_table( + table_idx, cols, rows, v_s=v_s, h_s=h_s) table._bbox = tk _tables.append(table) diff --git a/camelot/parsers/stream.py b/camelot/parsers/stream.py index 33f2fe5..4af0a0e 100644 --- a/camelot/parsers/stream.py +++ b/camelot/parsers/stream.py @@ -10,7 +10,8 @@ import pandas as pd from .base import BaseParser from ..core import TextEdges, Table -from ..utils import text_in_bbox, get_table_index, compute_accuracy, compute_whitespace +from ..utils import (text_in_bbox, get_table_index, compute_accuracy, + compute_whitespace) logger = logging.getLogger("camelot") @@ -70,6 +71,9 @@ class Stream(BaseParser): ): self.table_regions = table_regions self.table_areas = table_areas + self.table_bbox = None + self.t_bbox = None + self.textedges = [] self.columns = columns self._validate_columns() self.split_text = split_text @@ -95,10 +99,10 @@ class Stream(BaseParser): Tuple (x0, y0, x1, y1) in pdf coordinate space. """ - xmin = min([t.x0 for direction in t_bbox for t in t_bbox[direction]]) - ymin = min([t.y0 for direction in t_bbox for t in t_bbox[direction]]) - xmax = max([t.x1 for direction in t_bbox for t in t_bbox[direction]]) - ymax = max([t.y1 for direction in t_bbox for t in t_bbox[direction]]) + xmin = min(t.x0 for direction in t_bbox for t in t_bbox[direction]) + ymin = min(t.y0 for direction in t_bbox for t in t_bbox[direction]) + xmax = max(t.x1 for direction in t_bbox for t in t_bbox[direction]) + ymax = max(t.y1 for direction in t_bbox for t in t_bbox[direction]) text_bbox = (xmin, ymin, xmax, ymax) return text_bbox @@ -119,21 +123,25 @@ class Stream(BaseParser): Two-dimensional list of text objects grouped into rows. """ - row_y = 0 + row_y = None rows = [] temp = [] - for t in text: + non_empty_text = [t for t in text if t.get_text().strip()] + for t in non_empty_text: # is checking for upright necessary? - # if t.get_text().strip() and all([obj.upright for obj in t._objs if - # type(obj) is LTChar]): - if t.get_text().strip(): - if not np.isclose(row_y, t.y0, atol=row_tol): - rows.append(sorted(temp, key=lambda t: t.x0)) - temp = [] - row_y = t.y0 - temp.append(t) + # if t.get_text().strip() and all([obj.upright \ + # for obj in t._objs + # if type(obj) is LTChar]): + if row_y is None: + row_y = t.y0 + elif not np.isclose(row_y, t.y0, atol=row_tol): + rows.append(sorted(temp, key=lambda t: t.x0)) + temp = [] + # We update the row's bottom as we go, to be forgiving if there + # is a gradual change across multiple columns. + row_y = t.y0 + temp.append(t) rows.append(sorted(temp, key=lambda t: t.x0)) - __ = rows.pop(0) # TODO: hacky return rows @staticmethod @@ -170,7 +178,8 @@ class Stream(BaseParser): merged.append(higher) elif column_tol < 0: if higher[0] <= lower[1]: - if np.isclose(higher[0], lower[1], atol=abs(column_tol)): + if np.isclose(higher[0], lower[1], + atol=abs(column_tol)): merged.append(higher) else: upper_bound = max(lower[1], higher[1]) @@ -198,10 +207,13 @@ class Stream(BaseParser): """ row_mids = [ - sum([(t.y0 + t.y1) / 2 for t in r]) / len(r) if len(r) > 0 else 0 + sum((t.y0 + t.y1) / 2 for t in r) / len(r) if len(r) > 0 else 0 for r in rows_grouped ] - rows = [(row_mids[i] + row_mids[i - 1]) / 2 for i in range(1, len(row_mids))] + rows = [ + (row_mids[i] + row_mids[i - 1]) / 2 + for i in range(1, len(row_mids)) + ] rows.insert(0, text_y_max) rows.append(text_y_min) rows = [(rows[i], rows[i + 1]) for i in range(0, len(rows) - 1)] @@ -230,7 +242,9 @@ class Stream(BaseParser): text = Stream._group_rows(text, row_tol=row_tol) elements = [len(r) for r in text] new_cols = [ - (t.x0, t.x1) for r in text if len(r) == max(elements) for t in r + (t.x0, t.x1) + for r in text if len(r) == max(elements) + for t in r ] cols.extend(Stream._merge_columns(sorted(new_cols))) return cols @@ -262,12 +276,13 @@ class Stream(BaseParser): def _validate_columns(self): if self.table_areas is not None and self.columns is not None: if len(self.table_areas) != len(self.columns): - raise ValueError("Length of table_areas and columns" " should be equal") + raise ValueError("Length of table_areas and columns" + " should be equal") def _nurminen_table_detection(self, textlines): """A general implementation of the table detection algorithm described by Anssi Nurminen's master's thesis. - Link: https://dspace.cc.tut.fi/dpub/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3 + Link: https://dspace.cc.tut.fi/dpub/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3 # noqa Assumes that tables are situated relatively far apart vertically. @@ -284,7 +299,7 @@ class Stream(BaseParser): # guess table areas using textlines and relevant edges table_bbox = textedges.get_table_areas(textlines, relevant_textedges) # treat whole page as table area if no table areas found - if not len(table_bbox): + if not table_bbox: table_bbox = {(0, 0, self.pdf_width, self.pdf_height): None} return table_bbox @@ -302,7 +317,8 @@ class Stream(BaseParser): y1 = float(y1) x2 = float(x2) y2 = float(y2) - region_text = text_in_bbox((x1, y2, x2, y1), self.horizontal_text) + region_text = text_in_bbox( + (x1, y2, x2, y1), self.horizontal_text) hor_text.extend(region_text) # find tables based on nurminen's detection algorithm table_bbox = self._nurminen_table_detection(hor_text) @@ -328,8 +344,10 @@ class Stream(BaseParser): self.t_bbox = t_bbox - text_x_min, text_y_min, text_x_max, text_y_max = self._text_bbox(self.t_bbox) - rows_grouped = self._group_rows(self.t_bbox["horizontal"], row_tol=self.row_tol) + text_x_min, text_y_min, text_x_max, text_y_max = \ + self._text_bbox(self.t_bbox) + rows_grouped = self._group_rows( + self.t_bbox["horizontal"], row_tol=self.row_tol) rows = self._join_rows(rows_grouped, text_y_max, text_y_min) elements = [len(r) for r in rows_grouped] @@ -354,14 +372,23 @@ class Stream(BaseParser): # see if the list contains elements, if yes, then use # the mode after removing 1s elements = list(filter(lambda x: x != 1, elements)) - if len(elements): + if elements: ncols = max(set(elements), key=elements.count) else: warnings.warn( - "No tables found in table area {}".format(table_idx + 1) + "No tables found in table area {}" + .format(table_idx + 1) ) - cols = [(t.x0, t.x1) for r in rows_grouped if len(r) == ncols for t in r] - cols = self._merge_columns(sorted(cols), column_tol=self.column_tol) + cols = [ + (t.x0, t.x1) + for r in rows_grouped + if len(r) == ncols + for t in r + ] + cols = self._merge_columns( + sorted(cols), + column_tol=self.column_tol + ) inner_text = [] for i in range(1, len(cols)): left = cols[i - 1][1] @@ -431,23 +458,30 @@ class Stream(BaseParser): return table - def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): + def extract_tables(self, filename, suppress_stdout=False, + layout_kwargs=None): + layout_kwargs = layout_kwargs or {} self._generate_layout(filename, layout_kwargs) if not suppress_stdout: - logger.info("Processing {}".format(os.path.basename(self.rootname))) + logger.info("Processing {}".format( + os.path.basename(self.rootname))) if not self.horizontal_text: if self.images: warnings.warn( "{} is image-based, camelot only works on" - " text-based pages.".format(os.path.basename(self.rootname)) + " text-based pages.".format( + os.path.basename(self.rootname)) ) else: warnings.warn( - "No tables found on {}".format(os.path.basename(self.rootname)) + "No tables found on {}".format( + os.path.basename(self.rootname)) ) return [] + # Identify plausible areas within the doc where tables lie, + # populate table_bbox keys with these areas. self._generate_table_bbox() _tables = [] diff --git a/camelot/plotting.py b/camelot/plotting.py index 5e0dc0c..51928e9 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -37,7 +37,7 @@ class PlotMethods(object): raise NotImplementedError( "Lattice flavor does not support kind='{}'".format(kind) ) - elif table.flavor == "stream" and kind in ["joint", "line"]: + elif table.flavor == "stream" and kind in ["line"]: raise NotImplementedError( "Stream flavor does not support kind='{}'".format(kind) ) @@ -64,7 +64,13 @@ class PlotMethods(object): for t in table._text: xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) - ax.add_patch(patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1])) + ax.add_patch( + patches.Rectangle( + (t[0], t[1]), + t[2] - t[0], + t[3] - t[1] + ) + ) ax.set_xlim(min(xs) - 10, max(xs) + 10) ax.set_ylim(min(ys) - 10, max(ys) + 10) return fig @@ -132,7 +138,8 @@ class PlotMethods(object): for t in table_bbox.keys(): ax.add_patch( patches.Rectangle( - (t[0], t[1]), t[2] - t[0], t[3] - t[1], fill=False, color="red" + (t[0], t[1]), t[2] - t[0], t[3] - t[1], + fill=False, color="red" ) ) if not _FOR_LATTICE: @@ -164,7 +171,10 @@ class PlotMethods(object): xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) ax.add_patch( - patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], color="blue") + patches.Rectangle( + (t[0], t[1]), t[2] - t[0], t[3] - t[1], + color="blue" + ) ) ax.set_xlim(min(xs) - 10, max(xs) + 10) ax.set_ylim(min(ys) - 10, max(ys) + 10) diff --git a/camelot/utils.py b/camelot/utils.py index e7ad848..c3bf723 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -30,6 +30,9 @@ from pdfminer.layout import ( ) +# pylint: disable=import-error +# PyLint will evaluate both branches, and will necessarily complain about one +# of them. PY3 = sys.version_info[0] >= 3 if PY3: from urllib.request import urlopen @@ -310,7 +313,8 @@ def get_rotation(chars, horizontal_text, vertical_text): if hlen < vlen: clockwise = sum(t.matrix[1] < 0 and t.matrix[2] > 0 for t in chars) anticlockwise = sum(t.matrix[1] > 0 and t.matrix[2] < 0 for t in chars) - rotation = "anticlockwise" if clockwise < anticlockwise else "clockwise" + rotation = "anticlockwise" if clockwise < anticlockwise \ + else "clockwise" return rotation @@ -341,12 +345,16 @@ def segments_in_bbox(bbox, v_segments, h_segments): v_s = [ v for v in v_segments - if v[1] > lb[1] - 2 and v[3] < rt[1] + 2 and lb[0] - 2 <= v[0] <= rt[0] + 2 + if v[1] > lb[1] - 2 and + v[3] < rt[1] + 2 and + lb[0] - 2 <= v[0] <= rt[0] + 2 ] h_s = [ h for h in h_segments - if h[0] > lb[0] - 2 and h[2] < rt[0] + 2 and lb[1] - 2 <= h[1] <= rt[1] + 2 + if h[0] > lb[0] - 2 and + h[2] < rt[0] + 2 and + lb[1] - 2 <= h[1] <= rt[1] + 2 ] return v_s, h_s @@ -464,10 +472,10 @@ def flag_font_size(textline, direction, strip_text=""): for t in textline if not isinstance(t, LTAnno) ] - l = [np.round(size, decimals=6) for text, size in d] - if len(set(l)) > 1: + text_sizes = [np.round(size, decimals=6) for text, size in d] + if len(set(text_sizes)) > 1: flist = [] - min_size = min(l) + min_size = min(text_sizes) for key, chars in groupby(d, itemgetter(1)): if key == min_size: fchars = [t[0] for t in chars] @@ -511,7 +519,6 @@ def split_textline(table, textline, direction, flag_size=False, strip_text=""): of row/column and text is the an lttextline substring. """ - idx = 0 cut_text = [] bbox = textline.bbox try: @@ -528,7 +535,9 @@ def split_textline(table, textline, direction, flag_size=False, strip_text=""): ] r = r_idx[0] x_cuts = [ - (c, table.cells[r][c].x2) for c in x_overlap if table.cells[r][c].right + (c, table.cells[r][c].x2) + for c in x_overlap + if table.cells[r][c].right ] if not x_cuts: x_cuts = [(x_overlap[0], table.cells[r][-1].x2)] @@ -561,7 +570,9 @@ def split_textline(table, textline, direction, flag_size=False, strip_text=""): ] c = c_idx[0] y_cuts = [ - (r, table.cells[r][c].y1) for r in y_overlap if table.cells[r][c].bottom + (r, table.cells[r][c].y1) + for r in y_overlap + if table.cells[r][c].bottom ] if not y_cuts: y_cuts = [(y_overlap[0], table.cells[-1][c].y1)] @@ -644,9 +655,8 @@ def get_table_index( """ r_idx, c_idx = [-1] * 2 for r in range(len(table.rows)): - if (t.y0 + t.y1) / 2.0 < table.rows[r][0] and (t.y0 + t.y1) / 2.0 > table.rows[ - r - ][1]: + if (t.y0 + t.y1) / 2.0 < table.rows[r][0] and \ + (t.y0 + t.y1) / 2.0 > table.rows[r][1]: lt_col_overlap = [] for c in table.cols: if c[0] <= t.x1 and c[1] >= t.x0: @@ -681,7 +691,9 @@ def get_table_index( X = 1.0 if abs(t.x0 - t.x1) == 0.0 else abs(t.x0 - t.x1) Y = 1.0 if abs(t.y0 - t.y1) == 0.0 else abs(t.y0 - t.y1) charea = X * Y - error = ((X * (y0_offset + y1_offset)) + (Y * (x0_offset + x1_offset))) / charea + error = ( + (X * (y0_offset + y1_offset)) + (Y * (x0_offset + x1_offset)) + ) / charea if split_text: return ( @@ -697,13 +709,16 @@ def get_table_index( ( r_idx, c_idx, - flag_font_size(t._objs, direction, strip_text=strip_text), + flag_font_size(t._objs, + direction, + strip_text=strip_text), ) ], error, ) else: - return [(r_idx, c_idx, text_strip(t.get_text(), strip_text))], error + return [(r_idx, c_idx, text_strip(t.get_text(), strip_text))], \ + error def compute_accuracy(error_weights): @@ -751,7 +766,6 @@ def compute_whitespace(d): """ whitespace = 0 - r_nempty_cells, c_nempty_cells = [], [] for i in d: for j in i: if j.strip() == "": @@ -811,6 +825,7 @@ def get_page_layout( width = layout.bbox[2] height = layout.bbox[3] dim = (width, height) + break # we assume a single page pdf return layout, dim diff --git a/docs/index.rst b/docs/index.rst index e6e2f23..950240e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -33,6 +33,9 @@ Release v\ |version|. (:ref:`Installation `) .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/ambv/black +.. image:: https://img.shields.io/badge/continous%20quality-deepsource-lightgrey + :target: https://deepsource.io/gh/camelot-dev/camelot/?ref=repository-badge + **Camelot** is a Python library that makes it easy for *anyone* to extract tables from PDF files! .. note:: You can also check out `Excalibur`_, which is a web interface for Camelot! @@ -86,6 +89,13 @@ See `comparison with other PDF table extraction libraries and tools`_. .. _ETL and data analysis workflows: https://gist.github.com/vinayak-mehta/e5949f7c2410a0e12f25d3682dc9e873 .. _comparison with other PDF table extraction libraries and tools: https://github.com/camelot-dev/camelot/wiki/Comparison-with-other-PDF-Table-Extraction-libraries-and-tools +Support us on OpenCollective +---------------------------- + +If Camelot helped you extract tables from PDFs, please consider supporting its development by `becoming a backer or a sponsor on OpenCollective`_! + +.. _becoming a backer or a sponsor on OpenCollective: https://opencollective.com/camelot + The User Guide -------------- diff --git a/docs/user/how-it-works.rst b/docs/user/how-it-works.rst index 13004da..9c198ba 100644 --- a/docs/user/how-it-works.rst +++ b/docs/user/how-it-works.rst @@ -20,7 +20,7 @@ Stream can be used to parse tables that have whitespaces between cells to simula 3. The number of columns inside each table area are then guessed. This is done by calculating the mode of number of words in each text row. Based on this mode, words in each text row are chosen to calculate a list of column *x* ranges. -4. Words that lie inside/outside the current column *x* ranges are then used to extend extend the current list of columns. +4. Words that lie inside/outside the current column *x* ranges are then used to extend the current list of columns. 5. Finally, a table is formed using the text rows' *y* ranges and column *x* ranges and words found on the page are assigned to the table's cells based on their *x* and *y* coordinates. diff --git a/docs/user/install.rst b/docs/user/install.rst index b3d4813..4bbf491 100644 --- a/docs/user/install.rst +++ b/docs/user/install.rst @@ -13,7 +13,7 @@ The easiest way to install Camelot is to install it with `conda`_, which is a pa $ conda install -c conda-forge camelot-py -.. note:: Camelot is available for Python 2.7, 3.5, 3.6 and 3.7 on Linux, macOS and Windows. For Windows, you will need to install ghostscript which you can get from their `downloads page`_. +.. note:: Camelot is available for Python 3.5, 3.6 and 3.7 on Linux, macOS and Windows. For Windows, you will need to install ghostscript which you can get from their `downloads page`_. .. _conda: https://conda.io/docs/ .. _Anaconda: http://docs.continuum.io/anaconda/ diff --git a/requirements.txt b/requirements.txt index f815e26..764c037 100755 --- a/requirements.txt +++ b/requirements.txt @@ -4,5 +4,5 @@ numpy>=1.13.3 opencv-python>=3.4.2.17 openpyxl>=2.5.8 pandas>=0.23.4 -pdfminer.six>=20170720 +pdfminer.six>=20200402 PyPDF2>=1.26.0 diff --git a/setup.py b/setup.py index b83f566..b2e90f5 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ requires = [ 'numpy>=1.13.3', 'openpyxl>=2.5.8', 'pandas>=0.23.4', - 'pdfminer.six>=20170720', + 'pdfminer.six>=20200402', 'PyPDF2>=1.26.0' ] @@ -69,9 +69,8 @@ def setup_package(): }, classifiers=[ # Trove classifiers - # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers + # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers # noqa 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7' diff --git a/tests/data.py b/tests/data.py index 3338a81..1017160 100755 --- a/tests/data.py +++ b/tests/data.py @@ -4,16 +4,6 @@ from __future__ import unicode_literals data_stream = [ - [ - "", - "Table: 5 Public Health Outlay 2012-13 (Budget Estimates) (Rs. in 000)", - "", - "", - "", - "", - "", - "", - ], ["States-A", "Revenue", "", "Capital", "", "Total", "Others(1)", "Total"], ["", "", "", "", "", "Revenue &", "", ""], ["", "Medical &", "Family", "Medical &", "Family", "", "", ""], @@ -80,7 +70,8 @@ data_stream = [ "5,000", "33,051,480", ], - ["Goa", "4,055,567", "110,000", "330,053", "0", "4,495,620", "12,560", "4,508,180"], + ["Goa", "4,055,567", "110,000", "330,053", "0", "4,495,620", "12,560", + "4,508,180"], [ "Gujarat", "26,328,400", @@ -171,7 +162,8 @@ data_stream = [ "313,762", "67,044,159", ], - ["Manipur", "2,494,600", "187,700", "897,400", "0", "3,579,700", "0", "3,579,700"], + ["Manipur", "2,494,600", "187,700", "897,400", "0", "3,579,700", + "0", "3,579,700"], [ "Meghalaya", "2,894,093", @@ -236,7 +228,8 @@ data_stream = [ data_stream_table_rotated = [ [ - "Table 21 Current use of contraception by background characteristics\u2014Continued", + "Table 21 Current use of contraception by background characteristics" + "\u2014Continued", "", "", "", @@ -330,7 +323,8 @@ data_stream_table_rotated = [ "Total", "women", ], - ["Caste/tribe", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + ["Caste/tribe", "", "", "", "", "", "", "", "", "", "", "", "", "", "", + "", ""], [ "Scheduled caste", "74.8", @@ -407,7 +401,8 @@ data_stream_table_rotated = [ "100.0", "3,319", ], - ["Wealth index", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + ["Wealth index", "", "", "", "", "", "", "", "", "", "", "", "", + "", "", "", ""], [ "Lowest", "64.5", @@ -830,7 +825,8 @@ data_stream_table_rotated = [ data_stream_two_tables_1 = [ [ - "[In thousands (11,062.6 represents 11,062,600) For year ending December 31. Based on Uniform Crime Reporting (UCR)", + "Program. Represents arrests reported (not charged) by 12,910 " + "agencies with a total population of 247,526,916 as estimated", "", "", "", @@ -842,7 +838,8 @@ data_stream_two_tables_1 = [ "", ], [ - "Program. Represents arrests reported (not charged) by 12,910 agencies with a total population of 247,526,916 as estimated", + "by the FBI. Some persons may be arrested more than once during a " + "year, therefore, the data in this table, in some cases,", "", "", "", @@ -854,19 +851,8 @@ data_stream_two_tables_1 = [ "", ], [ - "by the FBI. Some persons may be arrested more than once during a year, therefore, the data in this table, in some cases,", - "", - "", - "", - "", - "", - "", - "", - "", - "", - ], - [ - "could represent multiple arrests of the same person. See text, this section and source]", + "could represent multiple arrests of the same person. See text, " + "this section and source]", "", "", "", @@ -903,7 +889,8 @@ data_stream_two_tables_1 = [ "and over", ], [ - "Total .\n .\n . . . . . .\n . .\n . .\n . .\n . .\n . .\n . .\n . .\n . . .", + "Total .\n .\n . . . . . .\n . .\n . .\n . .\n . .\n . " + ".\n . .\n . .\n . . .", "11,062 .6", "1,540 .0", "9,522 .6", @@ -915,7 +902,8 @@ data_stream_two_tables_1 = [ "2,330 .9", ], [ - "Violent crime . . . . . . . .\n . .\n . .\n . .\n . .\n . .", + "Violent crime . . . . . . . .\n . .\n . .\n . .\n . " + ".\n . .", "467 .9", "69 .1", "398 .8", @@ -976,7 +964,8 @@ data_stream_two_tables_1 = [ "64.5", ], [ - "Property crime . . . .\n . .\n . . .\n . . .\n .\n . . . .", + "Property crime . . . .\n . .\n . . .\n . . .\n .\n . . " + ". .", "1,396 .4", "338 .7", "1,057 .7", @@ -1060,7 +1049,8 @@ data_stream_two_tables_1 = [ "25.5", ], [ - "Fraud .\n.\n.\n. .\n. . . .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n.", + "Fraud .\n.\n.\n. .\n. . . .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. " + ".\n.\n.\n.", "173.7", "5.1", "168.5", @@ -1290,19 +1280,8 @@ data_stream_two_tables_1 = [ ], [ "", - "– Represents zero. X Not applicable. 1 Buying, receiving, possessing stolen property. 2 Except forcible rape and prostitution.", - "", - "", - "", - "", - "", - "", - "", - "", - ], - [ - "", - "Source: U.S. Department of Justice, Federal Bureau of Investigation, Uniform Crime Reports, Arrests Master Files.", + "– Represents zero. X Not applicable. 1 Buying, receiving, " + "possessing stolen property. 2 Except forcible rape and prostitution.", "", "", "", @@ -1315,17 +1294,10 @@ data_stream_two_tables_1 = [ ] data_stream_two_tables_2 = [ - [ - "", - "Source: U.S. Department of Justice, Federal Bureau of Investigation, Uniform Crime Reports, Arrests Master Files.", - "", - "", - "", - "", - ], ["Table 325. Arrests by Race: 2009", "", "", "", "", ""], [ - "[Based on Uniform Crime Reporting (UCR) Program. Represents arrests reported (not charged) by 12,371 agencies", + "[Based on Uniform Crime Reporting (UCR) Program. Represents " + "arrests reported (not charged) by 12,371 agencies", "", "", "", @@ -1333,7 +1305,8 @@ data_stream_two_tables_2 = [ "", ], [ - "with a total population of 239,839,971 as estimated by the FBI. See headnote, Table 324]", + "with a total population of 239,839,971 as estimated by the FBI. " + "See headnote, Table 324]", "", "", "", @@ -1344,7 +1317,8 @@ data_stream_two_tables_2 = [ ["Offense charged", "", "", "", "Indian/Alaskan", "Asian Pacific"], ["", "Total", "White", "Black", "Native", "Islander"], [ - "Total .\n .\n .\n .\n . .\n . . .\n . . .\n .\n . . .\n .\n . . .\n . .\n .\n . . .\n .\n .\n .\n . .\n . .\n . .", + "Total .\n .\n .\n .\n . .\n . . .\n . . .\n .\n . . .\n " + ".\n . . .\n . .\n .\n . . .\n .\n .\n .\n . .\n . .\n . .", "10,690,561", "7,389,208", "3,027,153", @@ -1352,7 +1326,8 @@ data_stream_two_tables_2 = [ "123,656", ], [ - "Violent crime . . . . . . . .\n . .\n . .\n . .\n . .\n .\n .\n . .\n . .\n .\n .\n .\n .\n . .", + "Violent crime . . . . . . . .\n . .\n . .\n . .\n . " + ".\n .\n .\n . .\n . .\n .\n .\n .\n .\n . .", "456,965", "268,346", "177,766", @@ -1368,7 +1343,8 @@ data_stream_two_tables_2 = [ "97", ], [ - "Forcible rape . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. .\n.\n.\n.\n.\n. .", + "Forcible rape . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. " + ".\n.\n.\n.\n.\n. .", "16,362", "10,644", "5,319", @@ -1376,7 +1352,8 @@ data_stream_two_tables_2 = [ "230", ], [ - "Robbery . . . . .\n. . . . .\n.\n. . .\n.\n. . .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. . . .", + "Robbery . . . . .\n. . . . .\n.\n. . .\n.\n. . .\n.\n.\n. " + ".\n.\n.\n. .\n.\n.\n. . . .", "100,496", "43,039", "55,742", @@ -1384,7 +1361,8 @@ data_stream_two_tables_2 = [ "989", ], [ - "Aggravated assault . . . . . . . .\n. .\n. .\n.\n.\n.\n.\n. .\n. .\n.\n.\n.", + "Aggravated assault . . . . . . . .\n. .\n. .\n.\n.\n.\n.\n. .\n. " + ".\n.\n.\n.", "330,368", "209,922", "111,904", @@ -1392,7 +1370,8 @@ data_stream_two_tables_2 = [ "3,929", ], [ - "Property crime . . . . .\n . . . . .\n .\n . . .\n .\n . .\n .\n .\n .\n . .\n .\n . .\n .\n .", + "Property crime . . . . .\n . . . . .\n .\n . . .\n .\n " + ". .\n .\n .\n .\n . .\n .\n . .\n .\n .", "1,364,409", "922,139", "406,382", @@ -1400,7 +1379,8 @@ data_stream_two_tables_2 = [ "18,289", ], [ - "Burglary . . .\n. . . . .\n. . .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n. . . .", + "Burglary . . .\n. . . . .\n. . .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. " + ".\n.\n.\n. .\n.\n. . . .", "234,551", "155,994", "74,419", @@ -1408,7 +1388,8 @@ data_stream_two_tables_2 = [ "2,117", ], [ - "Larceny-theft . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. .\n.\n.\n.\n.\n. .", + "Larceny-theft . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. " + ".\n.\n.\n.\n.\n. .", "1,056,473", "719,983", "306,625", @@ -1416,7 +1397,8 @@ data_stream_two_tables_2 = [ "15,219", ], [ - "Motor vehicle theft . . . . . .\n. .\n.\n. . .\n.\n. .\n.\n.\n.\n. .\n.\n. .\n.", + "Motor vehicle theft . . . . . .\n. .\n.\n. . .\n.\n. .\n.\n.\n.\n. " + ".\n.\n. .\n.", "63,919", "39,077", "23,184", @@ -1424,7 +1406,8 @@ data_stream_two_tables_2 = [ "841", ], [ - "Arson .\n. . . .\n. .\n. .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. . . . . .", + "Arson .\n. . . .\n. .\n. .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. " + ".\n.\n.\n. .\n.\n.\n. . . . . .", "9,466", "7,085", "2,154", @@ -1432,7 +1415,8 @@ data_stream_two_tables_2 = [ "112", ], [ - "Other assaults .\n. . . . . . .\n.\n. . .\n.\n. . .\n.\n. .\n.\n.\n.\n. .\n.\n. .\n.", + "Other assaults .\n. . . . . . .\n.\n. . .\n.\n. . .\n.\n. " + ".\n.\n.\n.\n. .\n.\n. .\n.", "1,032,502", "672,865", "332,435", @@ -1440,7 +1424,8 @@ data_stream_two_tables_2 = [ "12,075", ], [ - "Forgery and counterfeiting .\n. . . . . . .\n.\n. .\n.\n.\n.\n. .\n. .\n.", + "Forgery and counterfeiting .\n. . . . . . .\n.\n. .\n.\n.\n.\n. " + ".\n. .\n.", "67,054", "44,730", "21,251", @@ -1448,7 +1433,8 @@ data_stream_two_tables_2 = [ "728", ], [ - "Fraud .\n.\n. . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n. . . . . . .", + "Fraud .\n.\n. . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n. " + ".\n.\n.\n. . . . . . .", "161,233", "108,032", "50,367", @@ -1456,7 +1442,8 @@ data_stream_two_tables_2 = [ "1,519", ], [ - "Embezzlement . . . .\n. . . . .\n.\n. . .\n.\n. . .\n.\n.\n. .\n.\n. .\n.\n.\n.\n.", + "Embezzlement . . . .\n. . . . .\n.\n. . .\n.\n. . .\n.\n.\n. " + ".\n.\n. .\n.\n.\n.\n.", "13,960", "9,208", "4,429", @@ -1472,7 +1459,8 @@ data_stream_two_tables_2 = [ "742", ], [ - "Vandalism . . . . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. .\n.\n.\n.\n. .", + "Vandalism . . . . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n. " + ".\n. .\n.\n.\n.\n. .", "212,173", "157,723", "48,746", @@ -1496,7 +1484,8 @@ data_stream_two_tables_2 = [ "1,413", ], [ - "Sex offenses 1 . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. .\n.\n.\n.\n.\n. .", + "Sex offenses 1 . . . . . . . .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. " + ".\n.\n.\n.\n.\n. .", "60,175", "44,240", "14,347", @@ -1504,7 +1493,8 @@ data_stream_two_tables_2 = [ "873", ], [ - "Drug abuse violations . . . . . . . .\n. . .\n.\n.\n.\n. .\n. .\n.\n.\n.\n.", + "Drug abuse violations . . . . . . . .\n. . .\n.\n.\n.\n. .\n. " + ".\n.\n.\n.\n.", "1,301,629", "845,974", "437,623", @@ -1512,7 +1502,8 @@ data_stream_two_tables_2 = [ "9,444", ], [ - "Gambling . . . . .\n. . . . .\n.\n. . .\n.\n. . .\n. .\n.\n. . .\n.\n.\n.\n.\n. .\n. .", + "Gambling . . . . .\n. . . . .\n.\n. . .\n.\n. . .\n. .\n.\n. . " + ".\n.\n.\n.\n.\n. .\n. .", "8,046", "2,290", "5,518", @@ -1528,7 +1519,8 @@ data_stream_two_tables_2 = [ "624", ], [ - "Driving under the influence . . . . . . .\n. .\n.\n. .\n.\n.\n.\n.\n. .", + "Driving under the influence . . . . . . .\n. .\n.\n. " + ".\n.\n.\n.\n.\n. .", "1,105,401", "954,444", "121,594", @@ -1536,7 +1528,8 @@ data_stream_two_tables_2 = [ "14,460", ], [ - "Liquor laws . . . . . . . .\n. .\n. .\n. .\n. .\n. . .\n.\n.\n.\n. .\n. .\n.\n.\n.\n.", + "Liquor laws . . . . . . . .\n. .\n. .\n. .\n. .\n. . " + ".\n.\n.\n.\n. .\n. .\n.\n.\n.\n.", "444,087", "373,189", "50,431", @@ -1544,7 +1537,8 @@ data_stream_two_tables_2 = [ "5,591", ], [ - "Drunkenness . .\n. . . . . . .\n.\n. . .\n.\n. . .\n.\n.\n.\n. . .\n.\n.\n.\n.\n.\n.", + "Drunkenness . .\n. . . . . . .\n.\n. . .\n.\n. . .\n.\n.\n.\n. . " + ".\n.\n.\n.\n.\n.\n.", "469,958", "387,542", "71,020", @@ -1552,7 +1546,8 @@ data_stream_two_tables_2 = [ "2,844", ], [ - "Disorderly conduct . . .\n. . . . . .\n. .\n. . .\n.\n.\n.\n. .\n. .\n.\n.\n.\n.", + "Disorderly conduct . . .\n. . . . . .\n. .\n. . .\n.\n.\n.\n. .\n. " + ".\n.\n.\n.\n.", "515,689", "326,563", "176,169", @@ -1560,7 +1555,8 @@ data_stream_two_tables_2 = [ "4,174", ], [ - "Vagrancy . . .\n. .\n. . . .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. .\n.\n.\n. . . .", + "Vagrancy . . .\n. .\n. . . .\n. .\n.\n. .\n.\n.\n. .\n.\n.\n. " + ".\n.\n.\n. .\n.\n.\n. . . .", "26,347", "14,581", "11,031", @@ -1568,7 +1564,8 @@ data_stream_two_tables_2 = [ "192", ], [ - "All other offenses (except traffic) . .\n. .\n. .\n. .\n.\n.\n.\n. .\n.", + "All other offenses (except traffic) . .\n. .\n. .\n. .\n.\n.\n.\n. " + ".\n.", "2,929,217", "1,937,221", "911,670", @@ -1576,7 +1573,8 @@ data_stream_two_tables_2 = [ "36,446", ], [ - "Suspicion . . .\n. . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n.\n.\n. .\n. . . .", + "Suspicion . . .\n. . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n. " + ".\n.\n.\n.\n.\n. .\n. . . .", "1,513", "677", "828", @@ -1592,7 +1590,8 @@ data_stream_two_tables_2 = [ "1,060", ], [ - "Runaways . . . . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n. .\n. .\n.\n.\n.\n. .", + "Runaways . . . . . . . .\n. .\n. .\n. .\n. .\n. .\n. .\n.\n.\n. " + ".\n. .\n.\n.\n.\n. .", "73,616", "48,343", "19,670", @@ -1600,14 +1599,6 @@ data_stream_two_tables_2 = [ "3,950", ], ["1 Except forcible rape and prostitution.", "", "", "", "", ""], - [ - "", - "Source: U.S. Department of Justice, Federal Bureau of Investigation, “Crime in the United States, Arrests,” September 2010,", - "", - "", - "", - "", - ], ] data_stream_table_areas = [ @@ -1634,10 +1625,12 @@ data_stream_columns = [ "Nombre Localidad", ], ["Entidad", "", "Municipio", "", "Localidad", ""], - ["01", "Aguascalientes", "001", "Aguascalientes", "0094", "Granja Adelita"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0094", + "Granja Adelita"], ["01", "Aguascalientes", "001", "Aguascalientes", "0096", "Agua Azul"], ["01", "Aguascalientes", "001", "Aguascalientes", "0100", "Rancho Alegre"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0102", "Los Arbolitos [Rancho]"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0102", + "Los Arbolitos [Rancho]"], [ "01", "Aguascalientes", @@ -1655,7 +1648,8 @@ data_stream_columns = [ "0112", "Baj\xedo los V\xe1zquez", ], - ["01", "Aguascalientes", "001", "Aguascalientes", "0113", "Baj\xedo de Montoro"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0113", + "Baj\xedo de Montoro"], [ "01", "Aguascalientes", @@ -1697,8 +1691,10 @@ data_stream_columns = [ "Ca\xf1ada Honda [Estaci\xf3n]", ], ["01", "Aguascalientes", "001", "Aguascalientes", "0127", "Los Ca\xf1os"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0128", "El Cari\xf1\xe1n"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0129", "El Carmen [Granja]"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0128", + "El Cari\xf1\xe1n"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0129", + "El Carmen [Granja]"], [ "01", "Aguascalientes", @@ -1733,9 +1729,11 @@ data_stream_columns = [ "El Colorado (El Soyatal)", ], ["01", "Aguascalientes", "001", "Aguascalientes", "0146", "El Conejal"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0157", "Cotorina de Abajo"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0157", + "Cotorina de Abajo"], ["01", "Aguascalientes", "001", "Aguascalientes", "0162", "Coyotes"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0166", "La Huerta (La Cruz)"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0166", + "La Huerta (La Cruz)"], [ "01", "Aguascalientes", @@ -1752,17 +1750,20 @@ data_stream_columns = [ "0171", "Los Cuervos (Los Ojos de Agua)", ], - ["01", "Aguascalientes", "001", "Aguascalientes", "0172", "San Jos\xe9 [Granja]"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0172", + "San Jos\xe9 [Granja]"], ["01", "Aguascalientes", "001", "Aguascalientes", "0176", "La Chiripa"], ["01", "Aguascalientes", "001", "Aguascalientes", "0182", "Dolores"], ["01", "Aguascalientes", "001", "Aguascalientes", "0183", "Los Dolores"], ["01", "Aguascalientes", "001", "Aguascalientes", "0190", "El Duraznillo"], ["01", "Aguascalientes", "001", "Aguascalientes", "0191", "Los Dur\xf3n"], ["01", "Aguascalientes", "001", "Aguascalientes", "0197", "La Escondida"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0201", "Brande Vin [Bodegas]"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0201", + "Brande Vin [Bodegas]"], ["01", "Aguascalientes", "001", "Aguascalientes", "0207", "Valle Redondo"], ["01", "Aguascalientes", "001", "Aguascalientes", "0209", "La Fortuna"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0212", "Lomas del Gachup\xedn"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0212", + "Lomas del Gachup\xedn"], [ "01", "Aguascalientes", @@ -1772,22 +1773,12 @@ data_stream_columns = [ "El Carmen (Gallinas G\xfceras) [Rancho]", ], ["01", "Aguascalientes", "001", "Aguascalientes", "0216", "La Gloria"], - ["01", "Aguascalientes", "001", "Aguascalientes", "0226", "Hacienda Nueva"], + ["01", "Aguascalientes", "001", "Aguascalientes", "0226", + "Hacienda Nueva"], ] data_stream_split_text = [ - [ - "FEB", - "RUAR", - "Y 2014 M27 (BUS)", - "", - "ALPHABETIC LISTING BY T", - "YPE", - "", - "", - "", - "ABLPDM27", - ], + ["FEB", "RUAR", "Y 2014 M27 (BUS)", "", "", "", "", "", "", ""], ["", "", "", "", "OF ACTIVE LICENSES", "", "", "", "", "3/19/2014"], ["", "", "", "", "OKLAHOMA ABLE COMMIS", "SION", "", "", "", ""], ["LICENSE", "", "", "", "PREMISE", "", "", "", "", ""], @@ -1977,7 +1968,18 @@ data_stream_split_text = [ "(872) 825-8309", "2014/04/11", ], - ["", "", "A SENSU JAPANESE", "", "7123 SOUTH 92ND EAST", "", "", "", "", ""], + [ + "", + "", + "A SENSU JAPANESE", + "", + "7123 SOUTH 92ND EAST", + "", + "", + "", + "", + "", + ], [ "625422", "BAW", @@ -2029,7 +2031,18 @@ data_stream_split_text = [ "(580) 928-2700", "2014/09/08", ], - ["", "", "ANDOLINI'S PIZZERIA &", "", "12140 EAST 96TH STREET", "", "", "", "", ""], + [ + "", + "", + "ANDOLINI'S PIZZERIA &", + "", + "12140 EAST 96TH STREET", + "", + "", + "", + "", + "", + ], [ "428377", "BAW", @@ -2148,7 +2161,8 @@ data_stream_flag_size = [ "from SBI", "from", ], - ["", "Debt", "", "", "RBI", "Banks", "LIC", "GIC", "NABARD", "& Other", "NCDC"], + ["", "Debt", "", "", "RBI", "Banks", "LIC", "GIC", "NABARD", "& Other", + "NCDC"], ["", "", "", "", "", "& FIs", "", "", "", "Banks", ""], ["1", "2=", "3", "4", "5", "6=", "7", "8", "9", "10", "11"], ["", "(3 to 6)+14", "", "", "", "(7 to13)", "", "", "", "", ""], @@ -2165,7 +2179,8 @@ data_stream_flag_size = [ "-", "0.25", ], - ["Arunachal Pradesh", "1.23", "1.1", "-", "-", "0.13", "-", "-", "-", "-", "-"], + ["Arunachal Pradesh", "1.23", "1.1", "-", "-", "0.13", "-", "-", "-", + "-", "-"], [ "Assam", "12.69", @@ -2194,8 +2209,10 @@ data_stream_flag_size = [ ], ["Chhattisgarh", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], ["Goa", "1.4", "1.02", "-", "-", "0.38", "0.31", "-", "0.07", "-", "-"], - ["Gujarat", "19.75", "17.1", "-", "-", "2.64", "1.17", "-", "1.11", "-", "0.44"], - ["Haryana", "11.53", "9.67", "-", "0.06", "1.8", "0.55", "-", "0.64", "-", "0.49"], + ["Gujarat", "19.75", "17.1", "-", "-", "2.64", "1.17", "-", "1.11", + "-", "0.44"], + ["Haryana", "11.53", "9.67", "-", "0.06", "1.8", "0.55", "-", "0.64", + "-", "0.49"], [ "Himachal Pradesh", "8.02", @@ -2223,7 +2240,8 @@ data_stream_flag_size = [ "-", ], ["Jharkhand", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], - ["Karnataka", "22.44", "19.59", "-", "-", "2.86", "1.22", "-", "0.89", "-", "0.69"], + ["Karnataka", "22.44", "19.59", "-", "-", "2.86", "1.22", "-", "0.89", + "-", "0.69"], [ "Kerala", "29.03", @@ -2263,11 +2281,16 @@ data_stream_flag_size = [ "0.02", "2.89", ], - ["Manipur", "2.17", "1.61", "-", "0.26", "0.29", "0.08", "-", "-", "-", "0.09"], - ["Meghalaya", "1.36", "1.38", "-", "-", "-0.02", "0.04", "-", "-0.05", "-", "0.03"], - ["Mizoram", "1.17", "0.46", "-", "0.27", "0.43", "0.11", "-", "-", "-", "0.03"], - ["Nagaland", "2.99", "2.6", "-", "-", "0.39", "0.24", "-", "-", "-", "0.04"], - ["Odisha", "34.04", "27.58", "-", "4.4", "2.06", "0.56", "-", "0.66", "-", "0.2"], + ["Manipur", "2.17", "1.61", "-", "0.26", "0.29", "0.08", "-", "-", "-", + "0.09"], + ["Meghalaya", "1.36", "1.38", "-", "-", "-0.02", "0.04", "-", "-0.05", + "-", "0.03"], + ["Mizoram", "1.17", "0.46", "-", "0.27", "0.43", "0.11", "-", "-", + "-", "0.03"], + ["Nagaland", "2.99", "2.6", "-", "-", "0.39", "0.24", "-", "-", "-", + "0.04"], + ["Odisha", "34.04", "27.58", "-", "4.4", "2.06", "0.56", "-", "0.66", + "-", "0.2"], [ "Punjab", "19.18", @@ -2295,8 +2318,10 @@ data_stream_flag_size = [ "0.81", ], ["Sikkim", "0.16", "-", "-", "-", "0.16", "0.03", "-", "-", "-", "0.01"], - ["Tamil Nadu", "34.11", "31.41", "-", "-", "2.7", "1.3", "-", "0.6", "-", "0.68"], - ["Tripura", "2.3", "1.89", "-", "-", "0.41", "0.41", "-", "-0.05", "-", "0.02"], + ["Tamil Nadu", "34.11", "31.41", "-", "-", "2.7", "1.3", "-", "0.6", "-", + "0.68"], + ["Tripura", "2.3", "1.89", "-", "-", "0.41", "0.41", "-", "-0.05", "-", + "0.02"], ["Uttaranchal", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], [ "Uttar Pradesh", @@ -2393,11 +2418,13 @@ data_stream_edge_tol = [ ["Costs", "(0.21)"], ["T\notal investment result per unit", "3.78"], [ - "1 The results cover the period from inception of the Fund at 8 April 2016 through 31 December 2016.", + "1 The results cover the period from inception of the Fund at " + "8 April 2016 through 31 December 2016.", "", ], [ - "2 The result per unit is calculated using the total number of outstanding unit as per the end of the", + "2 The result per unit is calculated using the total number of " + "outstanding unit as per the end of the", "", ], ["period.", ""], @@ -2454,7 +2481,8 @@ data_lattice_table_rotated = [ "Men", "Women", ], - ["Kerala", "5738", "6633", "8864", "8297", "245", "2161", "3195", "1645", "2391"], + ["Kerala", "5738", "6633", "8864", "8297", "245", "2161", "3195", "1645", + "2391"], [ "Tamil Nadu", "7387", @@ -2503,11 +2531,16 @@ data_lattice_table_rotated = [ "1417", "1599", ], - ["Gujarat", "4403", "5374", "4866", "9645", "477", "2687", "3021", "2122", "2503"], - ["Madhya Pradesh", "*", "*", "*", "7942", "470", "1965", "2150", "1579", "1709"], - ["Orissa", "3756", "5540", "12024", "8473", "398", "2040", "2624", "1093", "1628"], - ["West Bengal", "*", "*", "*", "8047", "423", "2058", "2743", "1413", "2027"], - ["Uttar Pradesh", "*", "*", "*", "9860", "581", "2139", "2415", "1185", "1366"], + ["Gujarat", "4403", "5374", "4866", "9645", "477", "2687", "3021", "2122", + "2503"], + ["Madhya Pradesh", "*", "*", "*", "7942", "470", "1965", "2150", "1579", + "1709"], + ["Orissa", "3756", "5540", "12024", "8473", "398", "2040", "2624", "1093", + "1628"], + ["West Bengal", "*", "*", "*", "8047", "423", "2058", "2743", "1413", + "2027"], + ["Uttar Pradesh", "*", "*", "*", "9860", "581", "2139", "2415", "1185", + "1366"], [ "Pooled", "38742", @@ -2573,7 +2606,8 @@ data_lattice_two_tables_2 = [ ] data_lattice_table_regions = [ - ["Età dell’Assicurato \nall’epoca del decesso", "Misura % di \nmaggiorazione"], + ["Età dell’Assicurato \nall’epoca del decesso", + "Misura % di \nmaggiorazione"], ["18-75", "1,00%"], ["76-80", "0,50%"], ["81 in poi", "0,10%"], @@ -2596,10 +2630,12 @@ data_lattice_table_areas = [ ["Kerala", "2400", "7.2", "0.5", "25.3", "20.1", "41.5", "5.5", ""], ["Tamil Nadu", "2400", "21.4", "2.3", "8.8", "35.5", "25.8", "6.2", ""], ["Karnataka", "2399", "37.4", "2.8", "12.5", "18.3", "23.1", "5.8", ""], - ["Andhra Pradesh", "2400", "54.0", "1.7", "8.4", "13.2", "18.8", "3.9", ""], + ["Andhra Pradesh", "2400", "54.0", "1.7", "8.4", "13.2", "18.8", "3.9", + ""], ["Maharashtra", "2400", "22.0", "0.9", "17.3", "20.3", "32.6", "7.0", ""], ["Gujarat", "2390", "28.6", "0.1", "14.4", "23.1", "26.9", "6.8", ""], - ["Madhya Pradesh", "2402", "29.1", "3.4", "8.5", "35.1", "13.3", "10.6", ""], + ["Madhya Pradesh", "2402", "29.1", "3.4", "8.5", "35.1", "13.3", "10.6", + ""], ["Orissa", "2405", "33.2", "1.0", "10.4", "25.7", "21.2", "8.5", ""], ["West Bengal", "2293", "41.7", "4.4", "13.2", "17.1", "21.2", "2.4", ""], ["Uttar Pradesh", "2400", "35.3", "2.1", "4.5", "23.3", "27.1", "7.6", ""], @@ -2650,7 +2686,8 @@ data_lattice_process_background = [ "3,658", "3,183", ], - ["Kerala", "23.2.2010 to \n11.3.2010", "9", "17", "1.42", "3,559", "2,173", "855"], + ["Kerala", "23.2.2010 to \n11.3.2010", "9", "17", "1.42", "3,559", "2,173", + "855"], ["Total", "", "47", "92", "11.81", "22,455", "19,584", "10,644"], ] @@ -2689,7 +2726,8 @@ data_lattice_copy_text = [ ["COHS", "San Mateo", "Health Plan of San Mateo", "113,202"], ["COHS", "Ventura", "Gold Coast Health Plan", "202,217"], ["COHS", "Total COHS Enrollment", "", "2,176,064"], - ["Subtotal for Two-Plan, Regional Model, GMC and COHS", "", "", "10,132,022"], + ["Subtotal for Two-Plan, Regional Model, GMC and COHS", "", "", + "10,132,022"], ["PCCM", "Los Angeles", "AIDS Healthcare Foundation", "828"], ["PCCM", "San Francisco", "Family Mosaic", "25"], ["PCCM", "Total PHP Enrollment", "", "853"], @@ -2721,7 +2759,8 @@ data_lattice_shift_text_left_top = [ ], ["Blood Pressure #", "2400", "Men (≥ 18yrs)", "10%", "95%", "20%", "1728"], ["", "", "Women (≥ 18 yrs)", "", "", "", "1728"], - ["Fasting blood glucose", "2400", "Men (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["Fasting blood glucose", "2400", "Men (≥ 18 yrs)", "5%", "95%", "20%", + "1825"], ["", "", "Women (≥ 18 yrs)", "", "", "", "1825"], [ "Knowledge &\nPractices on HTN &\nDM", @@ -2746,7 +2785,8 @@ data_lattice_shift_text_disable = [ "Sample size\nper State", ], ["Anthropometry", "", "", "", "", "", ""], - ["Clinical Examination", "2400", "", "All the available individuals", "", "", ""], + ["Clinical Examination", "2400", "", "All the available individuals", + "", "", ""], ["History of morbidity", "", "", "", "", "", ""], [ "Diet survey", @@ -2758,9 +2798,11 @@ data_lattice_shift_text_disable = [ "", ], ["", "", "Men (≥ 18yrs)", "", "", "", "1728"], - ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", "1728"], + ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", + "1728"], ["", "", "Men (≥ 18 yrs)", "", "", "", "1825"], - ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", + "1825"], [ "Knowledge &\nPractices on HTN &", "2400", @@ -2785,7 +2827,8 @@ data_lattice_shift_text_right_bottom = [ ], ["Anthropometry", "", "", "", "", "", ""], ["Clinical Examination", "", "", "", "", "", ""], - ["History of morbidity", "2400", "", "", "", "", "All the available individuals"], + ["History of morbidity", "2400", "", "", "", "", + "All the available individuals"], [ "Diet survey", "1200", @@ -2796,9 +2839,11 @@ data_lattice_shift_text_right_bottom = [ "All the individuals partaking meals in the HH", ], ["", "", "Men (≥ 18yrs)", "", "", "", "1728"], - ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", "1728"], + ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", + "1728"], ["", "", "Men (≥ 18 yrs)", "", "", "", "1825"], - ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", + "1825"], ["", "2400", "Men (≥ 18 yrs)", "-", "-", "-", "1728"], [ "Knowledge &\nPractices on HTN &\nDM", @@ -2820,7 +2865,7 @@ data_arabic = [ ] data_stream_layout_kwargs = [ - ["V i n s a u Ve r r e", ""], + ["V i n s a u V e r r e", ""], ["Les Blancs", "12.5CL"], ["A.O.P Côtes du Rhône", ""], ["Domaine de la Guicharde « Autour de la chapelle » 2016", "8 €"], diff --git a/tests/files/baseline_plots/test_grid_plot.png b/tests/files/baseline_plots/test_grid_plot.png index 3b835f5f078a099fb0c389a5e860c941de53a8a2..0607d15f9320ef335a1d213b2cd1811cb6e28ea8 100644 GIT binary patch delta 27 jcmZ4QxXy8cC!@tgFL`ETJ)?=aQY?!4*$t)c(`gzyQ+ delta 28 kcmZ4IxZZJsC!^&=FL@RPV?Be3IZ`aVxxN23cBv=;0EI3IK>z>% diff --git a/tests/files/baseline_plots/test_joint_plot.png b/tests/files/baseline_plots/test_joint_plot.png index e9e40ece9fad0e09be566f872bb8d94ed2fd9cb4..9f98d68e2dcd6a7809e96f664b452d1c731b94e0 100644 GIT binary patch literal 33969 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 Y8XMVt*g$$8ejkN;Q1d|gzEfBJ4|UQs^Z)<= literal 48678 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 H#FhU87erZu diff --git a/tests/files/baseline_plots/test_lattice_contour_plot.png b/tests/files/baseline_plots/test_lattice_contour_plot.png index a8d33265204f8759370a037bb2b7649363d46dae..e458b3daab7e9ea25482b49129edbcb50b927c8e 100644 GIT binary patch literal 47246 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

a4K6NbSItr0!HTOY;!s`WEyZAEI zB;>&n7MwaQ5lz(jt}hGx6-&{=J+&91pJuLS(@HPDIge1!oz-a(nYD-ZL`>H^DC-j1qG)U$wOSs_8NaHQ(f3RJ^ zw9)+vuG7dd3h6~@q-d(HrIXrU>VQBj^=hXvBeAgcY`<={#V5}eLEP5V5L+cBC0ZR+ z!E}kO=B#li_EACu?n|H+LLIyPx^d2#$Y%%*;~MSO5{mL4jjeF9Vsrg8pP-Lc-JJbP zQOpKi|McSO;YV!1sqtvI5!XETGt#&rf;wsvNUi#>6B3dj zyGp{%Ou-~>IFxRczlIn-pK+Lw~>Bo+1*JH_8FTADA2RmC4kSY}+yOXh0zAVj) zb;T^tq9&c)qq1M=+1Wk(GI)eJg9!-<2L5=ckgL^!u5Ew*o5endI0G_(iPd-cq z!%ZNzN@HD79O(6Z=i-!<6i)yX9-T5WiNU2z?}O?u%Cm{@2YX9RS;p{!8oOJa$> zhD@|i$%4Kt_Ko2a=CCh=k+gu2si#ww!{MagyH_6!=tsVida%YKaIrcF1;!)Qt}65v zO!$2$rwU?ZbNAZ`i_6LS8D_{%^L})~*)}7SekfXQuVPw{X|vC}N`z}^a$>MWr{y>% zRt*7yLu_P#hnKL5H{ohT*d%8?P@0h&bRlH8fAE?dq2P%Qm&x$bWoToj-|+s8viT2a z3R}1j<%rg(CZ9WlfcV&fsS|)QHrXq(vj6U_ha2O#Xfr|R%HcaTawByX2W&%C*c2jc z^-pHuMA&_ji;E diff --git a/tests/files/baseline_plots/test_line_plot.png b/tests/files/baseline_plots/test_line_plot.png index e8099ce807c35bdc8259765c84e80e42361e012c..12c44c0a222f131ce839846befcc052f5f1fcfc7 100644 GIT binary patch delta 27 jcmdmJy1{gUC!@tgFL`ETJ)?=aQY?!4*$ttJHkg8m7w delta 28 kcmdmBy3urkC!^&=FL@RPV?Be3IZ`aVxxN23cBx4L0D~wADF6Tf diff --git a/tests/files/baseline_plots/test_stream_contour_plot.png b/tests/files/baseline_plots/test_stream_contour_plot.png index a6e77f77c06075cd2be7ccb2c2fbbf0b50aa4025..958ea0a4c0fe944858247d6f7fddeb3edb723c28 100644 GIT binary patch literal 14487 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 Dfuj$d diff --git a/tests/files/baseline_plots/test_stream_grid_plot.png b/tests/files/baseline_plots/test_stream_grid_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..818958c0cc0d341179aa2fae2a488f2515fcc2dd GIT binary patch literal 9940 zcmeHN2~d;SmX0g7vh-q$2q@jCs34I=wy?B~f{21P2(k#u62t%j0tQGzT)N>Qiw(#c zNJdd;WK$pn$R>?|A%w_ofCQ94L<~!SKv>MmUiW)%=GAn~)Kr?Qq~{GvZqZ*KNQDy)ED` z!1E{Jr#%oLkjhp0cf(IMCBeX;S=6aZQ7&+36!L0hASm=|RCowHDkRuX>qcNCA{ZWK zq;IHipr>^$Dk|Ip4F1n~eRyOLxJYC%2m)z=98R8ajVTavuZD2P9|$D-1{A-??atYM zDB!vAj}{G0rX4LM#V4MSi+FJ*5$)SCRzSI6biYzRg{rcK{+KF#& zJf>}E=)11#8da9`;=22(oS)Ru-3gy(nlUz?%?=3vB+dMW)>nC|9o)}IhkITv$99@a z(EI7;@U>)VL?o?EHebN(EQBES0ll`Yof2*Ufu29My$L+EZ2J@h`nTO1HiAGqwZ8#@ zZu)KB1_GT=0Rc(Kr*vo;g32he(hhXf{d*PVD99R#{8z-JvsVzxL zO0rxYy(5#&o9GvSg0*Gnp}xlGDMMpp*H|UlcfP)asqR*9f_Qwe7CcZ)ZLk)ygdzd~ z^kA&x9DAHq2nTk0^o}jxnv|vZbX7*whTOnl`l^?6rHoM<;UGy(+NpiIT@Kxm;Ypjxvaka-z0L((UntCTAkk(^6_>N7Dt)}8 z9m(bh=)syA;i{~YI*5)Y+^{ zka=h7`g}5srLPwo{Iz2J>?3EdWfYw8v8KQPa%ykWSUecayfN zLFaLC!Q+mcm6!c|ncjlZ$k{!R_foP+cqsP9uwhnFCRfxGJJ->%e{4)BlXW(l#%F!m ztW6Ahbz<{2O+oJydi(j-`89+?7pXmD@P57Ol8X17jDim`WedPEf9Eg>iF9#j&SUA! zjD?sWqNl(+T#!kVP7Q6R~9NXCrtXSz0*LwsW6tldGlwnO|ES6CTlr%G!rn=(1T^_fpWw;AVQz`PGWijL?lW$?Wm5O6(03F-ZEV_#Cc#U|^}V&CcH5$il)i_%i@P1cij?`TP45;zFR%;_m$E zuf7?41$dqj;7};Lp?q@#+>qM`mg{^-<@G+F<_9^xOxl6ONO4QF`7y2wsxx+d;&s!o z@xaSU?!JRMX#;q~1r01U%l#f&do`Ovpe-G|&h`lJA*Th2-jl2OBzWLtDjCN1IHuzp z3=N;nrbwoIAH}Xz3?lBvj6Dz8>a>sXrll$nnca_X-jX|HLqKj#o8Tu&7m7*Zf-Mm= z)tfjLbWf_?<5S!dH(y04Q>#r`W4`BTmr|OL8XCoWEdB!cVL2}xmSBkAXK6(^ekTaVZs2QjC1gu7QKyZD zI9NunejqNGAB4=$hp3O_R+wVJ+NQ(4sLoRnqPv8NcQv*RB7SoNdi^p{pjY3&1N?Zd z!?}8uJkmb8$+yZXs3~Q}6TfB_`(f2f^t@sU#yrXD$<_GO7|fSbG?Q z!2mWI6=hshRFt)A1IRnBwYAmI#6(=$28BY8R7~#O_(&;qgl1)HYfB6QfxNprmo|pi zaLyKW{Z#uCq<+he-ym@PmgF=egr5ni;x(>xg5%xygqmOrre|XumB&9MPeop7ECF8O z3hUXOhTzKd%Ve9gP8wBKf`?|(INhqf5gW6U~_dArKz@f;-uRI#G z&Fcj#-dMr=LD)O3jo+u$#5Gr_wa3KIE};7r@fB8r3}lpGM)aW{ud&*hS1xT&7({f! zW;)n4p=kd)-WoM!I2MYWY$8=wS(W^SplO|xn#Z(-FY)ojD=8w+^YgZtLsHJ8V(bPl?_ zI|fMALn=2#8Qzx;WkxISD4V|1a4Pt5*3k6jf;Z%$`P;)W;a?Bo2^}w2XesF6Q*voS zvV$l@ozxaw4}?+)>}zVkJv(ER=@GlCTH_Z`4~!r#J00-KXlkXZ?NKWQv}cUavL2gG%YCr`{W!0w$xAd*g-xHBBmwUDHg!{tni*z)qAER`>*0w~R=pA? zL-W+k@-uZ-dejMiY=YCr0QvU^S650}nw#fl zQ23;px;pdq>(?cFad~;AwZ$m;Ld>dIQHdzfWq?3Acju{~;SiIaYsN>8zE@6rvjr&Y z=hQ#7Nb`>wO7@SL3Ri?9BNeOsV<1WXF%k*@)7lIu!WIKcv{?cPVxB+}?bc5LW(xi= zGhjd|d|^OA`v6Wiwwot@yPIdB(L7YB(L7~>cY3?q#~KX(R^c}mA*|`)nAw&xD)3b< zxe~2Ya>aa0S*F>RWVRz8HX>0jZN-%YI-{_IvDjEp)s~g&mzs`>0q+U)A!-q-H?&nvt6EA zB)L3Y{zcKlmxL{cFGT|qK>%6giUKpgDEc=u%)^%oUmU*ltD-y0#cy|(TL5wt7Tg|} zE4owf_ljP(1uBp;zP=+Rd(|~HS?}ImdwdFb75Hb*o~5Lw0xu9K5zfE>TpnyYM1r$l zok#H;RY2jTW+OYEv!F()c17I}r$=|`{iesS#0*8@`@hLN<1UCY$btyQA@R?5((3gU zic#0u=2asakX+ov9u9G}ng3#L5TSo}tcoOhpAHWg$yn-H@o;ay&+D?p9HS57N~4<3I@n5o?2lY+AVxXl>Oq?}rE4v?$U_ct@k+C;m&S@CISvPE; zEf6k=$O!?*gl6Ccm-^U+)zifV$#3~z+OWEU5+lbMi3rIGSq?8NRDI5jx`%=^J!`kll&?WuOS*|elM3|*ndMMi&8i4V&qt!kHr13Lh z8u11*Ti>!KHGSNHeQ~*A#Y=gNa>{zLhk>CtFw&r3l5v!AWsIkon$io%adIZ4j@XKr zAGAwI2jUY_B#ZS^Cx_i5>E5s8@?We2c zR#^?f^{iK!QEEkxLofj_q1q`W?;(OFsa8V&3SG<;ufZh*ll9d>qq}oxAzNUo6;;ru z9>xMH+B+qJ8t80@&^(7y1i|J6k;MGh$j*R8cavT`!Uq);j}IMFuUVX!3FIeC$8^X4 zZ-IH$z5h30-t@ty|1q-+Fhn5z-i{>BaGf8#I6nw+u}r*2nY!jFK5Bly23*O!HHioC z<&IuI7u7pSH{y>c7(Cqz3cQSd8^@k$rfV=3+9 z4-s>I+}|_FzE+%3B4W5h8h;^C>HxqD!Iv*#YxP`g)&hlUEyFn~)#kR0OvZ~$?rM8; zSJuqLqP=*0uAgQpjT9aaRFoUpR7uAEifL*scQPShJdHn!pF*q`mcgnX+}ZZ2Mdy1Z z67AQNXCP-|bk56O)i%@W`hYP9xR44~+9GaOZv{ptx5+ zBzK?DC2`4S%}A19OT*mg$vP{Wy!1tknxy-#JPmR5*fB8YJ;|me$e7DQ^BrM+jd{GF zgEb;C7~1kO92l8sEI3oQ|4u5($k^~Zl+$NlP-{5-d)O?Py4v0w>drcOe_J#DYG%ty zr_~2*gI!iuR;(9a1IZR3D0Gi*1l2D9$u=+~DVIi0fm|1f{piN?TS_)T>)Ai|5`g_d4H5e=SLI$XrljxiT<-5TZAI~UpL?Rogk3@ zmjcv=dQM1j*ELtqUd`d#0JQ&O3vce=M-%;j5=ABT_upIRdfj*PY!LEV)M#WY@XJ&M zoobPXGaIdU8@hM zg$&~!q^ASaXzsg0R$YHgn9tD5*{4G>7K{*fNUKg;4L^UJSn}#B?2Lu8`e)cg;y}U3E$w8(S(y^wb^dM#{zDqwxF>M} zaU~*>GmLebfv|vtH2h3OEJ(QZXi-(c5Hdu?@|e64+)#%1d@GFcwgo7bBRJ|60n%^M z7SIJy_Hj8H_xz$lsD z6HWawa(uWBKFa9r2LpYNysg+E_ACoZ>f)b2b@qLACt6y6(tW z&*=<2mti?FLQp6vzRn(H&z1?|v(n*dz4!|$0vOhszTv^x@VYzJaM->V1loE~eitB5 zz`F)Ck@!ze5eH^@N{HBK2@fq98NUA*Bb01^t)SyR&Z5fhr!S`JO|5<_r>6!vQ;|LC zx`@RbQ@-!f%Wgmphb;0Sc@nJ50J{#KVX0p zSV2Q&iAD?K7aO3HkLSDyVRLh9ZRXK@SLwtwy;NQ@m}-Tdys!yWYswywqIusd|Ggmc zhgbiP?BteB*X!4pgrA_d4wT6I5KLk)yi$dG=H_$4OYCN#EfMTnd2Tf_bPzXXOZxox zw+rM3CF8EGp)&&f{2q!v?+k)M53-;&Vnyk;zxqFC)QUh5EL)?b?m%)H5Q5IWy-hlJ ztW+ZJ?aA5OS)18m1bZAevIZ5ZX*%4jO`n{cly?xz+$!2Hx?jGC0<@I<3~ZF9VV*&r zp+T5AV1QuM{l?Wovi%!%I$v#r_a1T literal 0 HcmV?d00001 diff --git a/tests/files/baseline_plots/test_text_plot.png b/tests/files/baseline_plots/test_text_plot.png index 8cc382525d84c90dda0fda3503a15c01c51c7e12..63b5520d468a685073e27e2a7259aec1a108f7d8 100644 GIT binary patch literal 9112 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 AlmGw# literal 8992 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 RFF*{mZL^&f&4PI9e*gqul|29e diff --git a/tests/files/baseline_plots/test_textedge_plot.png b/tests/files/baseline_plots/test_textedge_plot.png index 63fc23664a941e856f3e8b1d95825ab67175eeb0..1de4e9cb0b4346eb5f9faf795dffbe3091a7a028 100644 GIT binary patch literal 19000 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

!ef z5_{w}0=1`qS&2|e*O9Bac)w->LHzorW4=>Y-Ed-~tUlA~d(l*t(ASRwtol;JG=yqa z=6qqFO2l9p0XLe&k8;9v5wO`;GG=naT%$W>k46mUesEULFO*fIgRpuk$5}Z5vd!(6 zS{%OfVJR*6d`74Rg6?WrQPEZk*=q)t(8;FmIUsHP;h2eqYj`wgu1Ip{?89%&GDXab z(DW??)!c%H=K{S=clpc!X9E6t<%`v~slw3Re9l1CBUd`Y0%)*zi2c#CkEVk!&Q?9I z+L{QonBt{f)!vYK029Qzq~*itEG}tH`2H2t08DrLnJs%2N*%e+bKrB@(fH7Ebo3i_ zZ8aSM1WAAp69d|EkjDGJHmErM6*_GK zHah5qEvttc6SuC7<~-ORf#oo!oDKEImciaU5tdMO>hE9@j1nTLo&As?xi&M~F3iT^ zm}8%S3hmixYP0K4#IC)AEntQ^bkIsG9WvuR#4T$xkI6t2<1`wAPD*9}PcwVA$R55wk1Dg_-y&oyM@ND4Ma;~_@`g|aUE zQjXnv$3=mP4>lSBaYIZSYd6%F!4^&E?llJ_2p{)_F@)3?X-rv`65c;A_o4FBL7f1P zQW~7lL@po=4v0DQn~l{KIyAE0Z024Sm<#Bd69_XV=sy}P>G6a4(lfs57oSPbC}YnR zmV(ZPMXrmTI6TvwDF_&ViS4?0F&U%lI$U?$p`{OUFZ#F2vZF||j*?%BQgTvP44L#6 zg=hexwsLA<&k?tqnmpTJIX07-{S)@Zm+Esa$?G@C2bUE=4ocUJM#|!;&l0Yl>(N299c?G3!KGn0K zWOGO~E1MN4{1OKWj;pKL+$m=O>FbwF>mzx$s4mi_Z;s zXttFQ2Uuz1Tj38L9-vMmZtanLBh;RTVyjJZmxG4NCVlhDr3!*K0g*M7kf(7fptI5up0J`|F;s z2p*|LR^(^Orzq+b=%_t6If|CAkpLB9;z<1tI~REO%{Nk_jbU>?3iMoVyaF$@qOA56IPWTZ%9 zHpuELl>NSliD+Vt)vi_@R6$eGDq;`I25tzdJqs+}LS47JO7Z6TzP=XSI=01fKB-%3 zovqpvT-XMpTDyF-ojCAP9N?A$C!cgF@KT;mnyA@|!*pWK8D)w%R{s-~HmPiK<-O@rLmemzZaJYK z80CL4oe$3$e+QCj3D1yYTF+`cl;*?)d#!#!0zn#`p1r`~;w-egBl8o7pDa(Bh~Pvk zGV6Pgt~bDnZw2o!_jZ9FJ$-p4U283)0jmzy725NPJ>c?@^eY31W8p`D=4Lff>KufF zCllEr3C@KVhD0C_f49e*zChp~N%g+l4*38?0?^$Jz|!&?T92~P+VNZFJTc%3hvkQ~ zFb5A9w6=AXW3$hLoU?Kb?SHSPm>a_`!TAqt;Z-GO*O#GSy%5mLSL62|DYI5|ZZ`2q;OcRqZGphl0PgrUKtL~E z0uirp2L{+zPDHJxPDi6QXbel2(EL*bpxX$w>mj+=Z{|>ag+~%W&D7osK{a!;zQ}|l zL}M}nxsiWL`RiI1t}?h0XH}ycC(v+ZI<7&Gh(n(7JXk7$@sR&?GR2F(Wn zCJc=ql&=CU3xO<+=61acD+Y} z`{pO6T>(p&aTSM;eC=}YN9D--Z&++(Wu37>O--{P2QI_l6@2wWfIq=*pj8MofguKY zD)SpnLVt`a2cjU5E-;rXJ`^F4xj}Njf~sg&{P)#Af||CRpsU1b)BEQr#%v9cltBO| z0O%N|X0io{{5QxL*+DZ|S?DqE?}hfy3lY571+Kv3(Xqws$Dj@i((DW(!6b+bnFh@b z+h6&K%p5?V^9NbRUXiq_g97ONqzax+UUB7=`7hIL} z((IK4_q~2moW#tBuh!BXg<7;EU+w60%Vv-BARA2E2>esfrUf$IxIm@G<(yFP_1|64 z+O9mVd_j~T*r~bK>1WqFTJ~k(;dF;!60=%9x4`hT|C!)}(I6WlVyUd`_IO7|HBclo8(2XfOCfi@t=Rt>iST-P-2&i~+w6Z?_&Ur`4eq5GG*^F& zyy9TlRs_lX#KWr*yCMd!_jnxoNqY1)0T@o-!j&)81P1o+&wdrVnJro;wKfwa!?yXw zH6gKr7GptQ3S{rkjY3{QLOX7`sym_KPR>~jGf1Og+o^yex!h^8>;fSL%L7}NCc1!J z{54;9osjp=fTv=OPS_UEzkn4y7ht(QCm@`eOgqpIkZTE=#7@wBe6j(AF;c2M7$MdP zR{q|l0^BDd$DjMKfu&SdFEH>^6R!(Fdn(v4Yh74C>V)DZ-?vu;|M>f)R?v^XKNNN7 z@~dBZhwle{5_W@Od>+{Kt%F>2Sd5W*A}vJFA2M7u0%nMSyaGa>53>e$Smb_op^05s z4+I&V4zibcf87$62Ea{$JWqTZjYcafE_}0WrId)z`4@> zIP@|tOk6Y9!(%*T8{6$=N%k`gpr#7!s@Q(ontOLpdf~a9DtlG61|7(FpM>|^I3o;= zb9kM0oW6K%(9bXqFuG-~^(Fl2aD1y~pa*l2oZD;S1unaA4_ z1r%Cv()8k_-|XzaRr%#z-hymv4@`tESJ2W~SXkA~ylABR4=BYfg9|~#0xOSVY$wt# z6gpp?Sj7INDd1b>s0v0+mwR?xT$Jpw=5du4ZXMea6wV%YXMrK6d#LARgUeSZoFmG= z{000)bCFgG4Y*#~;I}FU3m<2p8_2QXaBG8pYWhFpK8Qh8sMXBU^{5D3tx`Paf}y#x zw)_P)BvuNfHUTXHpqdv0TUQ!jy37R_@9k&A=!S)7U&&kWTP4R|pBBaRXu!`clgyP^ ze~!5v>%o2KUfcyP@Em`myZUF46NnAm{hRa^kZoo^x$&OU3H ztYGiVFO%)tu|SI}*zp5&TDZ9>7TBG@o{M1;kJoVYmSvpIhM5X;(c|y!K>9t(USPz6qnkVd(L|JdD<}G-n)fkwv5O7ruFGoxn>E z1v&3qBE-xXx4WPh#$djOxi+kzXy)WqG{ywL-!%g3L97% z2axs_vv1z0g|e?C>#)T}ovDu=RbXAPKctd6Pepq`Vgc>AXPWhyFBJ_UTk6nuo#XI8 zRWGCJl1<`6b}>FjA15qY7SedrzR3wuBNPX<=O+{Vd+#`e&Cx748ry0TK#Q}3zj*Ci z5JjFI-pA-uZ=1kUMgIk|fDQ)g3)?m)C>ZAzc9Z}3?(gn%OqJo;_=0v8I#YLh@a9K= z%=W9R!e1o3>MvLF_UQs2nz^`KvLV%#R?H%~sfrK^=*A6i4q)CrY1DrfO2m`6vW*W@ z_d>h`t`pcXs#La^o@;D{jztGs5ISZ6i863UD@zG8VY!~pw4CZyUuk~X1nb2 zgBAq5UdOaV>FBKg^7AIL-h&K%C23|VfO<>`%V?{@J3hem*+%E%N=YD1fWNABsXD}8 zdhC;JH3R)-vZi_$D6#zBaw<^mwr;hN-PlJDt@iW*x1OCF_=cm1=83in4&q87 zV*rM$#XS*d3d7yt$K5-P4ak4Z5V5y4M2tEBplG+VT`wsw=n{yZemftQPg zv?TLA9i)r(uqCJZB!~1xjke^3)S^vo4yopWZVr1ohlgDU@a3DJ9z_)ucHo&N4PfdH z3vha(8-~Ca>^N6YpSse+zco2fEd3H#_CNcn0HGBw^*IdLXJ7FrN<>c%40_v#b8AkI z|5N9Dh2QdY4Jc)96+BD=wER@{A9uA{h|VFFCwd?L6Xn2*br(Fu#NYy<%{T(@@NU`6 z1Ru`9-%d9wEsXk1_X3~aMjl*#!PqF+9QW@cso;0ecCrTzp8o(XDk{4Fd=NAp$%FJ~ z;{M{uKTk>d`N$L_A9{BRnJCK+O4Xl78L@A%jM2M-{LumAu6 literal 17978 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 ZH`May{61Zp1ej#lIX%PE*}C@k{tu9|tfc?| diff --git a/tests/test_cli.py b/tests/test_cli.py index d1a660f..d3b7d55 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -19,10 +19,16 @@ def test_help_output(): output = result.output assert prog_name == "camelot" - assert result.output.startswith("Usage: %(prog_name)s [OPTIONS] COMMAND" % locals()) + assert result.output.startswith( + "Usage: %(prog_name)s [OPTIONS] COMMAND" % + locals() + ) assert all( v in result.output - for v in ["Options:", "--version", "--help", "Commands:", "lattice", "stream"] + for v in [ + "Options:", "--version", "--help", "Commands:", "lattice", + "stream" + ] ) @@ -120,21 +126,24 @@ def test_cli_output_format(): # json result = runner.invoke( cli, - ["--format", "json", "--output", outfile.format("json"), "stream", infile], + ["--format", "json", "--output", outfile.format("json"), "stream", + infile], ) assert result.exit_code == 0 # excel result = runner.invoke( cli, - ["--format", "excel", "--output", outfile.format("xlsx"), "stream", infile], + ["--format", "excel", "--output", outfile.format("xlsx"), "stream", + infile], ) assert result.exit_code == 0 # html result = runner.invoke( cli, - ["--format", "html", "--output", outfile.format("html"), "stream", infile], + ["--format", "html", "--output", outfile.format("html"), "stream", + infile], ) assert result.exit_code == 0 @@ -166,6 +175,10 @@ def test_cli_quiet(): assert "No tables found on page-1" in result.output result = runner.invoke( - cli, ["--quiet", "--format", "csv", "--output", outfile, "stream", infile] + cli, + [ + "--quiet", "--format", "csv", "--output", outfile, "stream", + infile + ] ) assert "No tables found on page-1" not in result.output diff --git a/tests/test_common.py b/tests/test_common.py index 63762ad..5f0d853 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -3,18 +3,23 @@ import os import pandas as pd +from pandas.testing import assert_frame_equal import camelot from camelot.core import Table, TableList +from camelot.__version__ import generate_version from .data import * + testdir = os.path.dirname(os.path.abspath(__file__)) testdir = os.path.join(testdir, "files") def test_parsing_report(): - parsing_report = {"accuracy": 99.02, "whitespace": 12.24, "order": 1, "page": 1} + parsing_report = { + "accuracy": 99.02, "whitespace": 12.24, "order": 1, "page": 1 + } filename = os.path.join(testdir, "foo.pdf") tables = camelot.read_pdf(filename) @@ -26,10 +31,12 @@ def test_password(): filename = os.path.join(testdir, "health_protected.pdf") tables = camelot.read_pdf(filename, password="ownerpass", flavor="stream") - assert df.equals(tables[0].df) + assert len(tables) == 1 + assert_frame_equal(df, tables[0].df) tables = camelot.read_pdf(filename, password="userpass", flavor="stream") - assert df.equals(tables[0].df) + assert len(tables) == 1 + assert_frame_equal(df, tables[0].df) def test_stream(): @@ -37,7 +44,7 @@ def test_stream(): filename = os.path.join(testdir, "health.pdf") tables = camelot.read_pdf(filename, flavor="stream") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_table_rotated(): @@ -45,11 +52,11 @@ def test_stream_table_rotated(): filename = os.path.join(testdir, "clockwise_table_2.pdf") tables = camelot.read_pdf(filename, flavor="stream") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) filename = os.path.join(testdir, "anticlockwise_table_2.pdf") tables = camelot.read_pdf(filename, flavor="stream") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_two_tables(): @@ -71,7 +78,7 @@ def test_stream_table_regions(): tables = camelot.read_pdf( filename, flavor="stream", table_regions=["320,460,573,335"] ) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_table_areas(): @@ -81,7 +88,7 @@ def test_stream_table_areas(): tables = camelot.read_pdf( filename, flavor="stream", table_areas=["320,500,573,335"] ) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_columns(): @@ -91,7 +98,7 @@ def test_stream_columns(): tables = camelot.read_pdf( filename, flavor="stream", columns=["67,180,230,425,475"], row_tol=10 ) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_split_text(): @@ -104,7 +111,7 @@ def test_stream_split_text(): columns=["72,95,209,327,442,529,566,606,683"], split_text=True, ) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_flag_size(): @@ -112,7 +119,7 @@ def test_stream_flag_size(): filename = os.path.join(testdir, "superscript.pdf") tables = camelot.read_pdf(filename, flavor="stream", flag_size=True) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_strip_text(): @@ -120,7 +127,7 @@ def test_stream_strip_text(): filename = os.path.join(testdir, "detect_vertical_false.pdf") tables = camelot.read_pdf(filename, flavor="stream", strip_text=" ,\n") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_edge_tol(): @@ -128,7 +135,7 @@ def test_stream_edge_tol(): filename = os.path.join(testdir, "edge_tol.pdf") tables = camelot.read_pdf(filename, flavor="stream", edge_tol=500) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_stream_layout_kwargs(): @@ -138,7 +145,7 @@ def test_stream_layout_kwargs(): tables = camelot.read_pdf( filename, flavor="stream", layout_kwargs={"detect_vertical": False} ) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice(): @@ -148,7 +155,7 @@ def test_lattice(): testdir, "tabula/icdar2013-dataset/competition-dataset-us/us-030.pdf" ) tables = camelot.read_pdf(filename, pages="2") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice_table_rotated(): @@ -156,11 +163,11 @@ def test_lattice_table_rotated(): filename = os.path.join(testdir, "clockwise_table_1.pdf") tables = camelot.read_pdf(filename) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) filename = os.path.join(testdir, "anticlockwise_table_1.pdf") tables = camelot.read_pdf(filename) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice_two_tables(): @@ -179,7 +186,7 @@ def test_lattice_table_regions(): filename = os.path.join(testdir, "table_region.pdf") tables = camelot.read_pdf(filename, table_regions=["170,370,560,270"]) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice_table_areas(): @@ -187,7 +194,7 @@ def test_lattice_table_areas(): filename = os.path.join(testdir, "twotables_2.pdf") tables = camelot.read_pdf(filename, table_areas=["80,693,535,448"]) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice_process_background(): @@ -195,7 +202,7 @@ def test_lattice_process_background(): filename = os.path.join(testdir, "background_lines_1.pdf") tables = camelot.read_pdf(filename, process_background=True) - assert df.equals(tables[1].df) + assert_frame_equal(df, tables[1].df) def test_lattice_copy_text(): @@ -203,7 +210,7 @@ def test_lattice_copy_text(): filename = os.path.join(testdir, "row_span_1.pdf") tables = camelot.read_pdf(filename, line_scale=60, copy_text="v") - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_lattice_shift_text(): @@ -227,9 +234,9 @@ def test_repr(): tables = camelot.read_pdf(filename) assert repr(tables) == "" assert repr(tables[0]) == "" - assert ( - repr(tables[0].cells[0][0]) == "" - ) + assert \ + repr(tables[0].cells[0][0]) == \ + "" def test_pages(): @@ -237,22 +244,23 @@ def test_pages(): tables = camelot.read_pdf(url) assert repr(tables) == "" assert repr(tables[0]) == "
" - assert ( - repr(tables[0].cells[0][0]) == "" - ) + assert \ + repr(tables[0].cells[0][0]) == \ + "" tables = camelot.read_pdf(url, pages="1-end") assert repr(tables) == "" assert repr(tables[0]) == "
" - assert ( - repr(tables[0].cells[0][0]) == "" - ) + assert \ + repr(tables[0].cells[0][0]) == \ + "" tables = camelot.read_pdf(url, pages="all") assert repr(tables) == "" assert repr(tables[0]) == "
" assert ( - repr(tables[0].cells[0][0]) == "" + repr(tables[0].cells[0][0]) == + "" ) @@ -262,7 +270,8 @@ def test_url(): assert repr(tables) == "" assert repr(tables[0]) == "
" assert ( - repr(tables[0].cells[0][0]) == "" + repr(tables[0].cells[0][0]) == + "" ) @@ -271,7 +280,7 @@ def test_arabic(): filename = os.path.join(testdir, "tabula/arabic.pdf") tables = camelot.read_pdf(filename) - assert df.equals(tables[0].df) + assert_frame_equal(df, tables[0].df) def test_table_order(): @@ -282,7 +291,12 @@ def test_table_order(): return t table_list = TableList( - [_make_table(2, 1), _make_table(1, 1), _make_table(3, 4), _make_table(1, 2)] + [ + _make_table(2, 1), + _make_table(1, 1), + _make_table(3, 4), + _make_table(1, 2) + ] ) assert [(t.page, t.order) for t in sorted(table_list)] == [ @@ -297,3 +311,18 @@ def test_table_order(): (1, 2), (1, 1), ] + + +def test_version_generation(): + version = (0, 7, 3) + assert generate_version(version, prerelease=None, revision=None) == "0.7.3" + + +def test_version_generation_with_prerelease_revision(): + version = (0, 7, 3) + prerelease = "alpha" + revision = 2 + assert ( + generate_version(version, prerelease=prerelease, revision=revision) + == "0.7.3-alpha.2" + ) diff --git a/tests/test_plotting.py b/tests/test_plotting.py index f267e29..565c68c 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -4,13 +4,30 @@ import os import pytest +import matplotlib + import camelot +# The version of Matplotlib has an impact on some of the tests. Unfortunately, +# we can't enforce usage of a recent version of MatplotLib without dropping +# support for Python 3.6. +# To check the version of matplotlib installed: +# pip freeze | grep matplotlib +# To force upgrade: +# pip install --upgrade --force-reinstall matplotlib +# To force usage of a Python 3.6 compatible version: +# pip install "matplotlib==2.2.5" +# This condition can be removed in favor of a version requirement bump for +# matplotlib once support for Python 3.5 is dropped. + +LEGACY_MATPLOTLIB = matplotlib.__version__ < "3.2.1" testdir = os.path.dirname(os.path.abspath(__file__)) testdir = os.path.join(testdir, "files") +@pytest.mark.skipif(LEGACY_MATPLOTLIB, + reason="depends on a recent version of MatPlotLib") @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) def test_text_plot(): @@ -26,6 +43,15 @@ def test_grid_plot(): tables = camelot.read_pdf(filename) return camelot.plot(tables[0], kind='grid') +@pytest.mark.skipif(LEGACY_MATPLOTLIB, + reason="depends on a recent version of MatPlotLib") +@pytest.mark.mpl_image_compare( + baseline_dir="files/baseline_plots", remove_text=True) +def test_stream_grid_plot(): + filename = os.path.join(testdir, "foo.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + return camelot.plot(tables[0], kind='grid') + @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) @@ -35,6 +61,8 @@ def test_lattice_contour_plot(): return camelot.plot(tables[0], kind='contour') +@pytest.mark.skipif(LEGACY_MATPLOTLIB, + reason="depends on a recent version of MatPlotLib") @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) def test_stream_contour_plot(): @@ -51,6 +79,8 @@ def test_line_plot(): return camelot.plot(tables[0], kind='line') +@pytest.mark.skipif(LEGACY_MATPLOTLIB, + reason="depends on a recent version of MatPlotLib") @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) def test_joint_plot(): @@ -59,6 +89,8 @@ def test_joint_plot(): return camelot.plot(tables[0], kind='joint') +@pytest.mark.skipif(LEGACY_MATPLOTLIB, + reason="depends on a recent version of MatPlotLib") @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) def test_textedge_plot():