From 744a39479261ec6e485475eae9967afb84ee7bef Mon Sep 17 00:00:00 2001
From: Weiyuan Wu
Date: Tue, 14 Apr 2020 23:36:22 -0700
Subject: [PATCH] docs: simplify API documentation
---
Justfile | 2 +-
dataprep/data_connector/__init__.py | 2 +
dataprep/data_connector/config_manager.py | 13 +-
dataprep/data_connector/connector.py | 95 ++++++------
dataprep/eda/basic/__init__.py | 10 +-
dataprep/eda/basic/compute.py | 3 -
dataprep/eda/basic/render.py | 21 ++-
dataprep/eda/correlation/__init__.py | 35 ++---
dataprep/eda/correlation/compute.py | 22 +--
dataprep/eda/correlation/render.py | 87 +++++------
dataprep/eda/missing/__init__.py | 32 +---
dataprep/eda/missing/compute.py | 29 +---
dataprep/eda/missing/render.py | 32 ++--
docs/source/conf.py | 7 +
docs/source/dataprep.data_connector.rst | 76 ++++-----
docs/source/dataprep.eda.basic.rst | 30 ----
docs/source/dataprep.eda.correlation.rst | 30 ----
docs/source/dataprep.eda.missing.rst | 30 ----
docs/source/dataprep.eda.outlier.rst | 22 ---
docs/source/dataprep.eda.rst | 55 ++-----
docs/source/dataprep.rst | 22 +--
poetry.lock | 180 +++++++++++++++++++++-
pyproject.toml | 4 +-
23 files changed, 380 insertions(+), 459 deletions(-)
delete mode 100644 docs/source/dataprep.eda.basic.rst
delete mode 100644 docs/source/dataprep.eda.correlation.rst
delete mode 100644 docs/source/dataprep.eda.missing.rst
delete mode 100644 docs/source/dataprep.eda.outlier.rst
diff --git a/Justfile b/Justfile
index d447e24bd..3fb1bba04 100644
--- a/Justfile
+++ b/Justfile
@@ -1,5 +1,5 @@
build-docs:
- poetry run sphinx-build -M html docs/source docs/build
+ poetry run sphinx-build -b html docs/source docs/build
gen-apidocs:
poetry run sphinx-apidoc --ext-doctest --ext-autodoc --ext-mathjax -f -o docs/source dataprep
diff --git a/dataprep/data_connector/__init__.py b/dataprep/data_connector/__init__.py
index dba371b93..c522f521f 100644
--- a/dataprep/data_connector/__init__.py
+++ b/dataprep/data_connector/__init__.py
@@ -2,3 +2,5 @@
DataConnector
"""
from .connector import Connector
+
+__all__ = ["Connector"]
diff --git a/dataprep/data_connector/config_manager.py b/dataprep/data_connector/config_manager.py
index 1ce58fa5f..94c2c61ed 100644
--- a/dataprep/data_connector/config_manager.py
+++ b/dataprep/data_connector/config_manager.py
@@ -20,10 +20,7 @@
def config_directory() -> Path:
"""
- Returns
- -------
- Path
- Returns the config directory path
+ Returns the config directory path
"""
tmp = gettempdir()
return Path(tmp) / "dataprep" / "data_connector"
@@ -32,10 +29,6 @@ def config_directory() -> Path:
def ensure_config(impdb: str) -> bool:
"""
Ensure the config for `impdb` is downloaded
-
- Returns
- -------
- bool
"""
path = config_directory()
obsolete = is_obsolete(impdb)
@@ -51,10 +44,6 @@ def is_obsolete(impdb: str) -> bool:
"""
Test if the implicit db config files are obsolete
and need to be re-downloaded.
-
- Returns
- -------
- bool
"""
path = config_directory()
if not (path / impdb).exists():
diff --git a/dataprep/data_connector/connector.py b/dataprep/data_connector/connector.py
index 18a1d1c1c..59608d6c8 100644
--- a/dataprep/data_connector/connector.py
+++ b/dataprep/data_connector/connector.py
@@ -37,19 +37,29 @@
class Connector:
"""
This is the main class of data_connector component.
- A class should be initialized as the following.
+ Initialize Connector class as the example code.
+
+ Parameters
+ ----------
+ config_path
+ The path to the config. It can be hosted, e.g. "yelp", or from
+ local filesystem, e.g. "./yelp"
+ auth_params
+ The parameter for authentication, e.g. OAuth2
+ kwargs
+ Additional parameters
Example
- --------
+ -------
>>> from dataprep.data_connector import Connector
>>> dc = Connector("./DataConnectorConfigs/yelp", auth_params={"access_token":access_token})
"""
- # impdb: ImplicitDatabase
- # vars: Dict[str, Any]
- # auth_params: Dict[str, Any]
- # session: Session
- # jenv: Environment
+ _impdb: ImplicitDatabase
+ _vars: Dict[str, Any]
+ _auth_params: Dict[str, Any]
+ _session: Session
+ _jenv: Environment
def __init__(
self,
@@ -57,19 +67,7 @@ def __init__(
auth_params: Optional[Dict[str, Any]] = None,
**kwargs: Any,
) -> None:
- """
- Initialize Connector class
-
- Parameters
- ----------
- config_path : str
- The path to the config. It can be hosted, e.g. "yelp", or from
- local filesystem, e.g. "./yelp"
- **kwargs : Dict[str, Any]
- Additional parameters
- """
-
- self.session = Session()
+ self._session = Session()
if (
config_path.startswith(".")
or config_path.startswith("/")
@@ -81,11 +79,11 @@ def __init__(
ensure_config(config_path)
path = config_directory() / config_path
- self.impdb = ImplicitDatabase(path)
+ self._impdb = ImplicitDatabase(path)
- self.vars = kwargs
- self.auth_params = auth_params or {}
- self.jenv = Environment(undefined=StrictUndefined)
+ self._vars = kwargs
+ self._auth_params = auth_params or {}
+ self._jenv = Environment(undefined=StrictUndefined)
def _fetch(
self,
@@ -101,19 +99,19 @@ def _fetch(
"cookies": {},
}
- merged_vars = {**self.vars, **kwargs}
+ merged_vars = {**self._vars, **kwargs}
if table.authorization is not None:
- table.authorization.build(req_data, auth_params or self.auth_params)
+ table.authorization.build(req_data, auth_params or self._auth_params)
for key in ["headers", "params", "cookies"]:
if getattr(table, key) is not None:
instantiated_fields = getattr(table, key).populate(
- self.jenv, merged_vars
+ self._jenv, merged_vars
)
req_data[key].update(**instantiated_fields)
if table.body is not None:
# TODO: do we support binary body?
- instantiated_fields = table.body.populate(self.jenv, merged_vars)
+ instantiated_fields = table.body.populate(self._jenv, merged_vars)
if table.body_ctype == "application/x-www-form-urlencoded":
req_data["data"] = instantiated_fields
elif table.body_ctype == "application/json":
@@ -121,7 +119,7 @@ def _fetch(
else:
raise UnreachableError
- resp: Response = self.session.send( # type: ignore
+ resp: Response = self._session.send( # type: ignore
Request(
method=method,
url=url,
@@ -147,9 +145,8 @@ def table_names(self) -> List[str]:
----
We abstract each website as a database containing several tables.
For example in Spotify, we have artist and album table.
-
"""
- return list(self.impdb.tables.keys())
+ return list(self._impdb.tables.keys())
@property
def info(self) -> None:
@@ -159,8 +156,8 @@ def info(self) -> None:
# get info
tbs: Dict[str, Any] = {}
- for cur_table in self.impdb.tables:
- table_config_content = self.impdb.tables[cur_table].config
+ for cur_table in self._impdb.tables:
+ table_config_content = self._impdb.tables[cur_table].config
params_required = []
params_optional = []
example_query_fields = []
@@ -180,7 +177,7 @@ def info(self) -> None:
# show table info
print(
INFO_TEMPLATE.render(
- ntables=len(self.table_names), dbname=self.impdb.name, tbs=tbs
+ ntables=len(self.table_names), dbname=self._impdb.name, tbs=tbs
)
)
@@ -191,22 +188,21 @@ def show_schema(self, table_name: str) -> pd.DataFrame:
Parameters
----------
- table_name : str
+ table_name
The table name.
Returns
-------
- pd.DataFrame
- The returned data's schema.
+ pd.DataFrame
+ The returned data's schema.
Note
----
The schema is defined in the configuration file.
The user can either use the default one or change it by editing the configuration file.
-
"""
print(f"table: {table_name}")
- table_config_content = self.impdb.tables[table_name].config
+ table_config_content = self._impdb.tables[table_name].config
schema = table_config_content["response"]["schema"]
new_schema_dict: Dict[str, List[Any]] = {}
new_schema_dict["column_name"] = []
@@ -217,28 +213,25 @@ def show_schema(self, table_name: str) -> pd.DataFrame:
return pd.DataFrame.from_dict(new_schema_dict)
def query(
- self,
- table: str,
- auth_params: Optional[Dict[str, Any]] = None,
- **where: Dict[str, Any],
+ self, table: str, auth_params: Optional[Dict[str, Any]] = None, **where: Any,
) -> pd.DataFrame:
"""
Use this method to query the API and get the returned table.
Example
- --------
+ -------
>>> df = dc.query('businesses', term="korean", location="vancouver)
-
+
Parameters
----------
- table : str
+ table
The table name.
- auth_params : Optional[Dict[str, Any]] = None
+ auth_params
The parameters for authentication. Usually the authentication parameters
should be defined when instantiating the Connector. In case some tables have different
authentication options, a different authentication parameter can be defined here.
This parameter will override the one from Connector if passed.
- **where: Dict[str, Any]
+ where
The additional parameters required for the query.
Returns
@@ -246,9 +239,11 @@ def query(
pd.DataFrame
A DataFrame that contains the data returned by the website API.
"""
- assert table in self.impdb.tables, f"No such table {table} in {self.impdb.name}"
+ assert (
+ table in self._impdb.tables
+ ), f"No such table {table} in {self._impdb.name}"
- itable = self.impdb.tables[table]
+ itable = self._impdb.tables[table]
resp = self._fetch(itable, auth_params, where)
diff --git a/dataprep/eda/basic/__init__.py b/dataprep/eda/basic/__init__.py
index f61db3580..a0e7bb8c1 100644
--- a/dataprep/eda/basic/__init__.py
+++ b/dataprep/eda/basic/__init__.py
@@ -1,7 +1,4 @@
"""
-plot(df)
-========
-
This module implements the plot(df) function.
"""
@@ -10,12 +7,13 @@
import dask.dataframe as dd
import pandas as pd
from bokeh.io import show
-from bokeh.plotting import Figure
from .compute import compute
from .render import render
from ..report import Report
+__all__ = ["plot", "compute", "render"]
+
def plot(
df: Union[pd.DataFrame, dd.DataFrame],
@@ -34,7 +32,7 @@ def plot(
value_range: Optional[Tuple[float, float]] = None,
yscale: str = "linear",
tile_size: Optional[float] = None,
-) -> Figure:
+) -> Report:
"""Generates plots for exploratory data analysis.
If no columns are specified, the distribution of
@@ -109,7 +107,7 @@ def plot(
value_range: Optional[Tuple[float, float]], default None
The lower and upper bounds on the range of a numerical column.
Applies when column x is specified and column y is unspecified.
- yscale: str, default "linear"
+ yscale
The scale to show on the y axis. Can be "linear" or "log".
tile_size: Optional[float], default None
Size of the tile for the hexbin plot. Measured from the middle
diff --git a/dataprep/eda/basic/compute.py b/dataprep/eda/basic/compute.py
index 89c330a12..f51a5fd92 100644
--- a/dataprep/eda/basic/compute.py
+++ b/dataprep/eda/basic/compute.py
@@ -1,7 +1,4 @@
"""
-Compute ``plot(df)``
-====================
-
This module implements the intermediates computation for plot(df) function.
"""
from sys import stderr
diff --git a/dataprep/eda/basic/render.py b/dataprep/eda/basic/render.py
index 44525435d..e6bf3d50f 100644
--- a/dataprep/eda/basic/render.py
+++ b/dataprep/eda/basic/render.py
@@ -1,7 +1,4 @@
"""
-Render ``plot(df)``
-===================
-
This module implements the visualization for the plot(df) function.
""" # pylint: disable=too-many-lines
from math import pi
@@ -1286,21 +1283,23 @@ def render(
Parameters
----------
itmdt
- The Intermediate containing results from the compute function
+ The Intermediate containing results from the compute function.
yscale: str, default "linear"
The scale to show on the y axis. Can be "linear" or "log".
- tile_size: Optional[float], default None
- Size of the tile for the hexbin plot; measured from the middle
+ tile_size
+ Size of the tile for the hexbin plot. Measured from the middle
of a hexagon to its left or right corner.
- plot_width_sml: int, default 324,
+ plot_width_small: int, default 324
The width of the small plots
- plot_height_sml: int, default 300,
+ plot_height_small: int, default 300
The height of the small plots
- plot_width_lrg: int, default 450,
+ plot_width_large: int, default 450
The width of the large plots
- plot_height_lrg: int, default 400,
+ plot_height_large: int, default 400
The height of the large plots
- plot_width_lrg: int, default 972,
+ plot_width_large: int, default 972
+ The width of the large plots
+ plot_width_wide: int, default 972
The width of the wide plots
"""
# pylint: disable=too-many-arguments
diff --git a/dataprep/eda/correlation/__init__.py b/dataprep/eda/correlation/__init__.py
index 3e3173eea..aec7ba872 100644
--- a/dataprep/eda/correlation/__init__.py
+++ b/dataprep/eda/correlation/__init__.py
@@ -7,7 +7,6 @@
import dask.dataframe as dd
import pandas as pd
from bokeh.io import show
-from bokeh.plotting import Figure
from .compute import compute_correlation
from .render import render_correlation
@@ -23,7 +22,7 @@ def plot_correlation(
*,
value_range: Optional[Tuple[float, float]] = None,
k: Optional[int] = None,
-) -> Figure:
+) -> Report:
"""
This function is designed to calculate the correlation between columns
There are three functions: plot_correlation(df), plot_correlation(df, x)
@@ -32,22 +31,16 @@ def plot_correlation(
Parameters
----------
- pd_data_frame: pd.DataFrame
- the pandas data_frame for which plots are calculated for each column
- x_name: str, optional
- a valid column name of the data frame
- y_name: str, optional
- a valid column name of the data frame
- value_range: list[float], optional
- range of value
- k: int, optional
- choose top-k element
-
- Returns
- ----------
- An object of figure or
- An object of figure and
- An intermediate representation for the plots of different columns in the data_frame.
+ df
+ The pandas data_frame for which plots are calculated for each column
+ x
+ A valid column name of the data frame
+ y
+ A valid column name of the data frame
+ value_range
+ Range of value
+ k
+ Choose top-k element
Examples
--------
@@ -65,12 +58,6 @@ def plot_correlation(
Note
----
- match (x_name, y_name, k)
- case (None, None, None) => heatmap
- case (Some, None, Some) => Top K columns for (pearson, spearman, kendall)
- case (Some, Some, _) => Scatter with regression line with/without top k outliers
- otherwise => error
-
This function only supports numerical or categorical data,
and it is better to drop None, Nan and Null value before using it
"""
diff --git a/dataprep/eda/correlation/compute.py b/dataprep/eda/correlation/compute.py
index d5edaca64..80c0e542f 100644
--- a/dataprep/eda/correlation/compute.py
+++ b/dataprep/eda/correlation/compute.py
@@ -43,28 +43,16 @@ def compute_correlation(
"""
Parameters
----------
- df : pd.DataFrame
+ df
The pandas dataframe for which plots are calculated for each column.
- x : Optional[str]
+ x
A valid column name of the dataframe
- y : Optional[str]
+ y
A valid column name of the dataframe
- value_range : Optional[Tuple[float, float]] = None
+ value_range
If the correlation value is out of the range, don't show it.
- k : Optional[int]
+ k
Choose top-k element
-
- Returns
- -------
- Intermediate
-
- Note
- ----
- match (x, y, k)
- case (None, None, _) => heatmap
- case (Some, None, _) => Top K columns for (pearson, spearman, kendall)
- case (Some, Some, _) => Scatter with regression line with/without top k outliers
- otherwise => error
"""
# pylint: disable=too-many-locals,too-many-statements,too-many-branches
diff --git a/dataprep/eda/correlation/render.py b/dataprep/eda/correlation/render.py
index bf5d92bcb..6bf35be77 100644
--- a/dataprep/eda/correlation/render.py
+++ b/dataprep/eda/correlation/render.py
@@ -26,6 +26,50 @@
__all__ = ["render_correlation"]
+
+def render_correlation(
+ itmdt: Intermediate,
+ plot_width: int = 500,
+ plot_height: int = 500,
+ palette: Optional[Sequence[str]] = None,
+) -> Figure:
+ """
+ Render a correlation plot
+
+ Parameters
+ ----------
+ itmdt
+ plot_width
+ The width of the plot
+ plot_height
+ The height of the plot
+ palette
+ The palette to use. By default (None),
+ the palette will be automatically chosen based on different visualization types.
+
+ Returns
+ -------
+ Figure
+ The bokeh Figure instance.
+ """
+ if itmdt.visual_type is None:
+ visual_elem = Figure()
+ elif itmdt.visual_type == "correlation_heatmaps":
+ visual_elem = render_correlation_heatmaps(
+ itmdt, plot_width, plot_height, palette or BIPALETTE
+ )
+ elif itmdt.visual_type == "correlation_single_heatmaps":
+ visual_elem = render_correlation_single_heatmaps(
+ itmdt, plot_width, plot_height, palette or BIPALETTE
+ )
+ elif itmdt.visual_type == "correlation_scatter":
+ visual_elem = render_scatter(itmdt, plot_width, plot_height, palette or BRG)
+ else:
+ raise NotImplementedError(f"Unknown visual type {itmdt.visual_type}")
+
+ return visual_elem
+
+
# def _vis_cross_table(intermediate: Intermediate, params: Dict[str, Any]) -> Figure:
# """
# :param intermediate: An object to encapsulate the
@@ -246,46 +290,3 @@ def render_scatter(
fig.add_layout(legend, place="right")
return fig
-
-
-def render_correlation(
- itmdt: Intermediate,
- plot_width: int = 500,
- plot_height: int = 500,
- palette: Optional[Sequence[str]] = None,
-) -> Figure:
- """
- Render a correlation plot
-
- Parameters
- ----------
- itmdt : Intermediate
- plot_width : int = 400
- The width of the plot
- plot_height : int = 300
- The height of the plot
- palette : Union[Sequence[str], str] = None
- The palette to use. By default (None),
- the palette will be automatically chosen based on different visualization types.
-
- Returns
- -------
- Figure
- The bokeh Figure instance.
- """
- if itmdt.visual_type is None:
- visual_elem = Figure()
- elif itmdt.visual_type == "correlation_heatmaps":
- visual_elem = render_correlation_heatmaps(
- itmdt, plot_width, plot_height, palette or BIPALETTE
- )
- elif itmdt.visual_type == "correlation_single_heatmaps":
- visual_elem = render_correlation_single_heatmaps(
- itmdt, plot_width, plot_height, palette or BIPALETTE
- )
- elif itmdt.visual_type == "correlation_scatter":
- visual_elem = render_scatter(itmdt, plot_width, plot_height, palette or BRG)
- else:
- raise NotImplementedError(f"Unknown visual type {itmdt.visual_type}")
-
- return visual_elem
diff --git a/dataprep/eda/missing/__init__.py b/dataprep/eda/missing/__init__.py
index 84e5f5136..aa7b5d24b 100644
--- a/dataprep/eda/missing/__init__.py
+++ b/dataprep/eda/missing/__init__.py
@@ -7,7 +7,6 @@
import dask.dataframe as dd
import pandas as pd
from bokeh.io import show
-from bokeh.models import LayoutDOM
from .compute import compute_missing
from .render import render_missing
@@ -24,7 +23,7 @@ def plot_missing(
bins: int = 30,
ncols: int = 30,
ndist_sample: int = 100,
-) -> LayoutDOM:
+) -> Report:
"""
This function is designed to deal with missing values
There are three functions: plot_missing(df), plot_missing(df, x)
@@ -32,25 +31,19 @@ def plot_missing(
Parameters
----------
- df: Union[pd.DataFrame, dd.DataFrame]
+ df
the pandas data_frame for which plots are calculated for each column
- x_name: str, optional
+ x
a valid column name of the data frame
- y_name: str, optional
+ y
a valid column name of the data frame
- ncols: int, optional
+ ncols
The number of columns in the figure
- bins: int
+ bins
The number of rows in the figure
- ndist_sample: int
+ ndist_sample
The number of sample points
- Returns
- ----------
- An object of figure or
- An object of figure and
- An intermediate representation for the plots of different columns in the data_frame.
-
Examples
----------
>>> from dataprep.eda.missing.computation import plot_missing
@@ -58,17 +51,6 @@ def plot_missing(
>>> df = pd.read_csv("suicide-rate.csv")
>>> plot_missing(df, "HDI_for_year")
>>> plot_missing(df, "HDI_for_year", "population")
-
- Notes
- ----------
- match (x_name, y_name)
- case (Some, Some) => histogram for numerical column,
- bars for categorical column, qq-plot, box-plot, jitter plot,
- CDF, PDF
- case (Some, None) => histogram for numerical column and
- bars for categorical column
- case (None, None) => heatmap
- otherwise => error
"""
itmdt = compute_missing(df, x, y, bins=bins, ncols=ncols, ndist_sample=ndist_sample)
fig = render_missing(itmdt)
diff --git a/dataprep/eda/missing/compute.py b/dataprep/eda/missing/compute.py
index d7f5d2375..f76766e9e 100644
--- a/dataprep/eda/missing/compute.py
+++ b/dataprep/eda/missing/compute.py
@@ -305,25 +305,19 @@ def compute_missing(
Parameters
----------
- pd_data_frame: pd.DataFrame
+ df
the pandas data_frame for which plots are calculated for each column
- x_name: str, optional
+ x
a valid column name of the data frame
- y_name: str, optional
+ y
a valid column name of the data frame
- ncols: int, optional
+ ncols
The number of columns in the figure
- bins: int
+ bins
The number of rows in the figure
- ndist_sample: int
+ ndist_sample
The number of sample points
- Returns
- ----------
- An object of figure or
- An object of figure and
- An intermediate representation for the plots of different columns in the data_frame.
-
Examples
----------
>>> from dataprep.eda.missing.computation import plot_missing
@@ -331,17 +325,6 @@ def compute_missing(
>>> df = pd.read_csv("suicide-rate.csv")
>>> plot_missing(df, "HDI_for_year")
>>> plot_missing(df, "HDI_for_year", "population")
-
- Notes
- ----------
- match (x_name, y_name)
- case (Some, Some) => histogram for numerical column,
- bars for categorical column, qq-plot, box-plot, jitter plot,
- CDF, PDF
- case (Some, None) => histogram for numerical column and
- bars for categorical column
- case (None, None) => heatmap
- otherwise => error
"""
df = to_dask(df)
diff --git a/dataprep/eda/missing/render.py b/dataprep/eda/missing/render.py
index ea75ca14f..914cae22a 100644
--- a/dataprep/eda/missing/render.py
+++ b/dataprep/eda/missing/render.py
@@ -37,6 +37,22 @@
__all__ = ["render_missing"]
+def render_missing(
+ itmdt: Intermediate, plot_width: int = 500, plot_height: int = 500
+) -> LayoutDOM:
+ """
+ @Jinglin write here
+ """
+ if itmdt.visual_type == "missing_spectrum":
+ return render_missing_spectrum(itmdt, plot_width, plot_height)
+ elif itmdt.visual_type == "missing_impact_1vn":
+ return render_missing_impact_1vn(itmdt, plot_width, plot_height)
+ elif itmdt.visual_type == "missing_impact_1v1":
+ return render_missing_impact_1v1(itmdt, plot_width, plot_height)
+ else:
+ raise UnreachableError
+
+
def tweak_figure(fig: Figure) -> Figure:
"""
Set some common attributes for a figure
@@ -347,19 +363,3 @@ def render_missing_impact_1v1(
else:
fig.title = Title(text=f"Missing impact of {x} by {y}")
return fig
-
-
-def render_missing(
- itmdt: Intermediate, plot_width: int = 500, plot_height: int = 500
-) -> LayoutDOM:
- """
- @Jinglin write here
- """
- if itmdt.visual_type == "missing_spectrum":
- return render_missing_spectrum(itmdt, plot_width, plot_height)
- elif itmdt.visual_type == "missing_impact_1vn":
- return render_missing_impact_1vn(itmdt, plot_width, plot_height)
- elif itmdt.visual_type == "missing_impact_1v1":
- return render_missing_impact_1v1(itmdt, plot_width, plot_height)
- else:
- raise UnreachableError
diff --git a/docs/source/conf.py b/docs/source/conf.py
index c7dee0403..79182899e 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -52,6 +52,7 @@ def get_version() -> str:
"sphinx_autodoc_typehints",
]
+autodoc_typehints = "description"
# Napoleon settings
napoleon_google_docstring = False
napoleon_numpy_docstring = True
@@ -67,6 +68,12 @@ def get_version() -> str:
napoleon_use_keyword = True
napoleon_custom_sections = None
+# autodoc_default_options = {
+# "members": True,
+# "member-order": "bysource",
+# "special-members": "__init__",
+# }
+
# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]
diff --git a/docs/source/dataprep.data_connector.rst b/docs/source/dataprep.data_connector.rst
index 6d45aa92d..2cb80e528 100644
--- a/docs/source/dataprep.data_connector.rst
+++ b/docs/source/dataprep.data_connector.rst
@@ -1,62 +1,44 @@
dataprep.data\_connector package
================================
-Submodules
-----------
+.. .. automodule:: dataprep.data_connector
+.. :members:
+.. :undoc-members:
+.. :show-inheritance:
-dataprep.data\_connector.config\_manager module
------------------------------------------------
+Connector
+---------
-.. automodule:: dataprep.data_connector.config_manager
+.. autoclass:: dataprep.data_connector.Connector
:members:
- :undoc-members:
- :show-inheritance:
+ :inherited-members:
-dataprep.data\_connector.connector module
------------------------------------------
-.. automodule:: dataprep.data_connector.connector
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.data\_connector.errors module
---------------------------------------
-
-.. automodule:: dataprep.data_connector.errors
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.data\_connector.implicit\_database module
---------------------------------------------------
+
+.. Submodules
+.. ----------
-.. automodule:: dataprep.data_connector.implicit_database
- :members:
- :undoc-members:
- :show-inheritance:
+.. dataprep.data\_connector.connector module
+.. -----------------------------------------
-dataprep.data\_connector.schema module
---------------------------------------
+.. .. automodule:: dataprep.data_connector.connector
+.. :members:
+.. :undoc-members:
+.. :show-inheritance:
-.. automodule:: dataprep.data_connector.schema
- :members:
- :undoc-members:
- :show-inheritance:
+.. dataprep.data\_connector.schema module
+.. --------------------------------------
-dataprep.data\_connector.types module
--------------------------------------
+.. .. automodule:: dataprep.data_connector.schema
+.. :members:
+.. :undoc-members:
+.. :show-inheritance:
-.. automodule:: dataprep.data_connector.types
- :members:
- :undoc-members:
- :show-inheritance:
+.. dataprep.data\_connector.types module
+.. -------------------------------------
+.. .. automodule:: dataprep.data_connector.types
+.. :members:
+.. :undoc-members:
+.. :show-inheritance:
-Module contents
----------------
-
-.. automodule:: dataprep.data_connector
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/source/dataprep.eda.basic.rst b/docs/source/dataprep.eda.basic.rst
deleted file mode 100644
index 7b81409a4..000000000
--- a/docs/source/dataprep.eda.basic.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-dataprep.eda.basic package
-==========================
-
-Submodules
-----------
-
-dataprep.eda.basic.compute module
----------------------------------
-
-.. automodule:: dataprep.eda.basic.compute
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.eda.basic.render module
---------------------------------
-
-.. automodule:: dataprep.eda.basic.render
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: dataprep.eda.basic
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/source/dataprep.eda.correlation.rst b/docs/source/dataprep.eda.correlation.rst
deleted file mode 100644
index a88bbd680..000000000
--- a/docs/source/dataprep.eda.correlation.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-dataprep.eda.correlation package
-================================
-
-Submodules
-----------
-
-dataprep.eda.correlation.compute module
----------------------------------------
-
-.. automodule:: dataprep.eda.correlation.compute
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.eda.correlation.render module
---------------------------------------
-
-.. automodule:: dataprep.eda.correlation.render
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: dataprep.eda.correlation
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/source/dataprep.eda.missing.rst b/docs/source/dataprep.eda.missing.rst
deleted file mode 100644
index b5d6227be..000000000
--- a/docs/source/dataprep.eda.missing.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-dataprep.eda.missing package
-============================
-
-Submodules
-----------
-
-dataprep.eda.missing.compute module
------------------------------------
-
-.. automodule:: dataprep.eda.missing.compute
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.eda.missing.render module
-----------------------------------
-
-.. automodule:: dataprep.eda.missing.render
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: dataprep.eda.missing
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/source/dataprep.eda.outlier.rst b/docs/source/dataprep.eda.outlier.rst
deleted file mode 100644
index f6c942349..000000000
--- a/docs/source/dataprep.eda.outlier.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-dataprep.eda.outlier package
-============================
-
-Submodules
-----------
-
-dataprep.eda.outlier.computation module
----------------------------------------
-
-.. automodule:: dataprep.eda.outlier.computation
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: dataprep.eda.outlier
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/source/dataprep.eda.rst b/docs/source/dataprep.eda.rst
index 815cc3ebf..97b60447d 100644
--- a/docs/source/dataprep.eda.rst
+++ b/docs/source/dataprep.eda.rst
@@ -1,48 +1,21 @@
dataprep.eda package
====================
-Subpackages
------------
-
-.. toctree::
-
- dataprep.eda.basic
- dataprep.eda.correlation
- dataprep.eda.missing
- dataprep.eda.outlier
-
-Submodules
-----------
-
-dataprep.eda.intermediate module
---------------------------------
-
-.. automodule:: dataprep.eda.intermediate
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.eda.palette module
----------------------------
-
-.. automodule:: dataprep.eda.palette
- :members:
- :undoc-members:
- :show-inheritance:
-
-dataprep.eda.report module
---------------------------
-
-.. automodule:: dataprep.eda.report
- :members:
- :undoc-members:
- :show-inheritance:
+.. .. automodule:: dataprep.eda
+.. :noindex:
+Plot* functions
+---------------
+.. autofunction:: dataprep.eda.basic.plot
+.. autofunction:: dataprep.eda.correlation.plot_correlation
+.. autofunction:: dataprep.eda.missing.plot_missing
-Module contents
+Other functions
---------------
-.. automodule:: dataprep.eda
- :members:
- :undoc-members:
- :show-inheritance:
+.. autofunction:: dataprep.eda.basic.compute.compute
+.. autofunction:: dataprep.eda.basic.render.render
+.. autofunction:: dataprep.eda.correlation.compute.compute_correlation
+.. autofunction:: dataprep.eda.correlation.render.render_correlation
+.. autofunction:: dataprep.eda.missing.compute.compute_missing
+.. autofunction:: dataprep.eda.missing.render.render_missing
diff --git a/docs/source/dataprep.rst b/docs/source/dataprep.rst
index 664a6f359..f71b76e4d 100644
--- a/docs/source/dataprep.rst
+++ b/docs/source/dataprep.rst
@@ -7,24 +7,4 @@ Subpackages
.. toctree::
dataprep.data_connector
- dataprep.eda
-
-Submodules
-----------
-
-dataprep.errors module
-----------------------
-
-.. automodule:: dataprep.errors
- :members:
- :undoc-members:
- :show-inheritance:
-
-
-Module contents
----------------
-
-.. automodule:: dataprep
- :members:
- :undoc-members:
- :show-inheritance:
+ dataprep.eda
\ No newline at end of file
diff --git a/poetry.lock b/poetry.lock
index 02f6ab021..8cdec12eb 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -22,6 +22,15 @@ optional = false
python-versions = "*"
version = "1.4.3"
+[[package]]
+category = "dev"
+description = "Disable App Nap on OS X 10.9"
+marker = "sys_platform == \"darwin\""
+name = "appnope"
+optional = false
+python-versions = "*"
+version = "0.1.0"
+
[[package]]
category = "dev"
description = "An unobtrusive argparse wrapper with natural syntax"
@@ -81,6 +90,14 @@ version = "2.8.0"
[package.dependencies]
pytz = ">=2015.7"
+[[package]]
+category = "dev"
+description = "Specifications for callback functions passed in to an API"
+name = "backcall"
+optional = false
+python-versions = "*"
+version = "0.1.0"
+
[[package]]
category = "dev"
description = "The uncompromising code formatter."
@@ -386,6 +403,38 @@ zipp = ">=0.5"
docs = ["sphinx", "rst.linker"]
testing = ["packaging", "importlib-resources"]
+[[package]]
+category = "dev"
+description = "IPython: Productive Interactive Computing"
+name = "ipython"
+optional = false
+python-versions = ">=3.6"
+version = "7.13.0"
+
+[package.dependencies]
+appnope = "*"
+backcall = "*"
+colorama = "*"
+decorator = "*"
+jedi = ">=0.10"
+pexpect = "*"
+pickleshare = "*"
+prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
+pygments = "*"
+setuptools = ">=18.5"
+traitlets = ">=4.2"
+
+[package.extras]
+all = ["numpy (>=1.14)", "testpath", "notebook", "nose (>=0.10.1)", "nbconvert", "requests", "ipywidgets", "qtconsole", "ipyparallel", "Sphinx (>=1.3)", "pygments", "nbformat", "ipykernel"]
+doc = ["Sphinx (>=1.3)"]
+kernel = ["ipykernel"]
+nbconvert = ["nbconvert"]
+nbformat = ["nbformat"]
+notebook = ["notebook", "ipywidgets"]
+parallel = ["ipyparallel"]
+qtconsole = ["qtconsole"]
+test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.14)"]
+
[[package]]
category = "dev"
description = "Vestigial utilities from IPython"
@@ -408,6 +457,21 @@ pyproject = ["toml"]
requirements = ["pipreqs", "pip-api"]
xdg_home = ["appdirs (>=1.4.0)"]
+[[package]]
+category = "dev"
+description = "An autocompletion tool for Python that can be used for text editors."
+name = "jedi"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "0.17.0"
+
+[package.dependencies]
+parso = ">=0.7.0"
+
+[package.extras]
+qa = ["flake8 (3.7.9)"]
+testing = ["colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"]
+
[[package]]
category = "main"
description = "A very fast and expressive template engine."
@@ -730,6 +794,17 @@ version = "1.9.3"
all = ["flake8", "nose"]
tests = ["nose", "flake8"]
+[[package]]
+category = "dev"
+description = "A Python Parser"
+name = "parso"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "0.7.0"
+
+[package.extras]
+testing = ["docopt", "pytest (>=3.0.7)"]
+
[[package]]
category = "main"
description = "Appendable key-value storage"
@@ -761,6 +836,26 @@ optional = false
python-versions = "*"
version = "0.1.2"
+[[package]]
+category = "dev"
+description = "Pexpect allows easy control of interactive console applications."
+marker = "sys_platform != \"win32\""
+name = "pexpect"
+optional = false
+python-versions = "*"
+version = "4.8.0"
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+category = "dev"
+description = "Tiny 'shelve'-like database with concurrency support"
+name = "pickleshare"
+optional = false
+python-versions = "*"
+version = "0.7.5"
+
[[package]]
category = "main"
description = "Python Imaging Library (Fork)"
@@ -793,6 +888,17 @@ optional = false
python-versions = "*"
version = "0.3.1"
+[[package]]
+category = "dev"
+description = "Library for building powerful interactive command lines in Python"
+name = "prompt-toolkit"
+optional = false
+python-versions = ">=3.6.1"
+version = "3.0.5"
+
+[package.dependencies]
+wcwidth = "*"
+
[[package]]
category = "main"
description = "Cross-platform lib for process and system monitoring in Python."
@@ -804,6 +910,15 @@ version = "5.7.0"
[package.extras]
enum = ["enum34"]
+[[package]]
+category = "dev"
+description = "Run a subprocess in a pseudo terminal"
+marker = "sys_platform != \"win32\""
+name = "ptyprocess"
+optional = false
+python-versions = "*"
+version = "0.6.0"
+
[[package]]
category = "dev"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
@@ -988,6 +1103,17 @@ urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
+[[package]]
+category = "dev"
+description = "a python refactoring library..."
+name = "rope"
+optional = false
+python-versions = "*"
+version = "0.16.0"
+
+[package.extras]
+dev = ["pytest"]
+
[[package]]
category = "dev"
description = "Checks syntax of reStructuredText and code blocks nested within it"
@@ -1040,13 +1166,13 @@ description = "Python documentation generator"
name = "sphinx"
optional = false
python-versions = ">=3.5"
-version = "2.4.4"
+version = "3.0.3"
[package.dependencies]
Jinja2 = ">=2.3"
Pygments = ">=2.0"
alabaster = ">=0.7,<0.8"
-babel = ">=1.3,<2.0 || >2.0"
+babel = ">=1.3"
colorama = ">=0.3.5"
docutils = ">=0.12"
imagesize = "*"
@@ -1063,7 +1189,8 @@ sphinxcontrib-serializinghtml = "*"
[package.extras]
docs = ["sphinxcontrib-websupport"]
-test = ["pytest (<5.3.3)", "pytest-cov", "html5lib", "flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.761)", "docutils-stubs"]
+lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.770)", "docutils-stubs"]
+test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"]
[[package]]
category = "dev"
@@ -1330,7 +1457,7 @@ docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
testing = ["jaraco.itertools", "func-timeout"]
[metadata]
-content-hash = "f4939c2998d61fe863935d6c1c5fe5063a1b5b003d0ab35ba1533c45e09c2a4a"
+content-hash = "5c96219b79fe9a4164be306f91da54207a46437beea5a9ac98abd0b502420411"
python-versions = "^3.6.1"
[metadata.files]
@@ -1345,6 +1472,10 @@ appdirs = [
{file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"},
{file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"},
]
+appnope = [
+ {file = "appnope-0.1.0-py2.py3-none-any.whl", hash = "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0"},
+ {file = "appnope-0.1.0.tar.gz", hash = "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71"},
+]
argh = [
{file = "argh-0.26.2-py2.py3-none-any.whl", hash = "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3"},
{file = "argh-0.26.2.tar.gz", hash = "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65"},
@@ -1365,6 +1496,10 @@ babel = [
{file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"},
{file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"},
]
+backcall = [
+ {file = "backcall-0.1.0.tar.gz", hash = "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4"},
+ {file = "backcall-0.1.0.zip", hash = "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"},
+]
black = [
{file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"},
{file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"},
@@ -1481,6 +1616,10 @@ importlib-metadata = [
{file = "importlib_metadata-1.6.0-py2.py3-none-any.whl", hash = "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f"},
{file = "importlib_metadata-1.6.0.tar.gz", hash = "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"},
]
+ipython = [
+ {file = "ipython-7.13.0-py3-none-any.whl", hash = "sha256:eb8d075de37f678424527b5ef6ea23f7b80240ca031c2dd6de5879d687a65333"},
+ {file = "ipython-7.13.0.tar.gz", hash = "sha256:ca478e52ae1f88da0102360e57e528b92f3ae4316aabac80a2cd7f7ab2efb48a"},
+]
ipython-genutils = [
{file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"},
{file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"},
@@ -1489,6 +1628,10 @@ isort = [
{file = "isort-4.3.21-py2.py3-none-any.whl", hash = "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"},
{file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"},
]
+jedi = [
+ {file = "jedi-0.17.0-py2.py3-none-any.whl", hash = "sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798"},
+ {file = "jedi-0.17.0.tar.gz", hash = "sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030"},
+]
jinja2 = [
{file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
{file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"},
@@ -1723,6 +1866,10 @@ param = [
{file = "param-1.9.3-py2.py3-none-any.whl", hash = "sha256:b9afbfda25be81bd763a399beaf8775fd79156e5897d4de50d3e091d15d72636"},
{file = "param-1.9.3.tar.gz", hash = "sha256:8370d41616e257b8ed2e242ec531e0340b8c954bea414b791fa0ef6235959981"},
]
+parso = [
+ {file = "parso-0.7.0-py2.py3-none-any.whl", hash = "sha256:158c140fc04112dc45bca311633ae5033c2c2a7b732fa33d0955bad8152a8dd0"},
+ {file = "parso-0.7.0.tar.gz", hash = "sha256:908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c"},
+]
partd = [
{file = "partd-1.1.0-py3-none-any.whl", hash = "sha256:7a491cf254e5ab09e9e6a40d80195e5e0e5e169115bfb8287225cb0c207536d2"},
{file = "partd-1.1.0.tar.gz", hash = "sha256:6e258bf0810701407ad1410d63d1a15cfd7b773fd9efe555dac6bb82cc8832b0"},
@@ -1734,6 +1881,14 @@ pathspec = [
pathtools = [
{file = "pathtools-0.1.2.tar.gz", hash = "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0"},
]
+pexpect = [
+ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
+ {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
+]
+pickleshare = [
+ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
+ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
+]
pillow = [
{file = "Pillow-7.1.2-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:ae2b270f9a0b8822b98655cb3a59cdb1bd54a34807c6c56b76dd2e786c3b7db3"},
{file = "Pillow-7.1.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:d23e2aa9b969cf9c26edfb4b56307792b8b374202810bd949effd1c6e11ebd6d"},
@@ -1766,6 +1921,10 @@ pluggy = [
port-for = [
{file = "port-for-0.3.1.tar.gz", hash = "sha256:b16a84bb29c2954db44c29be38b17c659c9c27e33918dec16b90d375cc596f1c"},
]
+prompt-toolkit = [
+ {file = "prompt_toolkit-3.0.5-py3-none-any.whl", hash = "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04"},
+ {file = "prompt_toolkit-3.0.5.tar.gz", hash = "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8"},
+]
psutil = [
{file = "psutil-5.7.0-cp27-none-win32.whl", hash = "sha256:298af2f14b635c3c7118fd9183843f4e73e681bb6f01e12284d4d70d48a60953"},
{file = "psutil-5.7.0-cp27-none-win_amd64.whl", hash = "sha256:75e22717d4dbc7ca529ec5063000b2b294fc9a367f9c9ede1f65846c7955fd38"},
@@ -1779,6 +1938,10 @@ psutil = [
{file = "psutil-5.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:d84029b190c8a66a946e28b4d3934d2ca1528ec94764b180f7d6ea57b0e75e26"},
{file = "psutil-5.7.0.tar.gz", hash = "sha256:685ec16ca14d079455892f25bd124df26ff9137664af445563c1bd36629b5e0e"},
]
+ptyprocess = [
+ {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"},
+ {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"},
+]
py = [
{file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"},
{file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"},
@@ -1865,6 +2028,11 @@ requests = [
{file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"},
{file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"},
]
+rope = [
+ {file = "rope-0.16.0-py2-none-any.whl", hash = "sha256:ae1fa2fd56f64f4cc9be46493ce54bed0dd12dee03980c61a4393d89d84029ad"},
+ {file = "rope-0.16.0-py3-none-any.whl", hash = "sha256:52423a7eebb5306a6d63bdc91a7c657db51ac9babfb8341c9a1440831ecf3203"},
+ {file = "rope-0.16.0.tar.gz", hash = "sha256:d2830142c2e046f5fc26a022fe680675b6f48f81c7fc1f03a950706e746e9dfe"},
+]
rstcheck = [
{file = "rstcheck-3.3.1.tar.gz", hash = "sha256:92c4f79256a54270e0402ba16a2f92d0b3c15c8f4410cb9c57127067c215741f"},
]
@@ -1904,8 +2072,8 @@ sortedcontainers = [
{file = "sortedcontainers-2.1.0.tar.gz", hash = "sha256:974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a"},
]
sphinx = [
- {file = "Sphinx-2.4.4-py3-none-any.whl", hash = "sha256:fc312670b56cb54920d6cc2ced455a22a547910de10b3142276495ced49231cb"},
- {file = "Sphinx-2.4.4.tar.gz", hash = "sha256:b4c750d546ab6d7e05bdff6ac24db8ae3e8b8253a3569b754e445110a0a12b66"},
+ {file = "Sphinx-3.0.3-py3-none-any.whl", hash = "sha256:f5505d74cf9592f3b997380f9bdb2d2d0320ed74dd69691e3ee0644b956b8d83"},
+ {file = "Sphinx-3.0.3.tar.gz", hash = "sha256:62edfd92d955b868d6c124c0942eba966d54b5f3dcb4ded39e65f74abac3f572"},
]
sphinx-autobuild = [
{file = "sphinx-autobuild-0.7.1.tar.gz", hash = "sha256:66388f81884666e3821edbe05dd53a0cfb68093873d17320d0610de8db28c74e"},
diff --git a/pyproject.toml b/pyproject.toml
index 1ff985cf2..a3b585829 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -44,13 +44,15 @@ pytest = "~5.4"
mypy = "~0.770"
black = "19.10b0"
nbsphinx = "~0.5"
-sphinx = "~2.4"
+sphinx = "^3"
toml = "^0.10.0"
rstcheck = "^3.3.1"
sphinx-autobuild = "^0.7.1"
pytest-cov = "^2.8.1"
codecov = "^2.0.22"
sphinx-autodoc-typehints = "^1.10.3"
+ipython = "^7.13.0"
+rope = "^0.16.0"
[tool.black]
line-length = 88