From cbe07d2c23100f406dd0966d8a29a5d66973a5e5 Mon Sep 17 00:00:00 2001 From: ethan-moss <106239610+ethan-moss@users.noreply.github.com> Date: Fri, 1 Sep 2023 14:50:12 +0100 Subject: [PATCH 1/7] 52 pop plot no uc (#113) * fix: rasterpop docstring warnings * fix: folium plot with no uc * requirements updated to matplotlib>=3.7.0 to work with rasterpop.py --------- Co-authored-by: Sergio Recio --- requirements.txt | 2 +- .../population/rasterpop.py | 37 +++++++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/requirements.txt b/requirements.txt index 6f733cff..281a92dd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ pre-commit r5py>=0.0.4 gtfs_kit==5.2.7 rasterio -matplotlib +matplotlib>=3.7.0 scipy rioxarray geopandas diff --git a/src/transport_performance/population/rasterpop.py b/src/transport_performance/population/rasterpop.py index be7de416..934793a2 100644 --- a/src/transport_performance/population/rasterpop.py +++ b/src/transport_performance/population/rasterpop.py @@ -34,7 +34,7 @@ class RasterPop: pop_gdf : gpd.GeoDataFrame A geopandas dataframe of the input data, with gridded geometry. This is in the same CRS as the input raster data. - centroid_gdf + centroid_gdf : gpd.GeoDataFrame A geopandas dataframe of grid centroids, converted to EPSG:4326 for transport analysis. @@ -153,7 +153,7 @@ def plot( save : str, optional Filepath to save file, with the file extension, by default None meaning a file will not be saved. - **kwargs + kwargs : dict, optional Extra arguments passed to plotting functions to configure the plot styling. See Notes for more support. @@ -177,9 +177,10 @@ def plot( ----- Calling `help` as follows will provide more insights on possible kwarg arguments for the valid plotting backends: - - Folium backend: `help(RasterPop._plot_folium) - - Matplotlib backend: `help(RasterPop._plot_matplotlib) - - Cartopy backend: `help(RasterPop._plot_cartopy) + + - Folium backend: `help(RasterPop._plot_folium)` + - Matplotlib backend: `help(RasterPop._plot_matplotlib)` + - Cartopy backend: `help(RasterPop._plot_cartopy)` """ # record of valid which values @@ -463,18 +464,30 @@ def _plot_folium( ) # add the centroids to a separate layer - self.centroid_gdf.explore( - self.__UC_COL_NAME, - name="Centroids", - m=m, - show=False, - style_kwds={ + # conditionally style plot based on whether UC is provided + if self._uc_gdf is not None: + centroid_plot_col = self.__UC_COL_NAME + # this dict will change the centriod color in/out the UC. + centroid_style_dict = { "style_function": lambda x: { "color": "#BC544B" if x["properties"][self.__UC_COL_NAME] is False else "#8B0000" } - }, + } + else: + centroid_plot_col = None + centroid_style_dict = { + "style_function": lambda x: {"color": "#BC544B"} + } + + # add in the centroid layer with the conditional styling + self.centroid_gdf.explore( + centroid_plot_col, + name="Centroids", + m=m, + show=False, + style_kwds=centroid_style_dict, legend=False, ) From c41f12c8a9ed881fc1c7f7816ef7c04a80c65a03 Mon Sep 17 00:00:00 2001 From: Richard Leyshon <49126943+r-leyshon@users.noreply.github.com> Date: Tue, 5 Sep 2023 10:27:52 +0100 Subject: [PATCH 2/7] 109 develop windows os ci (#117) * feat: Windows CI basic * refactor: Try without geos * bug: Try curl osmosis-latest * feat: Search for target directory * bug: Try download with specified zip * bug: tree in main dir * bug: Spec target as zip file * refactor: Target filename flag * bug: Try unzip with powershell * fix: Incorrect url, zip was corrupt * refactor: Try with explicit paths * refactor: Specify powershell * refactor: Try powershell arg camelcase * feat: Try conda forge install geos * refactor: Go with stripped back test suite for windows * refactor: Not run integ tests with java deps * fix: Ignore urban-centres is not required, no cartopy dep * refactor: Specify pandas version * refactor: Breaking changes with _is_path_like -> _handle_path_like patched through all relevant modules * refactor: Test match string to work on Windows * fix: No need to escape raw string * chore: Reinstate previous workflow * refactor: Distinct build name * chore: Remove unrequired test for \ * chore: Rm precommit check on windows runner as checked in main workflow * fix: removed github brew/apt action * feat: unit tests on all os --------- Co-authored-by: Ethan Moss --- .github/workflows/all-os-tests.yml | 34 +++++++++++++++++++ .github/workflows/python-package.yml | 28 ++++++++------- requirements.txt | 2 +- .../urban_centres/raster_uc.py | 4 +-- src/transport_performance/utils/defence.py | 32 ++++++++--------- tests/gtfs/test_validation.py | 5 ++- tests/utils/test_defence.py | 15 -------- 7 files changed, 72 insertions(+), 48 deletions(-) create mode 100644 .github/workflows/all-os-tests.yml diff --git a/.github/workflows/all-os-tests.yml b/.github/workflows/all-os-tests.yml new file mode 100644 index 00000000..7c44adc0 --- /dev/null +++ b/.github/workflows/all-os-tests.yml @@ -0,0 +1,34 @@ +# This workflow will install OS dependencies and run a 'base' set of unit tests with Python 3.9 +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python + +name: Unit tests on macOS/Linux/Windows + +on: + push: + pull_request: + branches: [ "dev", "main" ] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ["3.9"] + os: ["macos-latest", "ubuntu-latest", "windows-latest"] + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Run Integration Tests # run only those tests marked runinteg & with no osmosis deps + run: | + pytest -m runinteg --runinteg --deselect tests/osm/ + - name: Test with pytest # run only tests with no osmosis deps + run: | + pytest --deselect tests/osm/ diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 047d1369..9955734d 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -1,4 +1,4 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# This workflow will install Python dependencies, run tests and lint with Python 3.9 # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python name: Python package @@ -10,7 +10,6 @@ on: jobs: build: - runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -23,11 +22,6 @@ jobs: uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - - name: Install geos # required for cartopy installation - uses: ConorMacBride/install-package@v1 - with: - brew: geos - apt: libgeos-dev - name: Install dependencies run: | python -m pip install --upgrade pip @@ -40,11 +34,19 @@ jobs: - name: Check Java Install run: | java --version - - name: Install Osmosis - uses: ConorMacBride/install-package@v1 - with: - brew: osmosis - apt: osmosis + - name: Install mac depencies with brew + if: runner.os == 'macOS' # not updating brew version, issue with aom + run: | + brew install geos + brew install osmosis + shell: sh + - name: Install linux depencies with apt + if: runner.os == 'Linux' + run: | + sudo apt update + sudo apt install -y libgeos-dev + sudo apt install -y osmosis + shell: sh - name: Run Integration Tests run: | pytest -m runinteg --runinteg # run only those tests marked runinteg @@ -56,10 +58,12 @@ jobs: run: | pytest - name: Generate Report + if: runner.os == 'macOS' # run coverage report only on macOS run: | coverage run -m pytest coverage xml - name: Upload coverage reports to Codecov + if: runner.os == 'macOS' # run coverage report only on macOS uses: codecov/codecov-action@v3 with: file: ./coverage.xml diff --git a/requirements.txt b/requirements.txt index 281a92dd..2a8c6e1a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ coverage pyprojroot pytest-lazy-fixture ipykernel==6.23.1 -pandas +pandas<2.1.0 beautifulsoup4 requests pytest-mock diff --git a/src/transport_performance/urban_centres/raster_uc.py b/src/transport_performance/urban_centres/raster_uc.py index 8c028072..d6fd4067 100644 --- a/src/transport_performance/urban_centres/raster_uc.py +++ b/src/transport_performance/urban_centres/raster_uc.py @@ -14,7 +14,7 @@ from rasterio.mask import raster_geometry_mask from rasterio.transform import rowcol from scipy.ndimage import generic_filter, label -from transport_performance.utils.defence import _is_path_like +from transport_performance.utils.defence import _handle_path_like class UrbanCentre: @@ -23,7 +23,7 @@ class UrbanCentre: def __init__(self, file): # check that path is str or PosixPath - _is_path_like(file, "filepath") + file = _handle_path_like(file, "file") self.file = file def get_urban_centre( diff --git a/src/transport_performance/utils/defence.py b/src/transport_performance/utils/defence.py index 5d60d06f..70744aa6 100644 --- a/src/transport_performance/utils/defence.py +++ b/src/transport_performance/utils/defence.py @@ -5,11 +5,11 @@ from typing import Union -def _is_path_like(pth, param_nm): +def _handle_path_like(pth, param_nm): """Handle path-like parameter values. - It is important to note that paths including backslashes are not accepted, - with forward slashes being the only option. + Checks a path for symlinks and relative paths. Converts to realpath & + outputs pathlib.Path object (platform agnostic). Parameters ---------- @@ -21,23 +21,25 @@ def _is_path_like(pth, param_nm): Raises ------ - TypeError: `pth` is not either of string or pathlib.PosixPath. + TypeError: `pth` is not either of string or pathlib.Path. Returns ------- - None + pathlib.Path + Platform agnostic representation of pth. """ if not isinstance(pth, (str, pathlib.Path)): raise TypeError(f"`{param_nm}` expected path-like, found {type(pth)}.") + # ensure returned path is not relative or contains symbolic links + pth = os.path.realpath(pth) + if not isinstance(pth, pathlib.Path): - if "\\" in repr(pth): - raise ValueError( - "Please specify string paths with single forward" - " slashes only." - f" Got {repr(pth)}" - ) + # coerce to Path even if user passes string + pth = pathlib.Path(pth) + + return pth def _check_parent_dir_exists( @@ -73,11 +75,7 @@ def _check_parent_dir_exists( the create parameter is False. """ - _is_path_like(pth, param_nm) - # convert path to the correct OS specific format - pth = pathlib.Path(pth) - # realpath helps to catch cases where relative paths are passed in main - pth = os.path.realpath(pth) + pth = _handle_path_like(pth, param_nm) parent = os.path.dirname(pth) if not os.path.exists(parent): if create: @@ -116,7 +114,7 @@ def _is_expected_filetype(pth, param_nm, check_existing=True, exp_ext=".zip"): None """ - _is_path_like(pth=pth, param_nm=param_nm) + pth = _handle_path_like(pth=pth, param_nm=param_nm) _, ext = os.path.splitext(pth) if check_existing and not os.path.exists(pth): diff --git a/tests/gtfs/test_validation.py b/tests/gtfs/test_validation.py index 5ebd7ee5..7b49c54c 100644 --- a/tests/gtfs/test_validation.py +++ b/tests/gtfs/test_validation.py @@ -35,7 +35,10 @@ def test_init_defensive_behaviours(self): ): GtfsInstance(gtfs_pth=1) with pytest.raises( - FileExistsError, match=r"doesnt/exist not found on file." + # match refactored to work on windows & mac + # see https://regex101.com/r/i1C4I4/1 + FileExistsError, + match=r"doesnt(/|\\)exist not found on file.", ): GtfsInstance(gtfs_pth="doesnt/exist") # a case where file is found but not a zip directory diff --git a/tests/utils/test_defence.py b/tests/utils/test_defence.py index 6bd4b992..412202e7 100644 --- a/tests/utils/test_defence.py +++ b/tests/utils/test_defence.py @@ -65,21 +65,6 @@ def test_check_parent_dir_exists_defence(self): pth="missing/file.someext", param_nm="not_found", create=False ) - error_pth = "test_folder\\test_file.py" - with pytest.raises( - ValueError, - match=re.escape( - "Please specify string paths with single forward" - " slashes only." - f" Got {repr(error_pth)}" - ), - ): - _check_parent_dir_exists( - pth="test_folder\\test_file.py", - param_nm="test_prm", - create=False, - ) - def test_check_parents_dir_exists(self, tmp_path): """Test that a parent directory is created.""" # test without create From 52a805ae0a547f9e90af34b31ce53530307ad78f Mon Sep 17 00:00:00 2001 From: ethan-moss <106239610+ethan-moss@users.noreply.github.com> Date: Mon, 11 Sep 2023 13:34:25 +0100 Subject: [PATCH 3/7] 102 setup sphinx (#110) * chore: added sphinx reqs * chore: added sphinx source; updated gitignore * feat: added basic structure * feat: added favicon and logo * feat: added autosummary * feat: added wip banners * fix: rasterpop docstring warnings * feat: added initial sphinx render workflow * fix: added pip install theme * fix: removed python and pip actions * feat: added docs reqs file * fix: calling sphinx build manually * feat: added warnings to error flag * test: adding in warning to check actions runner * test: reverted back to clean docstring after test * feat: run on all push; deploy when this branch * test: remove ref to branch * test: deploy when different * feat: using env variables; tweaked index sentance * fix: corrected YAML syntax on env var * feat: move to multi-toctree * feat: added viewcode extension * feat: added unit test coverage page * feat: added shields; changed workflow name * feat: added extra footer content.html * docs: added render docs shield to readme * feat: set actions deploy to dev branch push only * docs: updated docs README * docs: added section desriptions * fix: using expression for whole if; tweak to index to test * chore: corrected typo in docs * chore: replaced hardcoded path --------- Co-authored-by: Sergio Recio --- .github/workflows/sphinx-render.yml | 34 +++++++ .gitignore | 12 +-- README.md | 2 +- docs/Makefile | 20 ++++ docs/README.md | 87 +++++++++++++++++- docs/make.bat | 35 +++++++ docs/source/_static/custom.css | 6 ++ docs/source/_static/dsc.png | Bin 0 -> 305645 bytes docs/source/_static/favicon.ico | Bin 0 -> 15406 bytes docs/source/_templates/autosummary/base.rst | 8 ++ docs/source/_templates/autosummary/class.rst | 23 +++++ docs/source/_templates/autosummary/module.rst | 74 +++++++++++++++ docs/source/_templates/footer.html | 27 ++++++ docs/source/conf.py | 47 ++++++++++ docs/source/explanation/index.rst | 6 ++ docs/source/how_to/index.rst | 6 ++ docs/source/index.rst | 56 +++++++++++ docs/source/reference/coverage.rst | 8 ++ docs/source/reference/index.rst | 15 +++ docs/source/tutorials/index.rst | 6 ++ requirements.txt | 2 + 21 files changed, 466 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/sphinx-render.yml create mode 100644 docs/Makefile create mode 100644 docs/make.bat create mode 100644 docs/source/_static/custom.css create mode 100644 docs/source/_static/dsc.png create mode 100644 docs/source/_static/favicon.ico create mode 100644 docs/source/_templates/autosummary/base.rst create mode 100644 docs/source/_templates/autosummary/class.rst create mode 100644 docs/source/_templates/autosummary/module.rst create mode 100644 docs/source/_templates/footer.html create mode 100644 docs/source/conf.py create mode 100644 docs/source/explanation/index.rst create mode 100644 docs/source/how_to/index.rst create mode 100644 docs/source/index.rst create mode 100644 docs/source/reference/coverage.rst create mode 100644 docs/source/reference/index.rst create mode 100644 docs/source/tutorials/index.rst diff --git a/.github/workflows/sphinx-render.yml b/.github/workflows/sphinx-render.yml new file mode 100644 index 00000000..94cd86e8 --- /dev/null +++ b/.github/workflows/sphinx-render.yml @@ -0,0 +1,34 @@ +name: "Render docs" + +on: push + +env: + PYTHON_VERSION: "3.9" + PUSH_BRANCH: "refs/heads/dev" + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v3 + with: + python-version: ${{ env.PYTHON_VERSION }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Sphinx build # use -W to turn warnings into errors + run: | + make -C docs/ html SPHINXOPTS="-W" + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + # deploy if it's being pushed only to this branch + if: ${{ github.ref == env.PUSH_BRANCH }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/build/html + commit_message: ${{ github.event.head_commit.message }} diff --git a/.gitignore b/.gitignore index 5a5f920d..00e83d7c 100644 --- a/.gitignore +++ b/.gitignore @@ -167,7 +167,12 @@ instance/ .scrapy # Sphinx documentation -docs/_build/ +docs/source/reference/_autosummary/ +docs/build/ +!docs/README.md +!docs/gtfs +!docs/source/_static/dsc.png +!docs/source/_templates/footer.html # PyBuilder .pybuilder/ @@ -306,11 +311,6 @@ vignettes/*.pdf # R Environment Variables .Renviron -# pkgdown site -docs/* -!docs/README.md -!docs/gtfs - # translation temp files po/*~ diff --git a/README.md b/README.md index 673c4e24..419bfe23 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -Repository status is still in development (caution required) Build status badge +Repository status is still in development (caution required) Build status badge Docs status badge diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md index deecd1ec..3f78bbdd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,88 @@ # `docs` folder overview -All documentation for the project should be included in this folder. +This folder contains all the source files needed to build package documentation +using [`sphinx`](https://www.sphinx-doc.org/en/master/). + +## Building the documentation locally + +This is useful whilst editing the documentation locally and previewing new +additions/edits. Following the steps below will render the documenation locally +allowing you to check for any warnings or errors during the build stage. + +1. Ensure the dependencies in `requirements.txt` have been installed. This will +install `sphinx`, the necessary themes, and all the other Python dependecies +for this package. + +2. Call the following from the project root: + + ```bash + make -C docs/ html + ``` + + Or, from the within this docs directory: + + ```bash + make html + ``` + + > Note: On Windows, if you are using PowerShell the make command may not + work. If this is the case, you should be able to run `.\make.bat html` + after navigating to this directory. + + Calling one of the commands above will trigger `sphinx-build` and render + the documentaion in HTML format within the `build` directory. + +3. Inside `docs/build/html/`, opening/refreshing `index.html` in a browser will +display the documentation landing page. + +## Cleaning the docs folder + +From time to time, it maybe necessary to clean the build folder (e.g., to +unpick some edits that have not made their way through to the browser for some +reason). + +> Note: `sphinx-build` will only rebuild pages if the respective source file(s) +has changed. Calling clean maybe helpful to either force an entire rebuild of +all pages, or include an update that isn't picked up via a source (e.g. a CSS +file update). + +To clean the build folder, call the following: + +```bash +# from the project root +make -C docs/ clean + +# or, from within the docs folder +make clean +``` + +It's also possible to combine both the clean and HTML build commands together +as follows: + +```bash +# from the project root +make -C docs/ clean html + +# or, from within the docs folder +make clean html +``` + +> Note: the contents of the `docs/build` folder are ignored by Git. Cleaning +the build folder locally will therefore only impact your local documentation +build. + +## Building the documentation 'on push' to a remote branch + +There is a GitHub action set-up (`.github/workflows/sphinx-render.yml`) that +runs on all pushes to any branch. This will attempt to build the `docs/source` +folder content and will fail if `sphinx-build` throws any errors or warnings. +This helps ensure the quality of the documentation on each push and allows +developers to correct any issues sooner. + +The deployment stage of this GitHub action is only done when pushing to the +`dev` branch (i.e. after merging in a PR). Therefore, any changes made to +`docs` in a feature branch will not appear in the deployed documentation. + +> Note: the current implementation of the GitHub action deploys on push to +`dev` but this is subject to change at a later date. It will likely be change +to puses to `main` once an inital release of this package is available. diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..747ffb7b --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 00000000..4db02d8e --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,6 @@ +/* Provision for custom css */ + +/* wraps text in toctree to fit into sidebar width */ +li[class^="toctree"] { + word-break: break-all; +} diff --git a/docs/source/_static/dsc.png b/docs/source/_static/dsc.png new file mode 100644 index 0000000000000000000000000000000000000000..ee31b7aae18e44f7ca45d3cf0e41fbf38cf6d855 GIT binary patch literal 305645 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 Qiz%75=b3>#4TEUyhEuPgyW?@PI`3p^Xk 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

IjlU9ph|E$leFN5uaI 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 EKlCKpQvd(} literal 0 HcmV?d00001 diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6af29abca9fa7257b05396df36bed5013f0ba9ab GIT binary patch literal 15406 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
+ +

+ +
+ +
+ For more ONS Data Science Campus news see the + + Campus' website + + and + + follow us on Twitter. + +
+ +{% endblock %} diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..2c2340fa --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,47 @@ +"""Configuration file for the Sphinx documentation builder. + +For the full list of built-in configuration values, see the documentation: +https://www.sphinx-doc.org/en/master/usage/configuration.html +""" +import os +import sys + +from pyprojroot import here + +# Add source folder to path for autodoc +sys.path.insert(0, os.path.join(here(), "src")) + + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = "transport-performance" +copyright = "2023, ONS Data Science Campus" +author = "ONS Data Science Campus" +release = "0.0.1" + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.viewcode", +] + +templates_path = ["_templates"] +exclude_patterns = [] + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = "sphinx_rtd_theme" +html_static_path = ["_static"] +html_favicon = "_static/favicon.ico" +html_logo = "_static/dsc.png" +html_theme_options = { + "style_external_links": True, +} +html_css_files = [ + "custom.css", +] diff --git a/docs/source/explanation/index.rst b/docs/source/explanation/index.rst new file mode 100644 index 00000000..286c1f05 --- /dev/null +++ b/docs/source/explanation/index.rst @@ -0,0 +1,6 @@ +Explanation +=========== + +.. warning:: + Page under construction. This section may include topics such as describing + this package in more detail and background on methodologies. diff --git a/docs/source/how_to/index.rst b/docs/source/how_to/index.rst new file mode 100644 index 00000000..43b97511 --- /dev/null +++ b/docs/source/how_to/index.rst @@ -0,0 +1,6 @@ +How-to Guides +============= + +.. warning:: + Page under construction. This section may include topics such as how to + install the package and any dependencies. diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..4a45f1d8 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,56 @@ +.. transport-performance documentation master file, created by + sphinx-quickstart on Fri Aug 25 09:58:04 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +transport-performance +===================== + +.. raw:: html + + Repository status is still in development (caution required) + Build status badge + Docs status badge + + +.. warning:: + The :code:`transport-performance` package and this documentation are still under + active development and are not yet complete. Caution should be taken before + using or referencing this work in any way. + +:code:`transport-performance` is a python package for measuring the performance of +transport networks in and around urban centres. + +This documentation adopts the Diátaxis framework to structure pages and its +content. See the official `Diátaxis documentation`_ for more details. + +.. toctree:: + :hidden: + :titlesonly: + :caption: Explanation + + explanation/index + +.. toctree:: + :hidden: + :titlesonly: + :caption: Reference + + reference/index + reference/coverage + +.. toctree:: + :hidden: + :titlesonly: + :caption: How-to Guides + + how_to/index + +.. toctree:: + :hidden: + :titlesonly: + :caption: Tutorials + + tutorials/index + +.. _Diátaxis documentation: https://diataxis.fr/ diff --git a/docs/source/reference/coverage.rst b/docs/source/reference/coverage.rst new file mode 100644 index 00000000..08ea32f6 --- /dev/null +++ b/docs/source/reference/coverage.rst @@ -0,0 +1,8 @@ +Unit Test Coverage +================== + +The python package `coverage`_ is used to measure :code:`transport-performance`'s +unit test coverage. You can track unit test coverage insights `on CodeCov`_. + +.. _on CodeCov: https://app.codecov.io/gh/datasciencecampus/transport-network-performance +.. _coverage: https://coverage.readthedocs.io/en/7.3.0/ diff --git a/docs/source/reference/index.rst b/docs/source/reference/index.rst new file mode 100644 index 00000000..280ae8c5 --- /dev/null +++ b/docs/source/reference/index.rst @@ -0,0 +1,15 @@ +`transport-performance` API +=========================== + +.. warning:: + Page under construction. This section may include topics such as 'one-off' + references for users, e.g. API references and contributing/code of conduct. + +.. autosummary:: + :toctree: _autosummary + :recursive: + + transport_performance.urban_centres + transport_performance.population + transport_performance.gtfs + transport_performance.osm diff --git a/docs/source/tutorials/index.rst b/docs/source/tutorials/index.rst new file mode 100644 index 00000000..77813cba --- /dev/null +++ b/docs/source/tutorials/index.rst @@ -0,0 +1,6 @@ +Tutorials +========= + +.. warning:: + Page under construction. This section may include topics tutorials on + using the package. diff --git a/requirements.txt b/requirements.txt index 2a8c6e1a..01186443 100644 --- a/requirements.txt +++ b/requirements.txt @@ -26,4 +26,6 @@ folium mapclassify seaborn numpy>=1.25.0 # test suite will fail if user installed lower than this +sphinx +sphinx-rtd-theme -e . From f369fb72d59eb71d4c6d8cda6cab28a306d396cd Mon Sep 17 00:00:00 2001 From: Charlie Browning <121952297+CBROWN-ONS@users.noreply.github.com> Date: Thu, 14 Sep 2023 14:10:36 +0100 Subject: [PATCH 4/7] Remove hard coded zoom value (#127) --- src/transport_performance/gtfs/validation.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/transport_performance/gtfs/validation.py b/src/transport_performance/gtfs/validation.py index 12da36d7..4e1baad9 100644 --- a/src/transport_performance/gtfs/validation.py +++ b/src/transport_performance/gtfs/validation.py @@ -249,17 +249,15 @@ def viz_stops( title_pre = "

" title_html = f"{title_pre}{txt}

" - - gtfs_centroid = self.feed.compute_centroid() - m = folium.Map( - location=[gtfs_centroid.y, gtfs_centroid.x], zoom_start=5 - ) geo_j = gdf.to_json() geo_j = folium.GeoJson( data=geo_j, style_function=lambda x: {"fillColor": "red"} ) + m = folium.Map() geo_j.add_to(m) m.get_root().html.add_child(folium.Element(title_html)) + # format map zoom and center + m.fit_bounds(m.get_bounds()) m.save(out_pth) except KeyError: print("Key Error. Map was not written.") From 79f947ca9a7dc12e51ae44ef87309a69dc8ddfba Mon Sep 17 00:00:00 2001 From: SergioRec <117715997+SergioRec@users.noreply.github.com> Date: Fri, 15 Sep 2023 14:19:44 +0100 Subject: [PATCH 5/7] 95 uc tests (#128) * feat: added tests to check fill threshold output * feat: added tests to check cell pop threshold outputs * feat: added tests for diagonal bool output * feat: added tests for cluster population threshold outputs * feat: added assertion for number of clusters detected based on diagonal * feat: added tests for actual shape of output polygon * chore: added clarification docstring; corrected TestClusterPop docstring --------- Co-authored-by: Ethan Moss --- tests/urban_centres/test_urban_centres.py | 288 +++++++++++++++++----- 1 file changed, 229 insertions(+), 59 deletions(-) diff --git a/tests/urban_centres/test_urban_centres.py b/tests/urban_centres/test_urban_centres.py index 16ad1e41..10ecaf53 100644 --- a/tests/urban_centres/test_urban_centres.py +++ b/tests/urban_centres/test_urban_centres.py @@ -1,6 +1,13 @@ """Unit tests for transport_performance/urban_centres/urban_centres_class. TODO: add docs. + +Note: in the class parameterised tests below there are some arguments that are +not used across all tests within them. This is a deliberate design choice, +since pytest expects all parameterised arguments to be passed - removing or +excluding from a signle test triggers errors. The alternative would be to +separate the tests and reparameterise each separetly, but this would lead to a +larger codebase that is more difficult to maintain. """ import os @@ -20,6 +27,7 @@ import transport_performance.urban_centres.raster_uc as ucc +# fixtures @pytest.fixture def dummy_pop_array(tmp_path: str): """Create dummy population array.""" @@ -28,9 +36,9 @@ def dummy_pop_array(tmp_path: str): dummy = np.array( [ [5000, 5000, 5000, 1500, 1500, 0, 0, 0, 5000, 5000], - [5000, 5000, 5000, 0, 0, 0, 0, 0, 0, 0], + [5000, 5000, 5000, 0, 0, 1500, 0, 0, 0, 0], [5000, 5000, 5000, 1500, 1500, 0, 0, 0, 0, 0], - [1500, 1500, 1500, 0, 0, 0, 0, 0, 0, 0], + [5000, 1500, 1500, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 500, 100, 0, 0, 0], [1000, 0, 0, 0, 100, 40, 5000, 0, 0, 0], @@ -140,7 +148,8 @@ def outside_cluster_centre(): return (41.74, -13.25) -# test exceptions for input parameters +# tests +# test exceptions for file path @pytest.mark.parametrize( "filepath, func, expected", [ @@ -162,6 +171,7 @@ def test_file(filepath, func, bbox, cluster_centre, expected): ) +# test exceptions for bounding box @pytest.mark.parametrize( "window, expected", [ @@ -187,6 +197,7 @@ def test_bbox(dummy_pop_array, window, cluster_centre, expected): ) +# test exceptions for area centre @pytest.mark.parametrize( "centre_coords, expected", [ @@ -209,6 +220,7 @@ def test_centre(dummy_pop_array, bbox, centre_coords, expected): ) +# test exceptions for band @pytest.mark.parametrize( "band, expected", [ @@ -229,95 +241,225 @@ def test_band_n(dummy_pop_array, bbox, cluster_centre, band, expected): ) +# test cell population threshold @pytest.mark.parametrize( - "cell_pop_t, expected", + "cell_pop_t, expected, flags", [ - (1500, does_not_raise()), - (1500.5, pytest.raises(TypeError)), - ("1500", pytest.raises(TypeError)), + (1500, does_not_raise(), [True, True, False]), + (5000, does_not_raise(), [True, False, False]), + (1500.5, pytest.raises(TypeError), []), + ("1500", pytest.raises(TypeError), []), # tests value that would not create any cluster - (150000, pytest.raises(ValueError)), + (150000, pytest.raises(ValueError), []), ], ) -def test_cell_pop_t( - dummy_pop_array, bbox, cluster_centre, cell_pop_t, expected -): - """Test cell_pop_threshold parameter.""" - with expected: - assert ( - ucc.UrbanCentre(dummy_pop_array).get_urban_centre( +class TestCellPop: + """Class to test effect of cell pop threshold on output.""" + + def test_cell_pop_t( + self, + dummy_pop_array, + bbox, + cluster_centre, + cell_pop_t, + expected, + flags, + ): + """Test cell_pop_threshold parameter.""" + with expected: + assert ( + ucc.UrbanCentre(dummy_pop_array).get_urban_centre( + bbox, cluster_centre, cell_pop_threshold=cell_pop_t + ) + is not None + ) + + def test_cell_pop_t_output( + self, + dummy_pop_array, + bbox, + cluster_centre, + cell_pop_t, + expected, + flags, + ): + """Test cell_pop_threshold output.""" + if flags != []: + uc = ucc.UrbanCentre(dummy_pop_array) + uc.get_urban_centre( bbox, cluster_centre, cell_pop_threshold=cell_pop_t ) - is not None - ) + # fills with 5 and 7 + assert uc._UrbanCentre__pop_filt_array[0, 2] == flags[0] + # fills with 5 but not 7 + assert uc._UrbanCentre__pop_filt_array[0, 3] == flags[1] + # doesn't fill (checks if outside bounds are 0) + assert uc._UrbanCentre__pop_filt_array[6, 0] == flags[2] +# test diagonal boolean @pytest.mark.parametrize( - "diagonal, expected", + "diagonal, expected, cluster, num_clusters", [ - (True, does_not_raise()), - (False, does_not_raise()), - ("True", pytest.raises(TypeError)), + (True, does_not_raise(), 1, 3), + (False, does_not_raise(), 3, 4), + (1, pytest.raises(TypeError), 0, 0), + ("True", pytest.raises(TypeError), 0, 0), ], ) -def test_diag(dummy_pop_array, bbox, cluster_centre, diagonal, expected): - """Test diag parameter.""" - with expected: - assert ( - ucc.UrbanCentre(dummy_pop_array).get_urban_centre( - bbox, cluster_centre, diag=diagonal +class TestDiag: + """Class to test effect of diagonal boolean on output.""" + + def test_diag( + self, + dummy_pop_array, + bbox, + cluster_centre, + diagonal, + expected, + cluster, + num_clusters, + ): + """Test diag parameter.""" + with expected: + assert ( + ucc.UrbanCentre(dummy_pop_array).get_urban_centre( + bbox, cluster_centre, diag=diagonal + ) + is not None ) - is not None - ) - + def test_diag_output( + self, + dummy_pop_array, + bbox, + cluster_centre, + diagonal, + expected, + cluster, + num_clusters, + ): + """Test diag parameter output.""" + if cluster != 0: + uc = ucc.UrbanCentre(dummy_pop_array) + uc.get_urban_centre(bbox, cluster_centre, diag=diagonal) + # checks if diagonal cell is clustered with main blob or separate + assert uc._UrbanCentre__cluster_array[1, 5] == cluster + assert uc._UrbanCentre__num_clusters == num_clusters + + +# test cluster population threshold @pytest.mark.parametrize( - "cluster_pop_t, expected", + "cluster_pop_t, expected, clusters", [ - (50000, does_not_raise()), - (50000.5, pytest.raises(TypeError)), - ("50000", pytest.raises(TypeError)), + (50000, does_not_raise(), [1, 0, 0]), + (10000, does_not_raise(), [1, 2, 0]), + (50000.5, pytest.raises(TypeError), []), + ("50000", pytest.raises(TypeError), []), # test value that would filter out all clusters - (1000000, pytest.raises(ValueError)), + (1000000, pytest.raises(ValueError), []), ], ) -def test_cluster_pop_t( - dummy_pop_array, bbox, cluster_centre, cluster_pop_t, expected -): - """Test pop_threshold parameter.""" - with expected: - assert ( - ucc.UrbanCentre(dummy_pop_array).get_urban_centre( +class TestClusterPop: + """Class to test effect of clustering pop threshold on output.""" + + def test_cluster_pop_t( + self, + dummy_pop_array, + bbox, + cluster_centre, + cluster_pop_t, + expected, + clusters, + ): + """Test pop_threshold parameter.""" + with expected: + assert ( + ucc.UrbanCentre(dummy_pop_array).get_urban_centre( + bbox, cluster_centre, cluster_pop_threshold=cluster_pop_t + ) + is not None + ) + + def test_cluster_pop_t_output( + self, + dummy_pop_array, + bbox, + cluster_centre, + cluster_pop_t, + expected, + clusters, + ): + """Test pop_threshold outputs.""" + if clusters != []: + uc = ucc.UrbanCentre(dummy_pop_array) + uc.get_urban_centre( bbox, cluster_centre, cluster_pop_threshold=cluster_pop_t ) - is not None - ) + # checks if diagonal cell is clustered with main blob or separate + assert uc._UrbanCentre__urban_centres_array[0, 0] == clusters[0] + assert uc._UrbanCentre__urban_centres_array[0, 9] == clusters[1] + assert uc._UrbanCentre__urban_centres_array[6, 6] == clusters[2] +# test adjacent cells threshold to fill @pytest.mark.parametrize( - "cell_fill_t, expected", + "cell_fill_t, expected, fills", [ - (5, does_not_raise()), - (5.5, pytest.raises(TypeError)), - ("5", pytest.raises(TypeError)), + (5, does_not_raise(), [1, 1, 0]), + (7, does_not_raise(), [1, 0, 0]), + (5.5, pytest.raises(TypeError), []), + ("5", pytest.raises(TypeError), []), # test values outside boundaries - (11, pytest.raises(ValueError)), - (0, pytest.raises(ValueError)), + (11, pytest.raises(ValueError), []), + (0, pytest.raises(ValueError), []), ], ) -def test_cell_fill_t( - dummy_pop_array, bbox, cluster_centre, cell_fill_t, expected -): - """Test cell_fill_threshold parameter.""" - with expected: - assert ( - ucc.UrbanCentre(dummy_pop_array).get_urban_centre( +class TestFill: + """Class to test effect of fill threshold on output.""" + + def test_cell_fill_t( + self, + dummy_pop_array, + bbox, + cluster_centre, + cell_fill_t, + expected, + fills, + ): + """Test cell_fill_threshold parameter.""" + with expected: + assert ( + ucc.UrbanCentre(dummy_pop_array).get_urban_centre( + bbox, cluster_centre, cell_fill_treshold=cell_fill_t + ) + is not None + ) + + def test_cell_fill_output( + self, + dummy_pop_array, + bbox, + cluster_centre, + cell_fill_t, + expected, + fills, + ): + """Test fill output.""" + if fills != []: + uc = ucc.UrbanCentre(dummy_pop_array) + uc.get_urban_centre( bbox, cluster_centre, cell_fill_treshold=cell_fill_t ) - is not None - ) + # fills with 5 and 7 + assert uc._UrbanCentre__filled_array[1, 3] == fills[0] + # fills with 5 but not 7 + assert uc._UrbanCentre__filled_array[1, 4] == fills[1] + # doesn't fill (checks if outside bounds are 0) + assert uc._UrbanCentre__filled_array[4, 0] == fills[2] +# test nodata parameter @pytest.mark.parametrize( "v_nodata, expected", [ @@ -337,6 +479,7 @@ def test_v_nodata(dummy_pop_array, bbox, cluster_centre, v_nodata, expected): ) +# test buffer parameter @pytest.mark.parametrize( "buffer, expected", [ @@ -357,6 +500,7 @@ def test_buffer(dummy_pop_array, bbox, cluster_centre, buffer, expected): ) +# test intermediate output types @pytest.mark.parametrize( "output, expected", [ @@ -381,11 +525,37 @@ def test_output_types(dummy_pop_array, bbox, cluster_centre, output, expected): assert type(getattr(obj, output)) == expected +# test final output characteristics using defaults def test_final_output(dummy_pop_array, bbox, cluster_centre): """Test final output.""" out = ucc.UrbanCentre(dummy_pop_array).get_urban_centre( bbox, cluster_centre ) + + # uc expected coordinates + # coordinates will need to be recalculated if array fixture changes + # you can just do list(Polygon.exterior.coords) to get coordinates + uc_coords = [ + (-243000.0, 6056000.0), + (-243000.0, 6052000.0), + (-240000.0, 6052000.0), + (-240000.0, 6053000.0), + (-238000.0, 6053000.0), + (-238000.0, 6056000.0), + (-243000.0, 6056000.0), + ] + assert out.loc[0][1] == Polygon(uc_coords) + + # bbox expected coordinates + bbox_coords = [ + (-253000.0, 6042000.0), + (-228000.0, 6042000.0), + (-228000.0, 6066000.0), + (-253000.0, 6066000.0), + (-253000.0, 6042000.0), + ] + assert out.loc[2][1] == Polygon(bbox_coords) + # type of output assert type(out) == gpd.GeoDataFrame From 8d973c4f6409f4d27a944567730e54a55785db84 Mon Sep 17 00:00:00 2001 From: Charlie Browning <121952297+CBROWN-ONS@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:07:57 +0100 Subject: [PATCH 6/7] HTML outputs for GTFS data. (#112) * Add code for producing HTML outputs for GTFS data * Update requirements.txt * fix: Update tests to reflect changes * Added better file ext checking; update tests; added new tests * chore: Clean up docstrings to comply with numpy formatting * chore: Add additional raises in docstrings * chore: Breaking changes with dev resolved * refactor: Several type utils -> _type_defence * fix: Undo accidental overwrite with review branch * test: _type_defence raises with single or multiple types * test: _type_defence pass on single & multiple values to types * Refactor save paths for plotting summaries (#124) * feat: Tests for _check_column_in_df() * fix: Added another stage of testing for set_up_report_dir() which improves coverage * Updated gtfs_utils.py and corresponding tests. Removed scheme param. Improved type check. Improved type hint. Included test fixture * Make TemplateHtml methods private; Update docstring * Updated error message for replace_multiple=False and multiple placeholders found * Updated test_report_utils.py to reflect private functions * Updated _set_up_report_dir() to better suite check_parent_dir_exists() functionality * Update tests in test_report_utils * Only .lower() orientation in one place, rather than 2 * Create small helper function to remove duplicate logic; added testing * Move test to test__plot_summary_defences() as it is more appropriate * Refactore validation.py to only use _plot_summary();Added additional defences;Included and updated testing for all changes/additions * Update check_attribute() due to save error * Update defence.py * Update defence.py for missing char * chore: Run pre-commit against all files * docs: Update private methods in docstring * chore: Remove lint * refactor: Param formatting in Error message * refactor: Rm str replace carriage returns logic in test * chore: Remove filterwarning --------- Co-authored-by: r-leyshon --- .gitignore | 11 +- requirements.txt | 2 + src/transport_performance/gtfs/gtfs_utils.py | 85 ++ .../gtfs/report/css_styles/styles.css | 195 +++++ .../html_templates/evaluation_template.html | 117 +++ .../report/html_templates/stops_template.html | 42 + .../html_templates/summary_template.html | 46 ++ .../gtfs/report/report_utils.py | 185 +++++ src/transport_performance/gtfs/routes.py | 4 +- src/transport_performance/gtfs/validation.py | 726 +++++++++++++++++- src/transport_performance/osm/osm_utils.py | 4 +- src/transport_performance/utils/defence.py | 116 ++- tests/data/gtfs/report/html_template.html | 6 + tests/gtfs/report/test_report_utils.py | 113 +++ tests/gtfs/test_gtfs_utils.py | 55 +- tests/gtfs/test_routes.py | 6 +- tests/gtfs/test_validation.py | 296 ++++++- tests/osm/test_osm_utils.py | 5 +- tests/utils/test_defence.py | 209 +++++ 19 files changed, 2168 insertions(+), 55 deletions(-) create mode 100644 src/transport_performance/gtfs/report/css_styles/styles.css create mode 100644 src/transport_performance/gtfs/report/html_templates/evaluation_template.html create mode 100644 src/transport_performance/gtfs/report/html_templates/stops_template.html create mode 100644 src/transport_performance/gtfs/report/html_templates/summary_template.html create mode 100644 src/transport_performance/gtfs/report/report_utils.py create mode 100644 tests/data/gtfs/report/html_template.html create mode 100644 tests/gtfs/report/test_report_utils.py diff --git a/.gitignore b/.gitignore index 00e83d7c..2cc64822 100644 --- a/.gitignore +++ b/.gitignore @@ -5,10 +5,18 @@ # moved blanket rules above specific exceptions for test fixtures *.zip *.pkl -# except test fixtures +*.html + +# exception for test fixtures !tests/data/newport-2023-06-13.osm.pbf !tests/data/newport-20230613_gtfs.zip !tests/data/gtfs/route_lookup.pkl +!tests/data/gtfs/report/html_template.html + +# exception for html templates +!src/transport_performance/gtfs/report/html_templates/evaluation_template.html +!src/transport_performance/gtfs/report/html_templates/stops_template.html +!src/transport_performance/gtfs/report/html_templates/summary_template.html ### Project structure ### data/* @@ -35,7 +43,6 @@ outputs/* *.Rproj -*.html *.pdf *.csv *.rds diff --git a/requirements.txt b/requirements.txt index 01186443..beb960e2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,6 +25,8 @@ cartopy folium mapclassify seaborn +pretty_html_table +kaleido numpy>=1.25.0 # test suite will fail if user installed lower than this sphinx sphinx-rtd-theme diff --git a/src/transport_performance/gtfs/gtfs_utils.py b/src/transport_performance/gtfs/gtfs_utils.py index e72df333..956f05f7 100644 --- a/src/transport_performance/gtfs/gtfs_utils.py +++ b/src/transport_performance/gtfs/gtfs_utils.py @@ -3,10 +3,13 @@ import geopandas as gpd from shapely.geometry import box from pyprojroot import here +import plotly.graph_objects as go +import pandas as pd from transport_performance.utils.defence import ( _is_expected_filetype, _check_list, + _type_defence, ) @@ -60,3 +63,85 @@ def bbox_filter_gtfs( print(f"Filtered feed written to {out_pth}.") return None + + +# NOTE: Possibly move to a more generalised utils file +def convert_pandas_to_plotly( + df: pd.DataFrame, return_html: bool = False +) -> go.Figure: + """Convert a pandas dataframe to a visual plotly figure. + + Parameters + ---------- + df : pd.DataFrame + A pandas dataframe to convert to plotly + (single index only) + return_html : bool, optional + Whether or not to return the html element, + by default False + + Returns + ------- + go.Figure + A plotly figure containing the drawn dataframe + + Raises + ------ + LookupError + An error raised if an invalid colour scheme is passed + TypeError + An error raised if the given pandas dataframe is MultiIndex + + """ + # pre-defined colour schemes + schemes = { + "dsc": { + "header_fill": "#12436D", + "header_font_colour": "white", + "cell_fill": "#A285D1", + "cell_font_colour": "black", + "font_family": "sans-serif", + "line_colour": "black", + } + } + # defences + _type_defence(df, "df", pd.DataFrame) + _type_defence(return_html, "return_html", bool) + if isinstance(df.columns, pd.MultiIndex) or isinstance( + df.index, pd.MultiIndex + ): + raise TypeError( + "Pandas dataframe must have a singular index, not MultiIndex. " + "This means that 'df.columns' or 'df.index' does not return a " + "MultiIndex." + ) + # harcoding scheme for now. Could be changed to param if more are added + scheme = "dsc" + # create plotly df + fig = go.Figure( + data=go.Table( + header=dict( + values=df.columns.values, + fill_color=schemes[scheme]["header_fill"], + font=dict( + color=schemes[scheme]["header_font_colour"], + family=schemes[scheme]["font_family"], + ), + line_color=schemes[scheme]["line_colour"], + ), + cells=dict( + values=[df[col_name] for col_name in df.columns], + fill_color="#A285D1", + font=dict( + color=schemes[scheme]["cell_font_colour"], + family=schemes[scheme]["font_family"], + ), + align="left", + line_color=schemes[scheme]["line_colour"], + ), + ) + ) + + if return_html: + return fig.to_html(full_html=False) + return fig diff --git a/src/transport_performance/gtfs/report/css_styles/styles.css b/src/transport_performance/gtfs/report/css_styles/styles.css new file mode 100644 index 00000000..1e816520 --- /dev/null +++ b/src/transport_performance/gtfs/report/css_styles/styles.css @@ -0,0 +1,195 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Poppins', sans-serif; +} + +body { + min-height: 100vh; +} + +a { + text-decoration: none; + +} + +li { + list-style: none; +} + +h1, +h2 { + color: black; +} + +h3 { + color: #999; +} + +table { + overflow: hidden; + overflow-x: scroll; + max-width: 1500px; + display: block; + overflow-y: scroll; + max-height: 800px; +} + +thead { + position: sticky; + top: -10px; +} + +.btn { + background: #f05462; + color: white; + padding: 5px 10px; + text-align: center; +} + +.btn:hover { + color: #f05462; + background: white; + padding: 3px 8px; + border: 2px solid #f05462; +} + +.title { + display: flex; + align-items: center; + justify-content: space-around; + padding: 15px 10px; + border-bottom: 2px solid #999; +} + +table { + padding: 10px; +} + +th, +td { + text-align: left; + padding: 8px; +} + +.side-menu { + position: fixed; + background: #28A197; + width: 20vw; + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.side-menu .side-menu-title { + height: 10vh; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold +} + +.side-menu li { + font-size: 24px; + padding: 10px 40px; + display: flex; + align-items: center; +} + +.side-menu li:hover { + background: white; + color: #28A197; + +} + +.side-menu li:hover .option{ + color: #28A197; + background-color: white; +} + +.side-menu .option { + color: white; +} + +.side-menu .option:hover{ + color: #28A197; + background-color: white; +} + +.container { + position: absolute; + right: 0; + width: 80vw; + height: 100vh; + background: #f1f1f1; +} + +.container .content { + position: relative; + background: #f1f1f1; + padding-left: 20px; + padding-right: 20px; +} + +.container .content .analysis-cont { + display: flex; + justify-content: space-around; + align-items: flex-start; + flex-wrap: wrap; + background-color: #f1f1f1; + padding: 20px; +} + +.container .content .analysis-cont .summary div { + display: block; +} + + +.container .content .analysis-cont .summary dd { + font-weight: bold; + margin-inline-start: 0; + display: inline-block; + min-width: 130px; +} + +.container .content .analysis-cont .summary dt { + display: inline-block; +} + +.analysis-title { + font-weight: bold; + font-size: large; + margin-bottom: 10px; +} + +hr { + border: 0; + clear:both; + display:block; + width: 100%; + background-color: black; + height: 5px; + } + +.container .header { + position: fixed; + top: 0; + right: 0; + width: 80vw; + height: 10vh; + background: #801650; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); + z-index: 1; +} + +.container .header .header-title { + display: flex; + align-items: center; + color: #F46A25; + font-weight: bold; + font-size: xx-large; +} diff --git a/src/transport_performance/gtfs/report/html_templates/evaluation_template.html b/src/transport_performance/gtfs/report/html_templates/evaluation_template.html new file mode 100644 index 00000000..e4284568 --- /dev/null +++ b/src/transport_performance/gtfs/report/html_templates/evaluation_template.html @@ -0,0 +1,117 @@ + + + + + + + + + GTFS Report [date] + + + +
+
+

GTFS Report

+
+ +
+
+
+
+ GTFS Data Evaluation +
+
+
+
+ GTFS Feed Info +
+
+
+
Publisher Name:
+
[name_placeholder]
+
+
+
Publisher URL:
+
[url_placeholder]
+
+
+
Feed Language:
+
[lang_placeholder]
+
+
+
Feed Start Date:
+
[start_placeholder]
+
+
+
Feed End Data:
+
[end_placeholder]
+
+
+
Feed Version:
+
[version_placeholder]
+
+
+
+
+
+
+ GTFS Feed Counts +
+
+
+
Agencies:
+
[agency_placeholder]
+
+
+
Routes:
+
[routes_placeholder]
+
+
+
Trips:
+
[trips_placeholder]
+
+
+
Stops:
+
[stops_placeholder]
+
+
+
Shapes:
+
[shapes_placeholder]
+
+
+
+
+
+
+ [eval_title_3] +
+
+ [eval_placeholder_3] +
+
+
+
+
+ [eval_title_1] +
+
+ [eval_placeholder_1] +
+
+
+
+
+ [eval_title_2] +
+
+ [eval_placeholder_2] +
+
+
+
+ diff --git a/src/transport_performance/gtfs/report/html_templates/stops_template.html b/src/transport_performance/gtfs/report/html_templates/stops_template.html new file mode 100644 index 00000000..411ea46f --- /dev/null +++ b/src/transport_performance/gtfs/report/html_templates/stops_template.html @@ -0,0 +1,42 @@ + + + + + + + + + GTFS Report - [date] + + + +
+
+

GTFS Report

+
+ +
+
+
+
+ GTFS Trips and Routes Summaries +
+
+
+
+ [stops_title_1] + +
+
+
+
+ [stops_title_2] + +
+
+
+ diff --git a/src/transport_performance/gtfs/report/html_templates/summary_template.html b/src/transport_performance/gtfs/report/html_templates/summary_template.html new file mode 100644 index 00000000..72efdd3b --- /dev/null +++ b/src/transport_performance/gtfs/report/html_templates/summary_template.html @@ -0,0 +1,46 @@ + + + + + + + + + GTFS Report - [date] + + + +
+
+

GTFS Report

+
+ +
+
+
+
+ GTFS Trips and Routes Summaries +
+
+
+
+ [plotly_title_1] +
+ [plotly_placeholder_1] +
+
+
+
+
+ [plotly_title_2] +
+ [plotly_placeholder_2] +
+
+
+
+ diff --git a/src/transport_performance/gtfs/report/report_utils.py b/src/transport_performance/gtfs/report/report_utils.py new file mode 100644 index 00000000..96f963a1 --- /dev/null +++ b/src/transport_performance/gtfs/report/report_utils.py @@ -0,0 +1,185 @@ +"""Utils to assist in the creation of a HTML report for GTFS.""" +from typing import Union +import pathlib +import shutil +import os + +from transport_performance.utils.defence import ( + _type_defence, + _handle_path_like, + _check_parent_dir_exists, +) + +# Constant to remove non needed columns from repeated +# pair error information. +# This is a messy method however it is the only +# way to ensure that the error report remains +# dynamic and can adadpt to different tables +# in the GTFS file. + +GTFS_UNNEEDED_COLUMNS = { + "routes": [], + "agency": ["agency_phone", "agency_lang"], + "stop_times": [ + "stop_headsign", + "pickup_type", + "drop_off_type", + "shape_dist_traveled", + "timepoint", + ], + "stops": [ + "wheelchair_boarding", + "location_type", + "parent_station", + "platform_code", + ], + "calendar_dates": [], + "calendar": [], + "trips": [ + "trip_headsign", + "block_id", + "shape_id", + "wheelchair_accessible", + ], + "shapes": [], +} + + +class TemplateHTML: + """A class for inserting HTML string into a template. + + Attributes + ---------- + template : str + A string containing the HTML template. + + Methods + ------- + _insert(placeholder: str, value: str, replace_multiple: bool = False) + Insert values into the HTML template + _get_template() + Returns the template attribute + + """ + + def __init__(self, path: Union[str, pathlib.Path]) -> None: + """Initialise the TemplateHTML object. + + Parameters + ---------- + path : Union[str, pathlib.Path] + The file path of the html template + + Returns + ------- + None + + """ + _handle_path_like(path, "path") + with open(path, "r", encoding="utf8") as f: + self.template = f.read() + return None + + def _insert( + self, placeholder: str, value: str, replace_multiple: bool = False + ) -> None: + """Insert values into the html template. + + Parameters + ---------- + placeholder : str + The placeholder name in the template. This is a string. In the + template it should be surrounded by square brackets. + value : str + The value to place in the placeholder + location. + replace_multiple : bool, optional + Whether or not to replace multiple placeholders that share the same + placeholder value, by default False + + Returns + ------- + None + + Raises + ------ + ValueError + A ValueError is raised if there are multiple instances of a + place-holder but 'replace_multiple' is not True + + """ + _type_defence(placeholder, "placeholder", str) + _type_defence(value, "value", str) + _type_defence(replace_multiple, "replace_multiple", bool) + occurences = len(self.template.split(f"[{placeholder}]")) - 1 + if occurences > 1 and not replace_multiple: + raise ValueError( + "`replace_multiple` requires True as found \n" + "multiple placeholder matches in template." + ) + + self.template = self.template.replace(f"[{placeholder}]", value) + + def _get_template(self) -> str: + """Get the template attribute of the TemplateHTML object. + + This is an internal method. + This method also allows for better testing with pytest. + + Returns + ------- + str + The template attribute + + """ + return self.template + + +def _set_up_report_dir( + path: Union[str, pathlib.Path] = "outputs", overwrite: bool = False +) -> None: + """Set up the directory that will hold the report. + + Parameters + ---------- + path : Union[str, pathlib.Path], optional + The path to the directory, + by default "outputs" + overwrite : bool, optional + Whether or not to overwrite any current reports, + by default False + + Returns + ------- + None + + Raises + ------ + FileExistsError + Raises an error if you the gtfs report directory already exists in the + given path and overwrite=False + + """ + # create report_dir var + report_dir = os.path.join(path, "gtfs_report") + # defences + _check_parent_dir_exists(report_dir, "path", create=True) + + if os.path.exists(report_dir) and not overwrite: + raise FileExistsError( + "Report already exists at path: " + f"[{path}]." + "Consider setting overwrite=True" + "if you'd like to overwrite this." + ) + + # make gtfs_report dir + try: + os.mkdir(report_dir) + except FileExistsError: + pass + shutil.copy( + src="src/transport_performance/gtfs/report/css_styles/styles.css", + dst=report_dir, + ) + return None diff --git a/src/transport_performance/gtfs/routes.py b/src/transport_performance/gtfs/routes.py index e989645f..d0003f57 100644 --- a/src/transport_performance/gtfs/routes.py +++ b/src/transport_performance/gtfs/routes.py @@ -4,7 +4,7 @@ import requests import warnings -from transport_performance.utils.defence import _url_defence, _bool_defence +from transport_performance.utils.defence import _url_defence, _type_defence warnings.filterwarnings( action="ignore", category=DeprecationWarning, module=".*pkg_resources" @@ -98,7 +98,7 @@ def scrape_route_type_lookup( for url in [gtfs_url, ext_spec_url]: _url_defence(url) - _bool_defence(extended_schema, "extended_schema") + _type_defence(extended_schema, "extended_schema", bool) # Get the basic scheme lookup resp_txt = _get_response_text(gtfs_url) soup = BeautifulSoup(resp_txt, "html.parser") diff --git a/src/transport_performance/gtfs/validation.py b/src/transport_performance/gtfs/validation.py index 4e1baad9..04652572 100644 --- a/src/transport_performance/gtfs/validation.py +++ b/src/transport_performance/gtfs/validation.py @@ -8,12 +8,29 @@ import numpy as np import os import inspect +import plotly.express as px +import plotly.io as plotly_io +from pretty_html_table import build_table +import zipfile +import pathlib +from typing import Union +from plotly.graph_objects import Figure as PlotlyFigure from transport_performance.gtfs.routes import scrape_route_type_lookup from transport_performance.utils.defence import ( _is_expected_filetype, _check_namespace_export, _check_parent_dir_exists, + _check_column_in_df, + _type_defence, + _check_item_in_list, + _check_attribute, +) + +from transport_performance.gtfs.report.report_utils import ( + TemplateHTML, + _set_up_report_dir, + GTFS_UNNEEDED_COLUMNS, ) @@ -93,6 +110,35 @@ def _create_map_title_text(gdf, units, geom_crs): return txt +def _convert_multi_index_to_single(df: pd.DataFrame) -> pd.DataFrame: + """Convert a dataframes index from MultiIndex to a singular index. + + This function also removes any differing names generated from numpy + function + + Parameters + ---------- + df : pd.DataFrame + Pandas dataframe to adjust index (columns) of. + + Returns + ------- + df : pd.DataFrame + Pandas dataframe with a modified index (columns) + + """ + df.columns = df.columns = [ + "_".join(value) if "" not in value else "".join(value) + for value in df.columns.values + ] + df.columns = [ + column.replace("amin", "min").replace("amax", "max") + for column in df.columns.values + ] + + return df + + class GtfsInstance: """Create a feed instance for validation, cleaning & visualisation.""" @@ -116,6 +162,20 @@ def __init__( raise ValueError(f"`units` accepts metric only. Found: {units}") self.feed = gk.read_feed(gtfs_pth, dist_units=units) + self.gtfs_path = gtfs_pth + + def get_gtfs_files(self) -> list: + """Return a list of files making up the GTFS file. + + Returns + ------- + list + A list of files that create the GTFS file + + """ + file_list = zipfile.ZipFile(self.gtfs_path).namelist() + self.file_list = file_list + return self.file_list def is_valid(self): """Check a feed is valid with `gtfs_kit`. @@ -488,16 +548,22 @@ def summarise_trips( # aggregate to mean/median/min/max (default) trips on each day # of the week - day_trip_counts = trip_counts.groupby(["day", "route_type"]).agg( - {"trip_count": summ_ops} + day_trip_counts = ( + trip_counts.groupby(["day", "route_type"]) + .agg({"trip_count": summ_ops}) + .reset_index() ) - day_trip_counts.reset_index(inplace=True) - day_trip_counts = day_trip_counts.round(0) - # order the days (for plotting future purposes) # order the days (for plotting future purposes) day_trip_counts = self._order_dataframe_by_day(df=day_trip_counts) + day_trip_counts = day_trip_counts.round(0) day_trip_counts.reset_index(drop=True, inplace=True) + + # reformat columns + # including normalsing min and max between different + # numpy versions (amin/min, amax/max) + day_trip_counts = _convert_multi_index_to_single(df=day_trip_counts) + self.daily_trip_summary = day_trip_counts.copy() return self.daily_trip_summary @@ -565,8 +631,13 @@ def summarise_routes( day_route_count = self._order_dataframe_by_day(df=day_route_count) day_route_count = day_route_count.round(0) day_route_count.reset_index(drop=True, inplace=True) - self.daily_route_summary = day_route_count.copy() + # reformat columns + # including normalsing min and max between different + # numpy versions (amin/min, amax/max) + day_route_count = _convert_multi_index_to_single(day_route_count) + + self.daily_route_summary = day_route_count.copy() return self.daily_route_summary def get_route_modes(self): @@ -599,3 +670,646 @@ def get_route_modes(self): ) self.route_mode_summary_df = out_tab return self.route_mode_summary_df + + def _plot_summary( + self, + target_column: str, + which: str = "trip", + orientation: str = "v", + day_column: str = "day", + width: int = 2000, + height: int = 800, + xlabel: str = None, + ylabel: str = None, + plotly_kwargs: dict = {}, + return_html: bool = False, + save_html: bool = False, + save_image: bool = False, + out_dir: Union[pathlib.Path, str] = pathlib.Path( + os.path.join("outputs", "gtfs") + ), + img_type: str = "png", + ) -> Union[PlotlyFigure, str]: + """Plot (and save) a summary table using plotly. + + Parameters + ---------- + target_column : str + The name of the column contianing the + target data (counts) + which : str, optional + Which summary to plot. Options include 'trip' and 'route', + by default "trip" + orientation : str, optional + The orientation of the bar plot ("v" or "h"), + by default "v" + day_column : str, optional + The name of the column containing the day, + by default "day" + width : int, optional + The width of the plot (in pixels), by default 2000 + height : int, optional + The height of the plot (in pixels), by default 800 + xlabel : str, optional + The label for the x axis. + If left empty, the column name will be used, + by default None + ylabel : str, optional + The label for the y axis. + If left empty, the column name will be used, + by default None + plotly_kwargs : dict, optional + Kwargs to pass to fig.update_layout() for + additional plot customisation, + by default {} + return_html : bool, optional + Whether or not to return a html string, + by default False + save_html : bool, optional + Whether or not to save the plot as a html file, + by default False + save_image : bool, optional + Whether or not to save the plot as a PNG, + by default False + out_dir : Union[pathlib.Path, str], optional + The directory to save the plot into. If a file extension is added + to this directory, it won't be cleaned. Whatever is passed as the + out dir will be used as the parent directory of the save, leaving + the responsibility on the user to specify the correct path., + by default os.path.join("outputs", "gtfs") + img_type : str, optional + The type of the image to be saved. E.g, .svg or .jpeg., + by defauly "png" + + Returns + ------- + Union[PlotlyFigure, str] + Returns either a HTML string or the plotly figure + + Raises + ------ + ValueError + An error is raised if orientation is not 'v' or 'h'. + ValueError + An error is raised if an invalid iamge type is passed. + + """ + # parameter type defences + _type_defence(which, "which", str) + _type_defence(day_column, "day_column", str) + _type_defence(target_column, "target_column", str) + _type_defence(plotly_kwargs, "plotly_kwargs", dict) + _type_defence(return_html, "return_html", bool) + _type_defence(width, "width", int) + _type_defence(height, "height", int) + _type_defence(xlabel, "xlabel", (str, type(None))) + _type_defence(ylabel, "ylabel", (str, type(None))) + _type_defence(save_html, "save_html", bool) + _type_defence(save_image, "save_iamge", bool) + _type_defence(img_type, "img_type", str) + + # lower params + orientation = orientation.lower() + which = which.lower() + + # ensure 'which' is valid + _check_item_in_list( + item=which, _list=["trip", "route"], param_nm="which" + ) + + raw_pth = os.path.join( + out_dir, + "summary_" + datetime.datetime.now().strftime("%d_%m_%Y-%H_%M_%S"), + ) + _check_parent_dir_exists(raw_pth, "save_pth", create=True) + + # orientation input defences + _check_item_in_list( + item=orientation, _list=["v", "h"], param_nm="orientation" + ) + + # assign the correct values depending on which breakdown has been + # chosen + if which == "trip": + _check_attribute( + obj=self, + attr="daily_trip_summary", + message=( + "The daily_trip_summary table could not be found." + " Did you forget to call '.summarise_trips()' first?" + ), + ) + summary_df = self.daily_trip_summary + target_column = ( + f"trip_count_{target_column}" + if "trip_count" not in target_column + else target_column + ) + + if which == "route": + _check_attribute( + obj=self, + attr="daily_route_summary", + message=( + "The daily_route_summary table could not be found." + " Did you forget to call '.summarise_routes()' first?" + ), + ) + summary_df = self.daily_route_summary + target_column = ( + f"route_count_{target_column}" + if "route_count" not in target_column + else target_column + ) + + # dataframe column defences + _check_column_in_df(df=summary_df, column_name=target_column) + _check_column_in_df(df=summary_df, column_name=day_column) + + # convert column type for better graph plotting + summary_df["route_type"] = summary_df["route_type"].astype("object") + + xlabel = ( + xlabel + if xlabel + else (target_column if orientation == "h" else day_column) + ) + ylabel = ( + ylabel + if ylabel + else (target_column if orientation == "v" else day_column) + ) + + # plot summary using plotly express + fig = px.bar( + summary_df, + x=day_column if orientation == "v" else target_column, + y=target_column if orientation == "v" else day_column, + color="route_type", + barmode="group", + text_auto=True, + height=height, + width=width, + orientation=orientation, + ) + + # format plotly figure + fig.update_layout( + plot_bgcolor="white", + yaxis=dict( + tickfont=dict(size=18), + gridcolor="black", + showline=True, + showgrid=False if orientation == "h" else True, + linecolor="black", + linewidth=2, + title=ylabel, + ), + xaxis=dict( + tickfont=dict(size=18), + gridcolor="black", + showline=True, + showgrid=False if orientation == "v" else True, + linecolor="black", + linewidth=2, + title=xlabel, + ), + font=dict(size=18), + legend=dict( + xanchor="right", + x=0.99, + yanchor="top", + y=0.99, + title="Route Type", + traceorder="normal", + bgcolor="white", + bordercolor="black", + borderwidth=2, + ), + ) + + # apply custom arguments if passed + if plotly_kwargs: + fig.update_layout(**plotly_kwargs) + + # save the plot if specified (with correct file type) + if save_html: + plotly_io.write_html( + fig=fig, + file=os.path.normpath(raw_pth + ".html"), + full_html=False, + ) + + if save_image: + valid_img_formats = [ + "png", + "pdf", + "jpg", + "jpeg", + "webp", + "svg", + ] + if img_type.lower().replace(".", "") not in valid_img_formats: + raise ValueError( + "Please specify a valid image format. Valid formats " + f"include {valid_img_formats}" + ) + plotly_io.write_image( + fig=fig, + file=os.path.normpath( + raw_pth + f".{img_type.replace('.', '')}" + ), + ) + if return_html: + return plotly_io.to_html(fig, full_html=False) + return fig + + def _create_extended_repeated_pair_table( + self, + table: pd.DataFrame, + join_vars: Union[str, list], + original_rows: list[int], + ) -> pd.DataFrame: + """Generate an extended table for repeated pair warnings. + + Parameters + ---------- + table : pd.DataFrame + The dataframe with the repeated pair warnings + join_vars : Union[str, list] + The variables that have repeated pairs + original_rows : list[int] + The original duplicate rows, contained in + the GTFS validation table (rows column) + + Returns + ------- + pd.DataFrame + An extended dataframe containing repeated pairs + + """ + error_table = table.copy().iloc[original_rows] + remaining = table.copy().loc[~table.index.isin(original_rows)] + joined_rows = error_table.merge( + remaining, + how="left", + on=join_vars, + suffixes=["_original", "_duplicate"], + ) + return joined_rows + + def _extended_validation( + self, output_path: Union[str, pathlib.Path], scheme: str = "green_dark" + ) -> None: + """Generate HTML outputs of impacted rows from GTFS errors/warnings. + + Parameters + ---------- + output_path : Union[str, pathlib.Path] + The path to save the HTML output to + scheme : str, optional + Colour scheme from pretty_html_table, by default "green_dark". + Colour schemes can be found here: + https://pypi.org/project/pretty-html-table/ + + Returns + ------- + None + + """ + table_map = { + "agency": self.feed.agency, + "routes": self.feed.routes, + "stop_times": self.feed.stop_times, + "stops": self.feed.stops, + "trips": self.feed.trips, + "calendar": self.feed.calendar, + } + + # determine which errors/warnings have rows that can be located + validation_table = self.is_valid() + validation_table["valid_row"] = validation_table["rows"].apply( + lambda x: 1 if len(x) > 0 else 0 + ) + ext_validation_table = validation_table.copy()[ + validation_table["valid_row"] == 1 + ] + # locate the impacted rows for each error + for table, rows, message, msg_type in zip( + ext_validation_table["table"], + ext_validation_table["rows"], + ext_validation_table["message"], + ext_validation_table["type"], + ): + # create a more informative table for repeated pairs + if "Repeated pair" in message: + join_vars = ( + message.split("(")[1] + .replace(")", "") + .replace(" ", "") + .split(",") + ) + drop_cols = [ + col + for col in GTFS_UNNEEDED_COLUMNS[table] + if col not in join_vars + ] + filtered_tbl = table_map[table].copy().drop(drop_cols, axis=1) + impacted_rows = self._create_extended_repeated_pair_table( + table=filtered_tbl, + join_vars=join_vars, + original_rows=rows, + ) + base_columns = [ + item + for item in list(filtered_tbl.columns) + if item not in join_vars + ] + duplicate_counts = {} + for col in base_columns: + duplicate_counts[col] = impacted_rows[ + impacted_rows[f"{col}_original"] + == impacted_rows[f"{col}_duplicate"] + ].shape[0] + else: + impacted_rows = table_map[table].copy().iloc[rows] + + # create the html to display the impacted rows (clean possibly) + table_html = f""" + + + + +

+ Table:{table}
Message: {message}
+ Type: + {msg_type} +

""" + + # Add additional information for repeated pairs + # to the HTML report + try: + for counter, var in enumerate(duplicate_counts): + if counter == 0: + table_html = ( + table_html + + """
+ + Duplicate Counts""" + ) + table_html = table_html + ( + f""" +
+
{var}:
+
+ {duplicate_counts[var]}
+
""" + ) + table_html = table_html + "
" + except NameError: + pass + + table_html = table_html + build_table( + impacted_rows, scheme, padding="10px", escape=False + ) + + table_html = table_html + "" + + # save the output + save_name = f"{'_'.join(message.split(' '))}_{table}" + with open(f"{output_path}/gtfs_report/{save_name}.html", "w") as f: + f.write(table_html) + + return None + + def html_report( + self, + report_dir: Union[str, pathlib.Path] = "outputs", + overwrite: bool = False, + summary_type: str = "mean", + extended_validation: bool = True, + ) -> None: + """Generate a HTML report describing the GTFS data. + + Parameters + ---------- + report_dir : Union[str, pathlib.Path], optional + The directory to save the report to, + by default "outputs" + overwrite : bool, optional + Whether or not to overwrite the existing report + if it already exists in the report_dir, + by default False + summary_type : str, optional + The type of summary to show on the + summaries on the gtfs report., + by default "mean" + extended_validation : bool, optional + Whether or not to create extended reports + for gtfs validation errors/warnings. + + Returns + ------- + None + + Raises + ------ + ValueError + An error raised if the type of summary passed is invalid + + """ + _type_defence(overwrite, "overwrite", bool) + _type_defence(summary_type, "summary_type", str) + _set_up_report_dir(path=report_dir, overwrite=overwrite) + summary_type = summary_type.lower() + if summary_type not in ["mean", "min", "max", "median"]: + raise ValueError("'summary type' must be mean, median, min or max") + + # store todays date + date = datetime.datetime.strftime(datetime.datetime.now(), "%d-%m-%Y") + + # feed evaluation + self.clean_feed() + validation_dataframe = self.is_valid() + + # create extended reports if requested + if extended_validation: + self._extended_validation(output_path=report_dir) + info_href = ( + validation_dataframe["message"].apply( + lambda x: "_".join(x.split(" ")) + ) + + "_" + + validation_dataframe["table"] + + ".html" + ) + validation_dataframe["info"] = [ + f""" Further Info""" + if len(rows) > 1 + else "Unavailable" + for href, rows in zip(info_href, validation_dataframe["rows"]) + ] + + eval_temp = TemplateHTML( + path=( + "src/transport_performance/gtfs/report/" + "html_templates/evaluation_template.html" + ) + ) + eval_temp._insert( + "eval_placeholder_1", + build_table( + validation_dataframe, + "green_dark", + padding="10px", + escape=False, + ), + ) + eval_temp._insert("eval_title_1", "GTFS Feed Warnings and Errors") + + eval_temp._insert( + "eval_placeholder_2", + build_table(self.feed.agency, "green_dark", padding="10px"), + ) + eval_temp._insert("eval_title_2", "GTFS Agency Information") + + eval_temp._insert( + "name_placeholder", self.feed.feed_info["feed_publisher_name"][0] + ) + eval_temp._insert( + "url_placeholder", + self.feed.feed_info["feed_publisher_url"][0], + replace_multiple=True, + ) + eval_temp._insert( + "lang_placeholder", self.feed.feed_info["feed_lang"][0] + ) + eval_temp._insert( + "start_placeholder", self.feed.feed_info["feed_start_date"][0] + ) + eval_temp._insert( + "end_placeholder", self.feed.feed_info["feed_end_date"][0] + ) + eval_temp._insert( + "version_placeholder", self.feed.feed_info["feed_version"][0] + ) + + count_lookup = dict(self.feed.describe().to_numpy()) + eval_temp._insert( + "agency_placeholder", str(len(count_lookup["agencies"])) + ) + eval_temp._insert( + "routes_placeholder", str(count_lookup["num_routes"]) + ) + eval_temp._insert("trips_placeholder", str(count_lookup["num_trips"])) + eval_temp._insert("stops_placeholder", str(count_lookup["num_stops"])) + eval_temp._insert( + "shapes_placeholder", str(count_lookup["num_shapes"]) + ) + + self.get_gtfs_files() + file_list_html = "" + for num, file in enumerate(self.file_list, start=1): + file_list_html = ( + file_list_html + + f""" +
+
{num}.
+
{file}
+
""" + ) + + eval_temp._insert("eval_placeholder_3", file_list_html) + eval_temp._insert("eval_title_3", "GTFS Files Included") + + eval_temp._insert("date", date) + + with open( + f"{report_dir}/gtfs_report/index.html", "w", encoding="utf8" + ) as eval_f: + eval_f.writelines(eval_temp._get_template()) + + # stops + self.viz_stops( + out_pth=( + pathlib.Path(f"{report_dir}/gtfs_report/stop_locations.html") + ) + ) + self.viz_stops( + out_pth=pathlib.Path(f"{report_dir}/gtfs_report/convex_hull.html"), + geoms="hull", + geom_crs=27700, + ) + stops_temp = TemplateHTML( + ( + "src/transport_performance/gtfs/report/" + "html_templates/stops_template.html" + ) + ) + stops_temp._insert("stops_placeholder_1", "stop_locations.html") + stops_temp._insert("stops_placeholder_2", "convex_hull.html") + stops_temp._insert("stops_title_1", "Stops from GTFS data") + stops_temp._insert( + "stops_title_2", "Convex Hull Generated from GTFS Data" + ) + stops_temp._insert("date", date) + with open( + f"{report_dir}/gtfs_report/stops.html", "w", encoding="utf8" + ) as stops_f: + stops_f.writelines(stops_temp._get_template()) + + # summaries + self.summarise_routes() + self.summarise_trips() + route_html = self._plot_summary( + which="route", + target_column=summary_type, + return_html=True, + width=1200, + height=800, + ylabel="Route Count", + xlabel="Day", + ) + trip_html = self._plot_summary( + which="trip", + target_column=summary_type, + return_html=True, + width=1200, + height=800, + ylabel="Trip Count", + xlabel="Day", + ) + + summ_temp = TemplateHTML( + path=( + "src/transport_performance/gtfs/report/" + "html_templates/summary_template.html" + ) + ) + summ_temp._insert("plotly_placeholder_1", route_html) + summ_temp._insert( + "plotly_title_1", + f"Route Summary by Day and Route Type ({summary_type})", + ) + summ_temp._insert("plotly_placeholder_2", trip_html) + summ_temp._insert( + "plotly_title_2", + f"Trip Summary by Day and Route Type ({summary_type})", + ) + summ_temp._insert("date", date) + with open( + f"{report_dir}/gtfs_report/summaries.html", "w", encoding="utf8" + ) as summ_f: + summ_f.writelines(summ_temp._get_template()) + + print( + f"GTFS Report Created at {report_dir}\n" + f"View your report here: {report_dir}/gtfs_report" + ) + + return None diff --git a/src/transport_performance/osm/osm_utils.py b/src/transport_performance/osm/osm_utils.py index e4501416..d086eb6a 100644 --- a/src/transport_performance/osm/osm_utils.py +++ b/src/transport_performance/osm/osm_utils.py @@ -3,7 +3,7 @@ from pyprojroot import here from transport_performance.utils.defence import ( - _bool_defence, + _type_defence, _check_list, _check_parent_dir_exists, _is_expected_filetype, @@ -54,7 +54,7 @@ def filter_osm( "tag_filter": tag_filter, "install_osmosis": install_osmosis, }.items(): - _bool_defence(val, param_nm=nm) + _type_defence(val, nm, bool) # check bbox values makes sense, else osmosis will error if not bbox[0] < bbox[2]: raise ValueError( diff --git a/src/transport_performance/utils/defence.py b/src/transport_performance/utils/defence.py index 70744aa6..69df5670 100644 --- a/src/transport_performance/utils/defence.py +++ b/src/transport_performance/utils/defence.py @@ -3,6 +3,7 @@ import numpy as np import os from typing import Union +import pandas as pd def _handle_path_like(pth, param_nm): @@ -149,19 +150,35 @@ def _check_namespace_export(pkg=np, func=np.min): def _url_defence(url): """Defence checking. Not exported.""" - if not isinstance(url, str): - raise TypeError(f"url {url} expected string, instead got {type(url)}") - elif not url.startswith((r"http://", r"https://")): + _type_defence(url, "url", str) + if not url.startswith((r"http://", r"https://")): raise ValueError(f"url string expected protocol, instead found {url}") return None -def _bool_defence(some_bool, param_nm): - """Defence checking. Not exported.""" - if not isinstance(some_bool, bool): +def _type_defence(some_object, param_nm, types) -> None: + """Defence checking utility. Can handle NoneType. + + Parameters + ---------- + some_object : Any + Object to test with isinstance. + param_nm : str + A name for the parameter. Useful when this utility is used in a wrapper + to inherit the parent's parameter name and present in error message. + types : type or tuple + A type or a tuple of types to test `some_object` against. + + Raises + ------ + TypeError + `some_object` is not of type `types`. + + """ + if not isinstance(some_object, types): raise TypeError( - f"`{param_nm}` expected boolean. Got {type(some_bool)}" + f"`{param_nm}` expected {types}. Got {type(some_object)}" ) return None @@ -206,3 +223,88 @@ def _check_list(ls, param_nm, check_elements=True, exp_type=str): ) return None + + +def _check_column_in_df(df: pd.DataFrame, column_name: str) -> None: + """Defences to check that a column exists in a df. + + Parameters + ---------- + df : pd.DataFrame + A pandas dataframe to check if the specified column exists in. + column_name : str + The name of the column to check for + + Returns + ------- + None + + Raises + ------ + IndexError + Raises an error if the column (column_name) does not exist in the + dataframe + + """ + if column_name not in df.columns: + raise IndexError(f"'{column_name}' is not a column in the dataframe.") + + return None + + +def _check_item_in_list(item: str, _list: list, param_nm: str) -> None: + """Defence to check if an item is present in a list. + + Parameters + ---------- + item : str + THe item to check the list for + _list : list + The list to check that the item is in + param_nm : str + The name of the param that the item has been passed to + + Returns + ------- + None + + Raises + ------ + ValueError + Error raised when item not in the list. + + """ + if item not in _list: + raise ValueError( + f"'{param_nm}' expected one of the following:" + f"{_list} Got {item}" + ) + return None + + +def _check_attribute(obj, attr: str, message: str = None): + """Test to check if an attribute exists in an object. + + Parameters + ---------- + obj : any + The object to check that the attr exists in + attr : str + The attribute to check exists in an object + message : str, optional + The error message to display, by default None + + Raises + ------ + AttributeError + An error raised if the attr does not exist + + """ + err_msg = ( + message + if message + else (f"{obj.__class__.__name__} has no attribute {attr}") + ) + + if attr not in obj.__dir__(): + raise AttributeError(err_msg) diff --git a/tests/data/gtfs/report/html_template.html b/tests/data/gtfs/report/html_template.html new file mode 100644 index 00000000..8ba13060 --- /dev/null +++ b/tests/data/gtfs/report/html_template.html @@ -0,0 +1,6 @@ + + + + +
[test_placeholder] Tester [test_placeholder]
+ diff --git a/tests/gtfs/report/test_report_utils.py b/tests/gtfs/report/test_report_utils.py new file mode 100644 index 00000000..4a3727df --- /dev/null +++ b/tests/gtfs/report/test_report_utils.py @@ -0,0 +1,113 @@ +"""Test scripts for the GTFS report utility functions.""" + +import os +import pathlib +import re + +import pytest +from pyprojroot import here + +from transport_performance.gtfs.report.report_utils import ( + TemplateHTML, + _set_up_report_dir, +) + + +@pytest.fixture(scope="function") +def template_fixture(): + """Fixture for test funcs expecting a valid feed object.""" + template = TemplateHTML( + path=here("tests/data/gtfs/report/html_template.html") + ) + return template + + +class TestTemplateHTML(object): + """Tests related to the TemplateHTML class.""" + + def test_init(self, template_fixture): + """Test initialising the TemplateHTML class.""" + expected_template = """ + + + +
[test_placeholder] Tester [test_placeholder]
+ +""" + assert ( + expected_template == template_fixture._get_template() + ), "Test template not as expected" + + def test__insert_defence(self, template_fixture): + """Test defences for ._insert().""" + with pytest.raises( + ValueError, + match=( + "`replace_multiple` requires True as found \n" + "multiple placeholder matches in template." + ), + ): + template_fixture._insert("test_placeholder", "test_value") + + def test__insert_on_pass(self, template_fixture): + """Test functionality for ._insert() when defences are passed.""" + template_fixture._insert( + placeholder="test_placeholder", + value="test_value_insert_test", + replace_multiple=True, + ) + assert ( + "test_value_insert_test" + in template_fixture._get_template().replace(r"\n", "") + ), ("Test placeholder replacement not acting as expected") + + +class TestSetUpReportDir(object): + """Test setting up a dir for a report.""" + + def test__set_up_report_dir_defence(self, tmp_path): + """Test the defences for _set_up_report_dir().""" + _set_up_report_dir(os.path.join(tmp_path)) + with pytest.raises( + FileExistsError, + match=( + re.escape( + "Report already exists at path: " + f"[{tmp_path}]." + "Consider setting overwrite=True" + "if you'd like to overwrite this." + ) + ), + ): + _set_up_report_dir(os.path.join(tmp_path), overwrite=False) + + def test__set_up_report_dir_on_pass(self, tmp_path): + """Test _set_up_report_dir() when defences are passed.""" + # create original report + _set_up_report_dir( + pathlib.Path(os.path.join(tmp_path)), overwrite=False + ) + assert os.path.exists( + os.path.join(tmp_path, "gtfs_report") + ), "Failed to create report in temporary directory" + # attempt to overwrite the previous report + _set_up_report_dir( + pathlib.Path(os.path.join(tmp_path)), overwrite=True + ) + assert os.path.exists( + os.path.join(tmp_path, "gtfs_report") + ), "Failed to create report in temporary directory" + # attempt to create report in different paths + _set_up_report_dir(os.path.join(tmp_path, "testing")) + assert os.path.exists( + os.path.join(tmp_path, "testing", "gtfs_report") + ), ( + f"Failed to create report dir in {tmp_path}/testing/" "gtfs_report" + ) + _set_up_report_dir(os.path.join(tmp_path, "testing", "testing")) + assert os.path.exists( + os.path.join(tmp_path, "testing", "testing", "gtfs_report") + ), ( + f"Failed to create report dir in {tmp_path}/testing/testing/" + "gtfs_report" + ) diff --git a/tests/gtfs/test_gtfs_utils.py b/tests/gtfs/test_gtfs_utils.py index fbd12b43..443a9a57 100644 --- a/tests/gtfs/test_gtfs_utils.py +++ b/tests/gtfs/test_gtfs_utils.py @@ -4,8 +4,15 @@ import os import pytest import pathlib +import re -from transport_performance.gtfs.gtfs_utils import bbox_filter_gtfs +import pandas as pd +from plotly.graph_objects import Figure as PlotlyFigure + +from transport_performance.gtfs.gtfs_utils import ( + bbox_filter_gtfs, + convert_pandas_to_plotly, +) from transport_performance.gtfs.validation import GtfsInstance @@ -40,3 +47,49 @@ def test_bbox_filter_gtfs_writes_as_expected(self, tmpdir): assert isinstance( feed, GtfsInstance ), f"Expected class `Gtfs_Instance but found: {type(feed)}`" + + +@pytest.fixture(scope="function") +def test_df(): + """A test fixture.""" + test_df = pd.DataFrame( + { + "ID": [1, 2, 3, 4, 1], + "score": [45, 34, 23, 12, 23], + "grade": ["A", "B", "C", "D", "C"], + } + ) + return test_df + + +class TestConvertPandasToPlotly(object): + """Test convert_pandas_to_plotly().""" + + def test_convert_pandas_to_plotly_defences(self, test_df): + """Test convert_pandas_to_plotly defences.""" + multi_index_df = test_df.groupby(["ID", "grade"]).agg( + {"score": ["mean", "min", "max"]} + ) + with pytest.raises( + TypeError, + match="Pandas dataframe must have a singular index, not " + "MultiIndex. " + "This means that 'df.columns' or 'df.index' does not return a " + "MultiIndex.", + ): + convert_pandas_to_plotly(multi_index_df) + + def test_convert_pandas_to_plotly_on_pass(self, test_df): + """Test convert_pandas_to_plotly() when defences pass.""" + # return_html + html_return = convert_pandas_to_plotly(test_df, return_html=True) + assert isinstance(html_return, str), re.escape( + f"Expected type str but {type(html_return)} found" + ) + + # return plotly figure + fig_return = convert_pandas_to_plotly(test_df, return_html=False) + assert isinstance(fig_return, PlotlyFigure), re.escape( + "Expected type plotly.graph_objects.Figure but " + f"{type(fig_return)} found" + ) diff --git a/tests/gtfs/test_routes.py b/tests/gtfs/test_routes.py index 38eaa23a..efabfc2f 100644 --- a/tests/gtfs/test_routes.py +++ b/tests/gtfs/test_routes.py @@ -47,12 +47,12 @@ def test_defensive_exceptions(self): """Test the defensive checks raise as expected.""" with pytest.raises( TypeError, - match=r"url 1 expected string, instead got ", + match=r"`url` expected . Got ", ): scrape_route_type_lookup(gtfs_url=1) with pytest.raises( TypeError, - match=r"url False expected string, instead got ", + match=r"`url` expected . Got ", ): scrape_route_type_lookup(ext_spec_url=False) with pytest.raises( @@ -62,7 +62,7 @@ def test_defensive_exceptions(self): scrape_route_type_lookup(gtfs_url="foobar") with pytest.raises( TypeError, - match=r"`extended_schema` expected boolean. Got ", + match=r"`extended_schema` .* . Got ", ): scrape_route_type_lookup(extended_schema="True") diff --git a/tests/gtfs/test_validation.py b/tests/gtfs/test_validation.py index 7b49c54c..40b9c3e8 100644 --- a/tests/gtfs/test_validation.py +++ b/tests/gtfs/test_validation.py @@ -1,19 +1,22 @@ """Tests for validation module.""" +import re +import os + import pytest from pyprojroot import here import gtfs_kit as gk import pandas as pd from unittest.mock import patch, call -import os from geopandas import GeoDataFrame import numpy as np -import re import pathlib +from plotly.graph_objects import Figure as PlotlyFigure from transport_performance.gtfs.validation import ( GtfsInstance, _get_intermediate_dates, _create_map_title_text, + _convert_multi_index_to_single, ) @@ -79,6 +82,24 @@ def test_init_on_pass(self): gtfs2.feed.dist_units == "m" ), f"Expected 'm', found: {gtfs2.feed.dist_units}" + def test_get_gtfs_files(self, gtfs_fixture): + """Assert files that make up the GTFS.""" + expected_files = [ + "agency.txt", + "calendar_dates.txt", + "stop_times.txt", + "frequencies.txt", + "shapes.txt", + "trips.txt", + "feed_info.txt", + "stops.txt", + "calendar.txt", + "routes.txt", + ] + assert ( + gtfs_fixture.get_gtfs_files() == expected_files + ), "GTFS files not as expected" + def test_is_valid(self, gtfs_fixture): """Assertions about validity_df table.""" gtfs_fixture.is_valid() @@ -264,6 +285,26 @@ def test__get_intermediate_dates(self): pd.Timestamp("2023-05-08"), ] + def test__convert_multi_index_to_single(self): + """Light testing got _convert_multi_index_to_single().""" + test_df = pd.DataFrame( + {"test": [1, 2, 3, 4], "id": ["E", "E", "C", "D"]} + ) + test_df = test_df.groupby("id").agg({"test": ["min", "mean", "max"]}) + expected_cols = pd.Index( + ["test_min", "test_mean", "test_max"], dtype="object" + ) + output_cols = _convert_multi_index_to_single(df=test_df).columns + assert isinstance( + output_cols, pd.Index + ), "_convert_multi_index_to_single() not behaving as expected" + expected_cols = list(expected_cols) + output_cols = list(output_cols) + for col in output_cols: + assert col in expected_cols, f"{col} not an expected column" + expected_cols.remove(col) + assert len(expected_cols) == 0, "Not all expected cols in output cols" + def test__order_dataframe_by_day_defence(self, gtfs_fixture): """Test __order_dataframe_by_day defences.""" with pytest.raises( @@ -457,15 +498,16 @@ def test_summarise_trips_on_pass(self, gtfs_fixture): ) found_ds = gtfs_fixture.daily_trip_summary.columns - exp_cols_ds = pd.MultiIndex.from_tuples( + exp_cols_ds = pd.Index( [ - ("day", ""), - ("route_type", ""), - ("trip_count", "max"), - ("trip_count", "mean"), - ("trip_count", "median"), - ("trip_count", "min"), - ] + "day", + "route_type", + "trip_count_max", + "trip_count_mean", + "trip_count_median", + "trip_count_min", + ], + dtype="object", ) assert ( @@ -490,12 +532,12 @@ def test_summarise_trips_on_pass(self, gtfs_fixture): # tests the output of the daily_route_summary table # using tests/data/newport-20230613_gtfs.zip expected_df = { - ("day", ""): {8: "friday", 9: "friday"}, - ("route_type", ""): {8: 3, 9: 200}, - ("trip_count", "max"): {8: 1211, 9: 90}, - ("trip_count", "mean"): {8: 1211.0, 9: 88.0}, - ("trip_count", "median"): {8: 1211.0, 9: 88.0}, - ("trip_count", "min"): {8: 1211, 9: 88}, + "day": {8: "friday", 9: "friday"}, + "route_type": {8: 3, 9: 200}, + "trip_count_max": {8: 1211, 9: 90}, + "trip_count_min": {8: 1211, 9: 88}, + "trip_count_mean": {8: 1211.0, 9: 88.0}, + "trip_count_median": {8: 1211.0, 9: 88.0}, } found_df = gtfs_fixture.daily_trip_summary[ @@ -525,15 +567,16 @@ def test_summarise_routes_on_pass(self, gtfs_fixture): ) found_ds = gtfs_fixture.daily_route_summary.columns - exp_cols_ds = pd.MultiIndex.from_tuples( + exp_cols_ds = pd.Index( [ - ("day", ""), - ("route_count", "max"), - ("route_count", "mean"), - ("route_count", "median"), - ("route_count", "min"), - ("route_type", ""), - ] + "day", + "route_count_max", + "route_count_mean", + "route_count_median", + "route_count_min", + "route_type", + ], + dtype="object", ) assert ( @@ -558,12 +601,12 @@ def test_summarise_routes_on_pass(self, gtfs_fixture): # tests the output of the daily_route_summary table # using tests/data/newport-20230613_gtfs.zip expected_df = { - ("day", ""): {8: "friday", 9: "friday"}, - ("route_count", "max"): {8: 74, 9: 10}, - ("route_count", "mean"): {8: 74.0, 9: 9.0}, - ("route_count", "median"): {8: 74.0, 9: 9.0}, - ("route_count", "min"): {8: 74, 9: 9}, - ("route_type", ""): {8: 3, 9: 200}, + "day": {8: "friday", 9: "friday"}, + "route_count_max": {8: 74, 9: 10}, + "route_count_min": {8: 74, 9: 9}, + "route_count_mean": {8: 74.0, 9: 9.0}, + "route_count_median": {8: 74.0, 9: 9.0}, + "route_type": {8: 3, 9: 200}, } found_df = gtfs_fixture.daily_route_summary[ @@ -580,3 +623,196 @@ def test_summarise_routes_on_pass(self, gtfs_fixture): "Size of date_route_counts not as expected. " "Expected {expected_size}" ) + + def test__plot_summary_defences(self, tmp_path, gtfs_fixture): + """Test defences for _plot_summary().""" + # test defences for checks summaries exist + with pytest.raises( + AttributeError, + match=re.escape( + "The daily_trip_summary table could not be found." + " Did you forget to call '.summarise_trips()' first?" + ), + ): + gtfs_fixture._plot_summary(which="trip", target_column="mean") + + with pytest.raises( + AttributeError, + match=re.escape( + "The daily_route_summary table could not be found." + " Did you forget to call '.summarise_routes()' first?" + ), + ): + gtfs_fixture._plot_summary(which="route", target_column="mean") + + gtfs_fixture.summarise_routes() + + # test parameters that are yet to be tested + options = ["v", "h"] + with pytest.raises( + ValueError, + match=re.escape( + "'orientation' expected one of the following:" + f"{options} Got i" + ), + ): + gtfs_fixture._plot_summary( + which="route", + target_column="route_count_mean", + orientation="i", + ) + + # save test for an image with invalid file extension + valid_img_formats = ["png", "pdf", "jpg", "jpeg", "webp", "svg"] + with pytest.raises( + ValueError, + match=re.escape( + "Please specify a valid image format. Valid formats " + f"include {valid_img_formats}" + ), + ): + gtfs_fixture._plot_summary( + which="route", + target_column="route_count_mean", + save_image=True, + out_dir=os.path.join(tmp_path, "outputs"), + img_type="test", + ) + + # test choosing an invalid value for 'which' + with pytest.raises( + ValueError, + match=re.escape( + "'which' expected one of the following:" + "['trip', 'route'] Got tester" + ), + ): + gtfs_fixture._plot_summary(which="tester", target_column="tester") + + def test__plot_summary_on_pass(self, gtfs_fixture, tmp_path): + """Test plotting a summary when defences are passed.""" + current_fixture = gtfs_fixture + current_fixture.summarise_routes() + + # test returning a html string + test_html = gtfs_fixture._plot_summary( + which="route", + target_column="route_count_mean", + return_html=True, + ) + assert type(test_html) == str, "Failed to return HTML for the plot" + + # test returning a plotly figure + test_image = gtfs_fixture._plot_summary( + which="route", target_column="route_count_mean" + ) + assert ( + type(test_image) == PlotlyFigure + ), "Failed to return plotly.graph_objects.Figure type" + + # test returning a plotly for trips + gtfs_fixture.summarise_trips() + test_image = gtfs_fixture._plot_summary( + which="trip", target_column="trip_count_mean" + ) + assert ( + type(test_image) == PlotlyFigure + ), "Failed to return plotly.graph_objects.Figure type" + + # test saving plots in html and png format + gtfs_fixture._plot_summary( + which="route", + target_column="mean", + width=1200, + height=800, + save_html=True, + save_image=True, + ylabel="Mean", + xlabel="Day", + orientation="h", + plotly_kwargs={"legend": dict(bgcolor="lightgrey")}, + out_dir=os.path.join(tmp_path, "save_test"), + ) + + # general save test + save_dir = os.listdir(os.path.join(tmp_path, "save_test")) + counts = {"html": 0, "png": 0} + for pth in save_dir: + if ".html" in pth: + counts["html"] += 1 + elif ".png" in pth: + counts["png"] += 1 + + assert os.path.exists( + os.path.join(tmp_path, "save_test") + ), "'save_test' dir could not be created'" + assert counts["html"] == 1, "Failed to save plot as HTML" + assert counts["png"] == 1, "Failed to save plot as png" + + def test__create_extended_repeated_pair_table(self, gtfs_fixture): + """Test _create_extended_repeated_pair_table().""" + test_table = pd.DataFrame( + { + "trip_name": ["Newport", "Cwmbran", "Cardiff", "Newport"], + "trip_abbrev": ["Newp", "Cwm", "Card", "Newp"], + "type": ["bus", "train", "bus", "train"], + } + ) + + expected_table = pd.DataFrame( + { + "trip_name": {0: "Newport"}, + "trip_abbrev": {0: "Newp"}, + "type_original": {0: "bus"}, + "type_duplicate": {0: "train"}, + } + ).to_dict() + + returned_table = gtfs_fixture._create_extended_repeated_pair_table( + table=test_table, + join_vars=["trip_name", "trip_abbrev"], + original_rows=[0], + ).to_dict() + + assert ( + expected_table == returned_table + ), "_create_extended_repeated_pair_table() failed" + + def test_html_report_defences(self, gtfs_fixture, tmp_path): + """Test the defences whilst generating a HTML report.""" + with pytest.raises( + ValueError, match="'summary type' must be mean, median, min or max" + ): + gtfs_fixture.html_report( + report_dir=tmp_path, + overwrite=True, + summary_type="test_sum", + ) + + def test_html_report_on_pass(self, gtfs_fixture, tmp_path): + """Test that a HTML report is generated if defences are passed.""" + gtfs_fixture.html_report(report_dir=pathlib.Path(tmp_path)) + + # assert that the report has been completely generated + assert os.path.exists( + pathlib.Path(os.path.join(tmp_path, "gtfs_report")) + ), "gtfs_report dir was not created" + assert os.path.exists( + pathlib.Path(os.path.join(tmp_path, "gtfs_report", "index.html")) + ), "gtfs_report/index.html was not created" + assert os.path.exists( + pathlib.Path(os.path.join(tmp_path, "gtfs_report", "styles.css")) + ), "gtfs_report/styles.css was not created" + assert os.path.exists( + pathlib.Path( + os.path.join(tmp_path, "gtfs_report", "summaries.html") + ) + ), "gtfs_report/summaries.html was not created" + assert os.path.exists( + pathlib.Path( + os.path.join(tmp_path, "gtfs_report", "stop_locations.html") + ) + ), "gtfs_report/stop_locations.html was not created" + assert os.path.exists( + pathlib.Path(os.path.join(tmp_path, "gtfs_report", "stops.html")) + ), "gtfs_report/stops.html was not created" diff --git a/tests/osm/test_osm_utils.py b/tests/osm/test_osm_utils.py index 04ce3803..17e145f2 100644 --- a/tests/osm/test_osm_utils.py +++ b/tests/osm/test_osm_utils.py @@ -30,13 +30,14 @@ def test_filter_osm_defense(self): # out_pth is not a path_like filter_osm(out_pth=False) with pytest.raises( - TypeError, match="`tag_filter` expected boolean. Got " + TypeError, + match="`tag_filter` expected . Got ", ): # check for boolean defense filter_osm(tag_filter=1) with pytest.raises( TypeError, - match="`install_osmosis` expected boolean. Got ", + match="`install_osmosis` .* . Got ", ): # check for boolean defense filter_osm(install_osmosis="False") diff --git a/tests/utils/test_defence.py b/tests/utils/test_defence.py index 412202e7..2cf617f6 100644 --- a/tests/utils/test_defence.py +++ b/tests/utils/test_defence.py @@ -4,10 +4,15 @@ import pathlib import pytest +import pandas as pd from transport_performance.utils.defence import ( _check_list, _check_parent_dir_exists, + _type_defence, + _check_column_in_df, + _check_item_in_list, + _check_attribute, ) @@ -121,3 +126,207 @@ def test_check_parents_dir_exists(self, tmp_path): "_check_parent_dir_exists did not make parent dir" " when 'create=True' (multiple levels)" ) + + +class Test_TypeDefence(object): + """Assertions for _type_defence().""" + + def test_type_defence_raises_on_single_types(self): + """Assert func raises for single values to the `types` parameter.""" + with pytest.raises( + TypeError, + match="`empty_list` expected . Got ", + ): + _type_defence(list(), "empty_list", str) + with pytest.raises( + TypeError, + match="`int_1` expected . Got ", + ): + _type_defence(1, "int_1", list) + with pytest.raises( + TypeError, + match="`string_1` expected . Got ", + ): + _type_defence("1", "string_1", int) + with pytest.raises( + TypeError, + match="`float_1` expected . Got ", + ): + _type_defence(1.0, "float_1", int) + with pytest.raises( + TypeError, + match="`empty_dict` expected . Got ", + ): + _type_defence(dict(), "empty_dict", tuple) + with pytest.raises( + TypeError, + match="`empty_tuple` expected . Got ", + ): + _type_defence(tuple(), "empty_tuple", dict) + with pytest.raises( + TypeError, + match="`None` expected . Got ", + ): + _type_defence(None, "None", int) + + def test_type_defence_raises_on_multiple_types(object): + """Assert func raises for multiple values to the `types` parameter.""" + with pytest.raises( + TypeError, + match=re.escape( + "pected (, ). Got " + ), + ): + _type_defence(1, "int_1", (str, type(None))) + with pytest.raises( + TypeError, + match=re.escape( + "`str_1` expected (, , , , , , , , , , <" + ), + ): + _type_defence( + tuple(), + "empty_tuple", + (type(None), list, dict, str, int, float), + ) + with pytest.raises( + TypeError, + match=re.escape( + "`None` expected (, , None: + """Intialise dummy object.""" + self.tester = "test" + self.tester_also = "also_test" + + new_dummy = dummy() + return new_dummy + + +class TestCheckAttribute(object): + """Tests for _check_item_in_list().""" + + def test_check_attribute_defence(self, dummy_obj): + """Defensive tests for check_attribute.""" + with pytest.raises(AttributeError, match="dummy test msg"): + _check_attribute( + obj=dummy_obj, attr="not_in_test", message="dummy test msg" + ) + + def test_check_attribute_on_pass(self, dummy_obj): + """General tests for check_attribute().""" + _check_attribute(dummy_obj, "tester") From 87216ed911b42467a6726ba1702dde4591398a32 Mon Sep 17 00:00:00 2001 From: ethan-moss <106239610+ethan-moss@users.noreply.github.com> Date: Fri, 15 Sep 2023 16:00:12 +0100 Subject: [PATCH 7/7] fix: pytest mark behaviour (#126) Co-authored-by: r-leyshon --- conftest.py | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/conftest.py b/conftest.py index 3e7bdd1e..6f644831 100644 --- a/conftest.py +++ b/conftest.py @@ -41,28 +41,37 @@ def pytest_configure(config): ) -def pytest_collection_modifyitems(config, items): # noqa C901 +def pytest_collection_modifyitems(config, items): # noqa:C901 """Handle switching based on cli args.""" - if config.getoption("--runsetup"): - # --runsetup given in cli: do not skip slow tests + if ( + config.getoption("--runsetup") + & config.getoption("--runinteg") + & config.getoption("--runexpensive") + ): + # do full test suite when all flags are given return - skip_setup = pytest.mark.skip(reason="need --runsetup option to run") - for item in items: - if "setup" in item.keywords: - item.add_marker(skip_setup) - if config.getoption("--runinteg"): - return - skip_runinteg = pytest.mark.skip(reason="need --runinteg option to run") - for item in items: - if "runinteg" in item.keywords: - item.add_marker(skip_runinteg) + # do not add setup marks when the runsetup flag is given + if not config.getoption("--runsetup"): + skip_setup = pytest.mark.skip(reason="need --runsetup option to run") + for item in items: + if "setup" in item.keywords: + item.add_marker(skip_setup) - if config.getoption("--runexpensive"): - return - skip_runexpensive = pytest.mark.skip( - reason="need --runexpensive option to run" - ) - for item in items: - if "runexpensive" in item.keywords: - item.add_marker(skip_runexpensive) + # do not add integ marks when the runinteg flag is given + if not config.getoption("--runinteg"): + skip_runinteg = pytest.mark.skip( + reason="need --runinteg option to run" + ) + for item in items: + if "runinteg" in item.keywords: + item.add_marker(skip_runinteg) + + # do not add expensive marks when the runexpensive flag is given + if not config.getoption("--runexpensive"): + skip_runexpensive = pytest.mark.skip( + reason="need --runexpensive option to run" + ) + for item in items: + if "runexpensive" in item.keywords: + item.add_marker(skip_runexpensive)