From 3c08a24f5b85ed6d564b9b450e13775b0e871a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 12:12:27 +0200 Subject: [PATCH 01/24] parse dataframe --- Pipfile | 1 + Pipfile.lock | 76 ++++++++++++++++++- python/src/lazylearn/errors/__init__.py | 0 python/src/lazylearn/errors/errors.py | 2 + .../lazylearn/ingestion/ingestion_pipeline.py | 18 +++++ .../ingestion_pipeline_steps/__init__.py | 0 .../data_parser_step.py | 21 +++++ .../interpreter_step.py | 0 python/src/lazylearn/lazylearn.py | 7 ++ python/src/lazylearn/pipeline/pipeline.py | 32 ++++++++ .../test_data_parser_step.py | 12 +++ 11 files changed, 166 insertions(+), 3 deletions(-) create mode 100644 python/src/lazylearn/errors/__init__.py create mode 100644 python/src/lazylearn/errors/errors.py create mode 100644 python/src/lazylearn/ingestion/ingestion_pipeline.py create mode 100644 python/src/lazylearn/ingestion/ingestion_pipeline_steps/__init__.py create mode 100644 python/src/lazylearn/ingestion/ingestion_pipeline_steps/data_parser_step.py create mode 100644 python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py create mode 100644 python/src/lazylearn/lazylearn.py create mode 100644 python/src/lazylearn/pipeline/pipeline.py create mode 100644 python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py diff --git a/Pipfile b/Pipfile index 9eb264b..09673fe 100644 --- a/Pipfile +++ b/Pipfile @@ -6,6 +6,7 @@ verify_ssl = true [packages] loguru = "==0.6.*" pandas = "==1.5.*" +scikit-learn = "*" [dev-packages] black = "==23.*" diff --git a/Pipfile.lock b/Pipfile.lock index 2612f86..f994c8d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "99f8d17ee1c40fcc4016691a450cb21427976f5dd2cd69150f6e578a2937a09f" + "sha256": "dc3b9bfb44a7f538a9727ffb3e03caf0d946db31930d6e423316a6bf921fb179" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "joblib": { + "hashes": [ + "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385", + "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.0" + }, "loguru": { "hashes": [ "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c", @@ -96,7 +104,7 @@ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, "pytz": { @@ -106,13 +114,75 @@ ], "version": "==2023.3" }, + "scikit-learn": { + "hashes": [ + "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", + "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49", + "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584", + "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1", + "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3", + "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d", + "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad", + "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20", + "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd", + "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7", + "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c", + "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744", + "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f", + "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51", + "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c", + "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c", + "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f", + "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb", + "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89", + "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590", + "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3" + ], + "index": "pypi", + "version": "==1.2.2" + }, + "scipy": { + "hashes": [ + "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415", + "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f", + "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd", + "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f", + "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d", + "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601", + "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5", + "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88", + "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f", + "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e", + "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2", + "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353", + "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35", + "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6", + "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea", + "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35", + "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1", + "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9", + "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5", + "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019", + "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1" + ], + "markers": "python_version < '3.12' and python_version >= '3.8'", + "version": "==1.10.1" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" + }, + "threadpoolctl": { + "hashes": [ + "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b", + "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380" + ], + "markers": "python_version >= '3.6'", + "version": "==3.1.0" } }, "develop": { diff --git a/python/src/lazylearn/errors/__init__.py b/python/src/lazylearn/errors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/src/lazylearn/errors/errors.py b/python/src/lazylearn/errors/errors.py new file mode 100644 index 0000000..787b56b --- /dev/null +++ b/python/src/lazylearn/errors/errors.py @@ -0,0 +1,2 @@ +class DataSourceError(Exception): + """Raised if passing an incompatible argument as data source""" diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline.py b/python/src/lazylearn/ingestion/ingestion_pipeline.py new file mode 100644 index 0000000..586556c --- /dev/null +++ b/python/src/lazylearn/ingestion/ingestion_pipeline.py @@ -0,0 +1,18 @@ +from pipeline.pipeline import IngestionPipeline, PipelineStep + + +class Ingestion: + def __init__(self): + pass + + def run(self, data): + pipeline = IngestionPipeline() + pipeline.raw_data = data + + pipeline.add(DataSourceParser(data)) + + pipeline.add(ColumnInterpreter()) + + pipeline.run() + + return pipeline.response() diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/__init__.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/data_parser_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/data_parser_step.py new file mode 100644 index 0000000..42f323a --- /dev/null +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/data_parser_step.py @@ -0,0 +1,21 @@ +from errors.errors import DataSourceError +from pandas import DataFrame +from pipeline.pipeline import IngestionPipeline, PipelineStep + + +class DataSourceParser(PipelineStep): + def apply(self, pipeline: IngestionPipeline): + """ + This method is responsible for parsing the raw data + source from its parent pipeline into a DataFrame + object. + + :param pipeline: parent IngestionPipeline + :return: + """ + assert pipeline.raw_data is not None + + if isinstance(pipeline.raw_data, DataFrame): + pipeline.df = pipeline.raw_data + else: + raise DataSourceError diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py new file mode 100644 index 0000000..e69de29 diff --git a/python/src/lazylearn/lazylearn.py b/python/src/lazylearn/lazylearn.py new file mode 100644 index 0000000..4ea5843 --- /dev/null +++ b/python/src/lazylearn/lazylearn.py @@ -0,0 +1,7 @@ +class LazyLearner: + def __init__(self): + self.project = None + + def create_project(self, data, target, task="infer"): + # ingest data + pass diff --git a/python/src/lazylearn/pipeline/pipeline.py b/python/src/lazylearn/pipeline/pipeline.py new file mode 100644 index 0000000..2415848 --- /dev/null +++ b/python/src/lazylearn/pipeline/pipeline.py @@ -0,0 +1,32 @@ +from typing import List + +from models.models import Dataset +from pandas import DataFrame + + +class Pipeline: + def __init__(self): + self._has_run: bool = False + self._steps: List[PipelineStep] = [] + + def add(self, pipeline_step): + self._steps.append(pipeline_step) + + def run(self): + [step.apply(self) for step in self._steps] + self._has_run = True + + +class PipelineStep: + def apply(self, pipeline: Pipeline): + pass + + +class IngestionPipeline(Pipeline): + def __init__(self): + super().__init__() + self.raw_data = None + self.df: DataFrame = None + + def response(self): + return Dataset diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py new file mode 100644 index 0000000..f576ae9 --- /dev/null +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py @@ -0,0 +1,12 @@ +from ingestion.ingestion_pipeline_steps.data_parser_step import DataSourceParser +from pipeline.pipeline import IngestionPipeline +from sklearn.datasets import load_iris + + +def test_iris_okay(): + pipeline = IngestionPipeline() + pipeline.raw_data = load_iris(return_X_y=True, as_frame=True)[0] + pipeline.add(DataSourceParser()) + pipeline.run() + + assert pipeline.raw_data.equals(pipeline.df) From 0464761673f83db85463541f3092cf3f6b2cdf51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 13:03:55 +0200 Subject: [PATCH 02/24] ColumnTypeInterpreter understands numeric --- Pipfile | 1 + Pipfile.lock | 10 ++++- .../lazylearn/ingestion/ingestion_pipeline.py | 6 ++- .../interpreter_step.py | 41 +++++++++++++++++++ python/src/lazylearn/pipeline/pipeline.py | 1 + .../test_interpreter_step.py | 17 ++++++++ 6 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py diff --git a/Pipfile b/Pipfile index 09673fe..3e1d6f7 100644 --- a/Pipfile +++ b/Pipfile @@ -7,6 +7,7 @@ verify_ssl = true loguru = "==0.6.*" pandas = "==1.5.*" scikit-learn = "*" +tqdm = "*" [dev-packages] black = "==23.*" diff --git a/Pipfile.lock b/Pipfile.lock index f994c8d..229e9d0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "dc3b9bfb44a7f538a9727ffb3e03caf0d946db31930d6e423316a6bf921fb179" + "sha256": "6b3413fb81182fed812795fdc90926d56c1db1b3aab7f14c629ed872f7b9b789" }, "pipfile-spec": 6, "requires": { @@ -183,6 +183,14 @@ ], "markers": "python_version >= '3.6'", "version": "==3.1.0" + }, + "tqdm": { + "hashes": [ + "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5", + "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671" + ], + "index": "pypi", + "version": "==4.65.0" } }, "develop": { diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline.py b/python/src/lazylearn/ingestion/ingestion_pipeline.py index 586556c..352cf95 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline.py @@ -1,4 +1,6 @@ -from pipeline.pipeline import IngestionPipeline, PipelineStep +from ingestion.ingestion_pipeline_steps.data_parser_step import DataSourceParser # noqa +from ingestion.ingestion_pipeline_steps.interpreter_step import ColumnTypeInterpreter # noqa +from pipeline.pipeline import IngestionPipeline class Ingestion: @@ -11,7 +13,7 @@ def run(self, data): pipeline.add(DataSourceParser(data)) - pipeline.add(ColumnInterpreter()) + pipeline.add(ColumnTypeInterpreter()) pipeline.run() diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index e69de29..1ff6bea 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -0,0 +1,41 @@ +from pandas import Series +from pipeline.pipeline import IngestionPipeline +from tqdm import tqdm + + +class ColumnTypeInterpreter: + def apply(self, pipeline: IngestionPipeline): + """ + + :param pipeline: parent IngestionPipeline + :return: + """ + columns = pipeline.df.columns + column_types = {} + + for column_name in tqdm(columns): + column_types[column_name] = self.analyze_column(pipeline.df[column_name]) # noqa + + pipeline.column_type_map = column_types + + def analyze_column(self, column: Series): + # is it numeric? + values = set(column) + types = set([type(value) for value in values]) + + if self.numeric_test(types): + return "numeric" + + return "object" + + @staticmethod + def numeric_test(types: set): + return all([item == float or item == int for item in types]) + + @staticmethod + def string_test(types: set): + raise NotImplementedError + + @staticmethod + def date_check(types: set): + raise NotImplementedError diff --git a/python/src/lazylearn/pipeline/pipeline.py b/python/src/lazylearn/pipeline/pipeline.py index 2415848..42c0b49 100644 --- a/python/src/lazylearn/pipeline/pipeline.py +++ b/python/src/lazylearn/pipeline/pipeline.py @@ -27,6 +27,7 @@ def __init__(self): super().__init__() self.raw_data = None self.df: DataFrame = None + self.column_type_map: dict = None def response(self): return Dataset diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py new file mode 100644 index 0000000..2a65fb8 --- /dev/null +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py @@ -0,0 +1,17 @@ +from ingestion.ingestion_pipeline_steps.interpreter_step import ColumnTypeInterpreter +from pipeline.pipeline import IngestionPipeline +from sklearn.datasets import load_iris + + +def test_iris_okay(): + pipeline = IngestionPipeline() + pipeline.df = load_iris(return_X_y=True, as_frame=True)[0] + pipeline.add(ColumnTypeInterpreter()) + pipeline.run() + + assert pipeline.column_type_map == { + "sepal length (cm)": "numeric", + "sepal width (cm)": "numeric", + "petal length (cm)": "numeric", + "petal width (cm)": "numeric", + } From f4119ebe5cad4eb6d5a2c8e62cee60c17e97e59a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 21:54:16 +0200 Subject: [PATCH 03/24] summary stat step --- .../lazylearn/ingestion/ingestion_pipeline.py | 9 +++-- .../interpreter_step.py | 10 +++++- .../summary_stats_step.py | 21 ++++++++++++ python/src/lazylearn/pipeline/pipeline.py | 1 + .../test_data_parser_step.py | 2 +- .../test_interpreter_step.py | 6 ++-- .../test_summary_stats_step.py | 34 +++++++++++++++++++ shell/check.sh | 4 +-- 8 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py create mode 100644 python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline.py b/python/src/lazylearn/ingestion/ingestion_pipeline.py index 352cf95..0cac1e9 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline.py @@ -1,5 +1,8 @@ from ingestion.ingestion_pipeline_steps.data_parser_step import DataSourceParser # noqa -from ingestion.ingestion_pipeline_steps.interpreter_step import ColumnTypeInterpreter # noqa +from ingestion.ingestion_pipeline_steps.interpreter_step import ( # noqa + ColumnTypeInterpreter, +) +from ingestion.ingestion_pipeline_steps.summary_stats_step import SummaryStatistics from pipeline.pipeline import IngestionPipeline @@ -11,10 +14,12 @@ def run(self, data): pipeline = IngestionPipeline() pipeline.raw_data = data - pipeline.add(DataSourceParser(data)) + pipeline.add(DataSourceParser()) pipeline.add(ColumnTypeInterpreter()) + pipeline.add(SummaryStatistics()) + pipeline.run() return pipeline.response() diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index 1ff6bea..8e40286 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -6,6 +6,8 @@ class ColumnTypeInterpreter: def apply(self, pipeline: IngestionPipeline): """ + This method is responsible for inferring the + types of the columns of the project dataset :param pipeline: parent IngestionPipeline :return: @@ -14,7 +16,9 @@ def apply(self, pipeline: IngestionPipeline): column_types = {} for column_name in tqdm(columns): - column_types[column_name] = self.analyze_column(pipeline.df[column_name]) # noqa + column_types[column_name] = self.analyze_column( + pipeline.df[column_name] + ) # noqa pipeline.column_type_map = column_types @@ -39,3 +43,7 @@ def string_test(types: set): @staticmethod def date_check(types: set): raise NotImplementedError + + @staticmethod + def categorical_test(values: set): + raise NotImplementedError diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py new file mode 100644 index 0000000..581327f --- /dev/null +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py @@ -0,0 +1,21 @@ +from pipeline.pipeline import IngestionPipeline, PipelineStep + + +class SummaryStatistics(PipelineStep): + def apply(self, pipeline: IngestionPipeline): + """ + This step computes summary statistics for + numeric attributes in the dataset. + + :param pipeline: parent IngestionPipeline + :return: + """ + numeric_attributes = [ + column + for column in pipeline.column_type_map + if pipeline.column_type_map[column] == "numeric" + ] + df = pipeline.df + + for attr in numeric_attributes: + pipeline.summary_stats[attr] = pipeline.df[attr].describe().to_dict() diff --git a/python/src/lazylearn/pipeline/pipeline.py b/python/src/lazylearn/pipeline/pipeline.py index 42c0b49..c4ccaff 100644 --- a/python/src/lazylearn/pipeline/pipeline.py +++ b/python/src/lazylearn/pipeline/pipeline.py @@ -28,6 +28,7 @@ def __init__(self): self.raw_data = None self.df: DataFrame = None self.column_type_map: dict = None + self.summary_stats: dict = {} def response(self): return Dataset diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py index f576ae9..606694b 100644 --- a/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_data_parser_step.py @@ -1,4 +1,4 @@ -from ingestion.ingestion_pipeline_steps.data_parser_step import DataSourceParser +from ingestion.ingestion_pipeline_steps.data_parser_step import DataSourceParser # noqa from pipeline.pipeline import IngestionPipeline from sklearn.datasets import load_iris diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py index 2a65fb8..2718ef0 100644 --- a/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_interpreter_step.py @@ -1,9 +1,11 @@ -from ingestion.ingestion_pipeline_steps.interpreter_step import ColumnTypeInterpreter +from ingestion.ingestion_pipeline_steps.interpreter_step import ( # noqa + ColumnTypeInterpreter, +) from pipeline.pipeline import IngestionPipeline from sklearn.datasets import load_iris -def test_iris_okay(): +def test_iris_types_numeric(): pipeline = IngestionPipeline() pipeline.df = load_iris(return_X_y=True, as_frame=True)[0] pipeline.add(ColumnTypeInterpreter()) diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py new file mode 100644 index 0000000..acfc501 --- /dev/null +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py @@ -0,0 +1,34 @@ +from ingestion.ingestion_pipeline_steps.summary_stats_step import ( # noqa + SummaryStatistics, +) +from pipeline.pipeline import IngestionPipeline +from sklearn.datasets import load_iris + + +def test_iris_stats(): + pipeline = IngestionPipeline() + pipeline.df = load_iris(return_X_y=True, as_frame=True)[0] + pipeline.column_type_map = { + "sepal length (cm)": "numeric", + "sepal width (cm)": "numeric", + "petal length (cm)": "numeric", + "petal width (cm)": "numeric", + } + + pipeline.add(SummaryStatistics()) + pipeline.run() + + expected_stats = { + "min": 1, + "max": 6.9, + "25%": 1.6, + "50%": 4.35, + "75%": 5.1, + "mean": 3.758, + "std": 1.765, + } + + for stat in expected_stats: + assert expected_stats[stat] == round( + pipeline.summary_stats["petal length (cm)"][stat], 3 + ) diff --git a/shell/check.sh b/shell/check.sh index 075d633..a0ff0e4 100755 --- a/shell/check.sh +++ b/shell/check.sh @@ -15,7 +15,7 @@ pipenv run flake8 python/src/lazylearn/ pipenv run flake8 python/src/test/ echo "--- pytest ---" if [[ "$OSTYPE" == "msys" ]]; then - PYTHONPATH="./python/src/main;$PYTHONPATH" pipenv run pytest python/src/test/ + PYTHONPATH="./python/src/lazylearn;$PYTHONPATH" pipenv run pytest python/src/test/ else - PYTHONPATH=./python/src/main:$PYTHONPATH pipenv run pytest python/src/test/ + PYTHONPATH=./python/src/lazylearn:$PYTHONPATH pipenv run pytest python/src/test/ fi From d83f16701fd9a3d669e9cecc4d726243a6bc657a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 22:55:27 +0200 Subject: [PATCH 04/24] categorical check --- .../lazylearn/ingestion/ingestion_pipeline.py | 4 +- .../interpreter_step.py | 46 +++++++++++++++---- .../summary_stats_step.py | 5 +- .../test_summary_stats_step.py | 3 +- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline.py b/python/src/lazylearn/ingestion/ingestion_pipeline.py index 0cac1e9..ced64b5 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline.py @@ -2,7 +2,9 @@ from ingestion.ingestion_pipeline_steps.interpreter_step import ( # noqa ColumnTypeInterpreter, ) -from ingestion.ingestion_pipeline_steps.summary_stats_step import SummaryStatistics +from ingestion.ingestion_pipeline_steps.summary_stats_step import ( # noqa + SummaryStatistics, +) from pipeline.pipeline import IngestionPipeline diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index 8e40286..cbf91a8 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -23,18 +23,48 @@ def apply(self, pipeline: IngestionPipeline): pipeline.column_type_map = column_types def analyze_column(self, column: Series): - # is it numeric? - values = set(column) - types = set([type(value) for value in values]) + """ + + :param column: + :return: + """ + values = column.tolist() + types = [type(value) for value in values] + + if self.categorical_test(values): + return "categorical" - if self.numeric_test(types): + elif self.numeric_test(types): return "numeric" return "object" @staticmethod - def numeric_test(types: set): - return all([item == float or item == int for item in types]) + def categorical_test(values: list): + """ + Tests whether a column is of categorical type. + This is decided as the case if the number of unique values is + less than 5% of the total number of values in the column. + + :param values: list of values of any type + :return: True if attr is categorical, False otherwise + """ + n_total = len(values) + n_unique = len(set(values)) + percentage_unique = n_unique / n_total + + if percentage_unique < 0.05: + return True + return False + + @staticmethod + def numeric_test(types: list): + """ + + :param types: + :return: + """ + return all([item == float or item == int for item in set(types)]) @staticmethod def string_test(types: set): @@ -43,7 +73,3 @@ def string_test(types: set): @staticmethod def date_check(types: set): raise NotImplementedError - - @staticmethod - def categorical_test(values: set): - raise NotImplementedError diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py index 581327f..78ae085 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/summary_stats_step.py @@ -15,7 +15,8 @@ def apply(self, pipeline: IngestionPipeline): for column in pipeline.column_type_map if pipeline.column_type_map[column] == "numeric" ] - df = pipeline.df for attr in numeric_attributes: - pipeline.summary_stats[attr] = pipeline.df[attr].describe().to_dict() + pipeline.summary_stats[attr] = ( + pipeline.df[attr].describe().to_dict() + ) # noqa diff --git a/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py b/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py index acfc501..64c63f0 100644 --- a/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py +++ b/python/src/test/ingestion/ingestion_pipeline_steps/test_summary_stats_step.py @@ -1,3 +1,4 @@ +import pandas as pd from ingestion.ingestion_pipeline_steps.summary_stats_step import ( # noqa SummaryStatistics, ) @@ -7,7 +8,7 @@ def test_iris_stats(): pipeline = IngestionPipeline() - pipeline.df = load_iris(return_X_y=True, as_frame=True)[0] + pipeline.df = pd.concat(load_iris(return_X_y=True, as_frame=True), axis=1) pipeline.column_type_map = { "sepal length (cm)": "numeric", "sepal width (cm)": "numeric", From 1e107c8267f6b933ca5b99cc3e65c740ebf6045f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 22:57:31 +0200 Subject: [PATCH 05/24] docstrings --- .../ingestion_pipeline_steps/interpreter_step.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index cbf91a8..cbe341f 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -47,7 +47,7 @@ def categorical_test(values: list): less than 5% of the total number of values in the column. :param values: list of values of any type - :return: True if attr is categorical, False otherwise + :return: True if column is categorical, False otherwise """ n_total = len(values) n_unique = len(set(values)) @@ -60,9 +60,12 @@ def categorical_test(values: list): @staticmethod def numeric_test(types: list): """ + Tests whether a column is of numeric tyoe. + This is decided as the case if all values + of a column is either float or int. - :param types: - :return: + :param types: list of type objects + :return: True if column is numeric, False otherwise """ return all([item == float or item == int for item in set(types)]) From af1c39e378ba81f5603a03025b0cd611ebf2ef82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Fri, 5 May 2023 23:04:00 +0200 Subject: [PATCH 06/24] Update ingestion_pipeline.py --- python/src/lazylearn/ingestion/ingestion_pipeline.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline.py b/python/src/lazylearn/ingestion/ingestion_pipeline.py index ced64b5..e375c4c 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline.py @@ -13,6 +13,11 @@ def __init__(self): pass def run(self, data): + """ + + :param data: + :return: + """ pipeline = IngestionPipeline() pipeline.raw_data = data From 6bd4c7d950fcf719cb9aa0564717589b23885df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 15:06:35 +0200 Subject: [PATCH 07/24] prepare for categorical encoders --- python/src/lazylearn/preprocessing/__init__.py | 0 .../lazylearn/preprocessing/encoding/__init__.py | 0 .../lazylearn/preprocessing/encoding/encoders.py | 15 +++++++++++++++ 3 files changed, 15 insertions(+) create mode 100644 python/src/lazylearn/preprocessing/__init__.py create mode 100644 python/src/lazylearn/preprocessing/encoding/__init__.py create mode 100644 python/src/lazylearn/preprocessing/encoding/encoders.py diff --git a/python/src/lazylearn/preprocessing/__init__.py b/python/src/lazylearn/preprocessing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/src/lazylearn/preprocessing/encoding/__init__.py b/python/src/lazylearn/preprocessing/encoding/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python/src/lazylearn/preprocessing/encoding/encoders.py b/python/src/lazylearn/preprocessing/encoding/encoders.py new file mode 100644 index 0000000..a206bc0 --- /dev/null +++ b/python/src/lazylearn/preprocessing/encoding/encoders.py @@ -0,0 +1,15 @@ +class OrdinalConverter: + def __init__( + self, + max_cardinality: int = None, + min_support: int = 5, + other_category: bool = True, + method: str = "freq", + ): + self.card_max = max_cardinality + self.min_support = min_support + self.other_category = other_category + self.method = method + + def convert(self, df, col): + pass From 8a926a379947ee3eb4b095cba18bcb01835baeb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 15:06:47 +0200 Subject: [PATCH 08/24] Update .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 8212a6b..db5189b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ __pycache__/ # JetBrains .idea +# local +notebooks/ + # Distribution / packaging .Python build/ From ed1615c7fbe864ffbdc32f461227e717a0c1cb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 15:06:50 +0200 Subject: [PATCH 09/24] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index a8c2050..b0e8300 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # lazy-learn +0.0.1 --- @@ -10,3 +11,10 @@ The aim of lazy-learn is exactly that. Given a dataset, easy-learn will analyse ## Usage +Using lazy-learn revolves around the `LazyLearner` class. You can think of it as a kind of project, and it is the wrapper for any experiment within lazy-learn. + +## Installation + +``` +pip install lazy-learn +``` \ No newline at end of file From a14a2fd7d0903ff4c5f82d24a3c6489962ef89df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 15:06:54 +0200 Subject: [PATCH 10/24] Update lazylearn.py --- python/src/lazylearn/lazylearn.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/python/src/lazylearn/lazylearn.py b/python/src/lazylearn/lazylearn.py index 4ea5843..8b50dc6 100644 --- a/python/src/lazylearn/lazylearn.py +++ b/python/src/lazylearn/lazylearn.py @@ -1,7 +1,21 @@ +from ingestion.ingestion_pipeline import Ingestion + + class LazyLearner: def __init__(self): - self.project = None + self.dataset = None def create_project(self, data, target, task="infer"): # ingest data - pass + ingestion_response = Ingestion().run(data) + + # preprocess + + # set modelling configurations + + # train + + # eval + + + From 6d094b050a309c69c2fc27f19fec2c11745f8716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 19:41:53 +0200 Subject: [PATCH 11/24] little polish --- Pipfile | 1 + Pipfile.lock | 945 +++++++++++++++++- README.md | 2 +- doc/logo/grayscale_transparent.png | Bin 0 -> 59514 bytes doc/logo/original.png | Bin 0 -> 62685 bytes doc/logo/transparent.png | Bin 0 -> 66560 bytes .../interpreter_step.py | 16 +- python/src/lazylearn/models/models.py | 10 +- python/src/lazylearn/pipeline/pipeline.py | 2 +- 9 files changed, 968 insertions(+), 8 deletions(-) create mode 100644 doc/logo/grayscale_transparent.png create mode 100644 doc/logo/original.png create mode 100644 doc/logo/transparent.png diff --git a/Pipfile b/Pipfile index 3e1d6f7..c12ab05 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ loguru = "==0.6.*" pandas = "==1.5.*" scikit-learn = "*" tqdm = "*" +jupyter = "*" [dev-packages] black = "==23.*" diff --git a/Pipfile.lock b/Pipfile.lock index 229e9d0..aa905f5 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6b3413fb81182fed812795fdc90926d56c1db1b3aab7f14c629ed872f7b9b789" + "sha256": "a5dc7a8a6ec4078ce0d03261251f9452d7c5d70fca4102d184df59b32b1a8a1c" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,303 @@ ] }, "default": { + "anyio": { + "hashes": [ + "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421", + "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3" + ], + "markers": "python_full_version >= '3.6.2'", + "version": "==3.6.2" + }, + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "platform_system == 'Darwin'", + "version": "==0.1.3" + }, + "argon2-cffi": { + "hashes": [ + "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80", + "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b" + ], + "markers": "python_version >= '3.6'", + "version": "==21.3.0" + }, + "argon2-cffi-bindings": { + "hashes": [ + "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670", + "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f", + "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583", + "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194", + "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", + "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a", + "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", + "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5", + "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", + "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7", + "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", + "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", + "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", + "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", + "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", + "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", + "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d", + "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", + "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb", + "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", + "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351" + ], + "markers": "python_version >= '3.6'", + "version": "==21.2.0" + }, + "arrow": { + "hashes": [ + "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1", + "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2" + ], + "markers": "python_version >= '3.6'", + "version": "==1.2.3" + }, + "asttokens": { + "hashes": [ + "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", + "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" + ], + "version": "==2.2.1" + }, + "attrs": { + "hashes": [ + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1.0" + }, + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "beautifulsoup4": { + "hashes": [ + "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da", + "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a" + ], + "markers": "python_full_version >= '3.6.0'", + "version": "==4.12.2" + }, + "bleach": { + "hashes": [ + "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414", + "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4" + ], + "markers": "python_version >= '3.7'", + "version": "==6.0.0" + }, + "cffi": { + "hashes": [ + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" + }, + "comm": { + "hashes": [ + "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37", + "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.1.3" + }, + "debugpy": { + "hashes": [ + "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c", + "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d", + "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a", + "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07", + "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9", + "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267", + "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4", + "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad", + "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096", + "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b", + "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3", + "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2", + "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a", + "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45", + "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d", + "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e", + "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f", + "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc" + ], + "markers": "python_version >= '3.7'", + "version": "==1.6.7" + }, + "decorator": { + "hashes": [ + "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", + "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" + ], + "markers": "python_version >= '3.5'", + "version": "==5.1.1" + }, + "defusedxml": { + "hashes": [ + "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", + "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.7.1" + }, + "executing": { + "hashes": [ + "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", + "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" + ], + "version": "==1.2.0" + }, + "fastjsonschema": { + "hashes": [ + "sha256:04fbecc94300436f628517b05741b7ea009506ce8f946d40996567c669318490", + "sha256:4a30d6315a68c253cfa8f963b9697246315aa3db89f98b97235e345dedfb0b8e" + ], + "version": "==2.16.3" + }, + "fqdn": { + "hashes": [ + "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", + "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014" + ], + "version": "==1.5.1" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "ipykernel": { + "hashes": [ + "sha256:1ae6047c1277508933078163721bbb479c3e7292778a04b4bacf0874550977d6", + "sha256:302558b81f1bc22dc259fb2a0c5c7cf2f4c0bdb21b50484348f7bafe7fb71421" + ], + "markers": "python_version >= '3.8'", + "version": "==6.22.0" + }, + "ipython": { + "hashes": [ + "sha256:7dff3fad32b97f6488e02f87b970f309d082f758d7b7fc252e3b19ee0e432dbb", + "sha256:ffca270240fbd21b06b2974e14a86494d6d29290184e788275f55e0b55914926" + ], + "markers": "python_version >= '3.9'", + "version": "==8.13.2" + }, + "ipython-genutils": { + "hashes": [ + "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", + "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" + ], + "version": "==0.2.0" + }, + "ipywidgets": { + "hashes": [ + "sha256:a60bf8d2528997e05ac83fd19ea2fbe65f2e79fbe1b2b35779bdfc46c2941dcc", + "sha256:de7d779f2045d60de9f6c25f653fdae2dba57898e6a1284494b3ba20b6893bb8" + ], + "markers": "python_version >= '3.7'", + "version": "==8.0.6" + }, + "isoduration": { + "hashes": [ + "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", + "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042" + ], + "version": "==20.11.0" + }, + "jedi": { + "hashes": [ + "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", + "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" + ], + "markers": "python_version >= '3.6'", + "version": "==0.18.2" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, "joblib": { "hashes": [ "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385", @@ -24,6 +321,94 @@ "markers": "python_version >= '3.7'", "version": "==1.2.0" }, + "jsonpointer": { + "hashes": [ + "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9", + "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a" + ], + "version": "==2.3" + }, + "jsonschema": { + "hashes": [ + "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d", + "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6" + ], + "markers": "python_version >= '3.7'", + "version": "==4.17.3" + }, + "jupyter": { + "hashes": [ + "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7", + "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78", + "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "jupyter-client": { + "hashes": [ + "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0", + "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389" + ], + "markers": "python_version >= '3.8'", + "version": "==8.2.0" + }, + "jupyter-console": { + "hashes": [ + "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", + "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539" + ], + "markers": "python_version >= '3.7'", + "version": "==6.6.3" + }, + "jupyter-core": { + "hashes": [ + "sha256:6db75be0c83edbf1b7c9f91ec266a9a24ef945da630f3120e1a0046dc13713fc", + "sha256:d4201af84559bc8c70cead287e1ab94aeef3c512848dde077b7684b54d67730d" + ], + "markers": "python_version >= '3.8'", + "version": "==5.3.0" + }, + "jupyter-events": { + "hashes": [ + "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17", + "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3" + ], + "markers": "python_version >= '3.7'", + "version": "==0.6.3" + }, + "jupyter-server": { + "hashes": [ + "sha256:9fde612791f716fd34d610cd939704a9639643744751ba66e7ee8fdc9cead07e", + "sha256:e6bc1e9e96d7c55b9ce9699ff6cb9a910581fe7349e27c40389acb67632e24c0" + ], + "markers": "python_version >= '3.8'", + "version": "==2.5.0" + }, + "jupyter-server-terminals": { + "hashes": [ + "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d", + "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36" + ], + "markers": "python_version >= '3.8'", + "version": "==0.4.4" + }, + "jupyterlab-pygments": { + "hashes": [ + "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f", + "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d" + ], + "markers": "python_version >= '3.7'", + "version": "==0.2.2" + }, + "jupyterlab-widgets": { + "hashes": [ + "sha256:c3a50ed5bf528a0c7a869096503af54702f86dda1db469aee1c92dc0c01b43ca", + "sha256:c73f8370338ec19f1bec47254752d6505b03601cbd5a67e6a0b184532f73a459" + ], + "markers": "python_version >= '3.7'", + "version": "==3.0.7" + }, "loguru": { "hashes": [ "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c", @@ -32,6 +417,133 @@ "index": "pypi", "version": "==0.6.0" }, + "markupsafe": { + "hashes": [ + "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", + "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", + "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", + "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", + "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", + "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", + "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", + "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", + "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", + "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", + "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", + "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", + "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", + "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", + "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", + "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", + "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", + "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", + "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", + "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", + "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", + "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", + "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", + "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", + "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", + "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", + "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", + "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", + "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", + "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", + "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", + "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", + "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", + "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", + "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", + "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", + "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", + "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", + "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", + "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", + "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", + "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", + "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", + "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", + "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", + "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", + "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", + "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", + "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", + "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.2" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.6" + }, + "mistune": { + "hashes": [ + "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34", + "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8" + ], + "version": "==2.0.5" + }, + "nbclassic": { + "hashes": [ + "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3", + "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66" + ], + "markers": "python_version >= '3.7'", + "version": "==1.0.0" + }, + "nbclient": { + "hashes": [ + "sha256:c817c0768c5ff0d60e468e017613e6eae27b6fa31e43f905addd2d24df60c125", + "sha256:d447f0e5a4cfe79d462459aec1b3dc5c2e9152597262be8ee27f7d4c02566a0d" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==0.7.4" + }, + "nbconvert": { + "hashes": [ + "sha256:78685362b11d2e8058e70196fe83b09abed8df22d3e599cf271f4d39fdc48b9e", + "sha256:d2e95904666f1ff77d36105b9de4e0801726f93b862d5b28f69e93d99ad3b19c" + ], + "markers": "python_version >= '3.7'", + "version": "==7.3.1" + }, + "nbformat": { + "hashes": [ + "sha256:46dac64c781f1c34dfd8acba16547024110348f9fc7eab0f31981c2a3dc48d1f", + "sha256:d910082bd3e0bffcf07eabf3683ed7dda0727a326c446eeb2922abe102e65162" + ], + "markers": "python_version >= '3.7'", + "version": "==5.8.0" + }, + "nest-asyncio": { + "hashes": [ + "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8", + "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290" + ], + "markers": "python_version >= '3.5'", + "version": "==1.5.6" + }, + "notebook": { + "hashes": [ + "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e", + "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f" + ], + "markers": "python_version >= '3.7'", + "version": "==6.5.4" + }, + "notebook-shim": { + "hashes": [ + "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7", + "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9" + ], + "markers": "python_version >= '3.7'", + "version": "==0.2.3" + }, "numpy": { "hashes": [ "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", @@ -66,6 +578,14 @@ "markers": "python_version >= '3.10'", "version": "==1.24.3" }, + "packaging": { + "hashes": [ + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1" + }, "pandas": { "hashes": [ "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", @@ -99,6 +619,144 @@ "index": "pypi", "version": "==1.5.3" }, + "pandocfilters": { + "hashes": [ + "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38", + "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.5.0" + }, + "parso": { + "hashes": [ + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.3" + }, + "pexpect": { + "hashes": [ + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.8.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "platformdirs": { + "hashes": [ + "sha256:47692bc24c1958e8b0f13dd727307cff1db103fca36399f457da8e05f222fdc4", + "sha256:7954a68d0ba23558d753f73437c55f89027cf8f5108c19844d4b82e5af396335" + ], + "markers": "python_version >= '3.7'", + "version": "==3.5.0" + }, + "prometheus-client": { + "hashes": [ + "sha256:0836af6eb2c8f4fed712b2f279f6c0a8bbab29f9f4aa15276b91c7cb0d1616ab", + "sha256:a03e35b359f14dd1630898543e2120addfdeacd1a6069c1367ae90fd93ad3f48" + ], + "markers": "python_version >= '3.6'", + "version": "==0.16.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b", + "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.0.38" + }, + "psutil": { + "hashes": [ + "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d", + "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217", + "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4", + "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c", + "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f", + "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da", + "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4", + "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42", + "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5", + "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4", + "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9", + "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f", + "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30", + "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==5.9.5" + }, + "ptyprocess": { + "hashes": [ + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" + ], + "markers": "os_name != 'nt'", + "version": "==0.7.0" + }, + "pure-eval": { + "hashes": [ + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + ], + "version": "==0.2.2" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pygments": { + "hashes": [ + "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c", + "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.15.1" + }, + "pyrsistent": { + "hashes": [ + "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8", + "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440", + "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a", + "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c", + "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3", + "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393", + "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9", + "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da", + "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf", + "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64", + "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a", + "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3", + "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98", + "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2", + "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8", + "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf", + "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc", + "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7", + "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28", + "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2", + "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b", + "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a", + "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64", + "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19", + "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1", + "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9", + "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c" + ], + "markers": "python_version >= '3.7'", + "version": "==0.19.3" + }, "python-dateutil": { "hashes": [ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", @@ -107,6 +765,14 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.8.2" }, + "python-json-logger": { + "hashes": [ + "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c", + "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.7" + }, "pytz": { "hashes": [ "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", @@ -114,6 +780,167 @@ ], "version": "==2023.3" }, + "pyyaml": { + "hashes": [ + "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" + }, + "pyzmq": { + "hashes": [ + "sha256:032f5c8483c85bf9c9ca0593a11c7c749d734ce68d435e38c3f72e759b98b3c9", + "sha256:08bfcc21b5997a9be4fefa405341320d8e7f19b4d684fb9c0580255c5bd6d695", + "sha256:1a843d26a8da1b752c74bc019c7b20e6791ee813cd6877449e6a1415589d22ff", + "sha256:1f124cb73f1aa6654d31b183810febc8505fd0c597afa127c4f40076be4574e0", + "sha256:1f82906a2d8e4ee310f30487b165e7cc8ed09c009e4502da67178b03083c4ce0", + "sha256:21ec0bf4831988af43c8d66ba3ccd81af2c5e793e1bf6790eb2d50e27b3c570a", + "sha256:24683285cc6b7bf18ad37d75b9db0e0fefe58404e7001f1d82bf9e721806daa7", + "sha256:24abbfdbb75ac5039205e72d6c75f10fc39d925f2df8ff21ebc74179488ebfca", + "sha256:25e6873a70ad5aa31e4a7c41e5e8c709296edef4a92313e1cd5fc87bbd1874e2", + "sha256:269968f2a76c0513490aeb3ba0dc3c77b7c7a11daa894f9d1da88d4a0db09835", + "sha256:26b0358e8933990502f4513c991c9935b6c06af01787a36d133b7c39b1df37fa", + "sha256:28fdb9224a258134784a9cf009b59265a9dde79582fb750d4e88a6bcbc6fa3dc", + "sha256:2b9c9cc965cdf28381e36da525dcb89fc1571d9c54800fdcd73e3f73a2fc29bd", + "sha256:2da6813b7995b6b1d1307329c73d3e3be2fd2d78e19acfc4eff2e27262732388", + "sha256:3059a6a534c910e1d5d068df42f60d434f79e6cc6285aa469b384fa921f78cf8", + "sha256:312b3f0f066b4f1d17383aae509bacf833ccaf591184a1f3c7a1661c085063ae", + "sha256:34a6fddd159ff38aa9497b2e342a559f142ab365576284bc8f77cb3ead1f79c5", + "sha256:374b55516393bfd4d7a7daa6c3b36d6dd6a31ff9d2adad0838cd6a203125e714", + "sha256:38d9f78d69bcdeec0c11e0feb3bc70f36f9b8c44fc06e5d06d91dc0a21b453c7", + "sha256:4a31992a8f8d51663ebf79df0df6a04ffb905063083d682d4380ab8d2c67257c", + "sha256:4a4b4261eb8f9ed71f63b9eb0198dd7c934aa3b3972dac586d0ef502ba9ab08b", + "sha256:510d8e55b3a7cd13f8d3e9121edf0a8730b87d925d25298bace29a7e7bc82810", + "sha256:531e36d9fcd66f18de27434a25b51d137eb546931033f392e85674c7a7cea853", + "sha256:54a96cf77684a3a537b76acfa7237b1e79a8f8d14e7f00e0171a94b346c5293e", + "sha256:56a94ab1d12af982b55ca96c6853db6ac85505e820d9458ac76364c1998972f4", + "sha256:5c5fbb229e40a89a2fe73d0c1181916f31e30f253cb2d6d91bea7927c2e18413", + "sha256:5d496815074e3e3d183fe2c7fcea2109ad67b74084c254481f87b64e04e9a471", + "sha256:5eaeae038c68748082137d6896d5c4db7927e9349237ded08ee1bbd94f7361c9", + "sha256:62ec8d979f56c0053a92b2b6a10ff54b9ec8a4f187db2b6ec31ee3dd6d3ca6e2", + "sha256:64812f29d6eee565e129ca14b0c785744bfff679a4727137484101b34602d1a7", + "sha256:6526d097b75192f228c09d48420854d53dfbc7abbb41b0e26f363ccb26fbc177", + "sha256:659e62e1cbb063151c52f5b01a38e1df6b54feccfa3e2509d44c35ca6d7962ee", + "sha256:65c19a63b4a83ae45d62178b70223adeee5f12f3032726b897431b6553aa25af", + "sha256:67da1c213fbd208906ab3470cfff1ee0048838365135a9bddc7b40b11e6d6c89", + "sha256:6a821a506822fac55d2df2085a52530f68ab15ceed12d63539adc32bd4410f6e", + "sha256:6a979e59d2184a0c8f2ede4b0810cbdd86b64d99d9cc8a023929e40dce7c86cc", + "sha256:6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149", + "sha256:6fadc60970714d86eff27821f8fb01f8328dd36bebd496b0564a500fe4a9e354", + "sha256:715cff7644a80a7795953c11b067a75f16eb9fc695a5a53316891ebee7f3c9d5", + "sha256:77942243ff4d14d90c11b2afd8ee6c039b45a0be4e53fb6fa7f5e4fd0b59da39", + "sha256:7b504ae43d37e282301da586529e2ded8b36d4ee2cd5e6db4386724ddeaa6bbc", + "sha256:827bf60e749e78acb408a6c5af6688efbc9993e44ecc792b036ec2f4b4acf485", + "sha256:8280ada89010735a12b968ec3ea9a468ac2e04fddcc1cede59cb7f5178783b9c", + "sha256:83d822e8687621bed87404afc1c03d83fa2ce39733d54c2fd52d8829edb8a7ff", + "sha256:8560756318ec7c4c49d2c341012167e704b5a46d9034905853c3d1ade4f55bee", + "sha256:85762712b74c7bd18e340c3639d1bf2f23735a998d63f46bb6584d904b5e401d", + "sha256:88649b19ede1cab03b96b66c364cbbf17c953615cdbc844f7f6e5f14c5e5261c", + "sha256:9a2e5fe42dfe6b73ca120b97ac9f34bfa8414feb15e00e37415dbd51cf227ef6", + "sha256:9af0bb0277e92f41af35e991c242c9c71920169d6aa53ade7e444f338f4c8128", + "sha256:9bdc40efb679b9dcc39c06d25629e55581e4c4f7870a5e88db4f1c51ce25e20d", + "sha256:9e1d2f2d86fc75ed7f8845a992c5f6f1ab5db99747fb0d78b5e4046d041164d2", + "sha256:a2e92ff20ad5d13266bc999a29ed29a3b5b101c21fdf4b2cf420c09db9fb690e", + "sha256:a35960c8b2f63e4ef67fd6731851030df68e4b617a6715dd11b4b10312d19fef", + "sha256:a6f6ae12478fdc26a6d5fdb21f806b08fa5403cd02fd312e4cb5f72df078f96f", + "sha256:a9b5eeb5278a8a636bb0abdd9ff5076bcbb836cd2302565df53ff1fa7d106d54", + "sha256:ab046e9cb902d1f62c9cc0eca055b1d11108bdc271caf7c2171487298f229b56", + "sha256:ab2c056ac503f25a63f6c8c6771373e2a711b98b304614151dfb552d3d6c81f6", + "sha256:abbce982a17c88d2312ec2cf7673985d444f1beaac6e8189424e0a0e0448dbb3", + "sha256:ac178e666c097c8d3deb5097b58cd1316092fc43e8ef5b5fdb259b51da7e7315", + "sha256:ad761cfbe477236802a7ab2c080d268c95e784fe30cafa7e055aacd1ca877eb0", + "sha256:affec1470351178e892121b3414c8ef7803269f207bf9bef85f9a6dd11cde264", + "sha256:b164cc3c8acb3d102e311f2eb6f3c305865ecb377e56adc015cb51f721f1dda6", + "sha256:b48616a09d7df9dbae2f45a0256eee7b794b903ddc6d8657a9948669b345f220", + "sha256:b491998ef886662c1f3d49ea2198055a9a536ddf7430b051b21054f2a5831800", + "sha256:b733076ff46e7db5504c5e7284f04a9852c63214c74688bdb6135808531755a3", + "sha256:c8fedc3ccd62c6b77dfe6f43802057a803a411ee96f14e946f4a76ec4ed0e117", + "sha256:cb1f69a0a2a2b1aae8412979dd6293cc6bcddd4439bf07e4758d864ddb112354", + "sha256:cca8524b61c0eaaa3505382dc9b9a3bc8165f1d6c010fdd1452c224225a26689", + "sha256:cfb9f7eae02d3ac42fbedad30006b7407c984a0eb4189a1322241a20944d61e5", + "sha256:d4427b4a136e3b7f85516c76dd2e0756c22eec4026afb76ca1397152b0ca8145", + "sha256:d488c5c8630f7e782e800869f82744c3aca4aca62c63232e5d8c490d3d66956a", + "sha256:dd771a440effa1c36d3523bc6ba4e54ff5d2e54b4adcc1e060d8f3ca3721d228", + "sha256:ed15e3a2c3c2398e6ae5ce86d6a31b452dfd6ad4cd5d312596b30929c4b6e182", + "sha256:edbbf06cc2719889470a8d2bf5072bb00f423e12de0eb9ffec946c2c9748e149", + "sha256:eef2a0b880ab40aca5a878933376cb6c1ec483fba72f7f34e015c0f675c90b20", + "sha256:f7c8b8368e84381ae7c57f1f5283b029c888504aaf4949c32e6e6fb256ec9bf0", + "sha256:ffc71111433bd6ec8607a37b9211f4ef42e3d3b271c6d76c813669834764b248" + ], + "markers": "python_version >= '3.6'", + "version": "==25.0.2" + }, + "qtconsole": { + "hashes": [ + "sha256:35fd6e87b1f6d1fd41801b07e69339f8982e76afd4fa8ef35595bc6036717189", + "sha256:5e4082a86a201796b2a5cfd4298352d22b158b51b57736531824715fc2a979dd" + ], + "markers": "python_version >= '3.7'", + "version": "==5.4.3" + }, + "qtpy": { + "hashes": [ + "sha256:5193d20e0b16e4d9d3bc2c642d04d9f4e2c892590bd1b9c92bfe38a95d5a2e12", + "sha256:a8c74982d6d172ce124d80cafd39653df78989683f760f2281ba91a6e7b9de8b" + ], + "markers": "python_version >= '3.7'", + "version": "==2.3.1" + }, + "rfc3339-validator": { + "hashes": [ + "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", + "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.1.4" + }, + "rfc3986-validator": { + "hashes": [ + "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", + "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.1.1" + }, "scikit-learn": { "hashes": [ "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", @@ -168,6 +995,14 @@ "markers": "python_version < '3.12' and python_version >= '3.8'", "version": "==1.10.1" }, + "send2trash": { + "hashes": [ + "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679", + "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.8.2" + }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -176,6 +1011,37 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.16.0" }, + "sniffio": { + "hashes": [ + "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", + "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.0" + }, + "soupsieve": { + "hashes": [ + "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8", + "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea" + ], + "markers": "python_version >= '3.7'", + "version": "==2.4.1" + }, + "stack-data": { + "hashes": [ + "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", + "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + ], + "version": "==0.6.2" + }, + "terminado": { + "hashes": [ + "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333", + "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae" + ], + "markers": "python_version >= '3.7'", + "version": "==0.17.1" + }, "threadpoolctl": { "hashes": [ "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b", @@ -184,6 +1050,31 @@ "markers": "python_version >= '3.6'", "version": "==3.1.0" }, + "tinycss2": { + "hashes": [ + "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847", + "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627" + ], + "markers": "python_version >= '3.7'", + "version": "==1.2.1" + }, + "tornado": { + "hashes": [ + "sha256:1285f0691143f7ab97150831455d4db17a267b59649f7bd9700282cba3d5e771", + "sha256:3455133b9ff262fd0a75630af0a8ee13564f25fb4fd3d9ce239b8a7d3d027bf8", + "sha256:5e2f49ad371595957c50e42dd7e5c14d64a6843a3cf27352b69c706d1b5918af", + "sha256:81c17e0cc396908a5e25dc8e9c5e4936e6dfd544c9290be48bd054c79bcad51e", + "sha256:90f569a35a8ec19bde53aa596952071f445da678ec8596af763b9b9ce07605e6", + "sha256:9661aa8bc0e9d83d757cd95b6f6d1ece8ca9fd1ccdd34db2de381e25bf818233", + "sha256:a27a1cfa9997923f80bdd962b3aab048ac486ad8cfb2f237964f8ab7f7eb824b", + "sha256:b4e7b956f9b5e6f9feb643ea04f07e7c6b49301e03e0023eedb01fa8cf52f579", + "sha256:d7117f3c7ba5d05813b17a1f04efc8e108a1b811ccfddd9134cc68553c414864", + "sha256:db181eb3df8738613ff0a26f49e1b394aade05034b01200a63e9662f347d4415", + "sha256:ffdce65a281fd708da5a9def3bfb8f364766847fa7ed806821a69094c9629e8a" + ], + "markers": "python_version >= '3.8'", + "version": "==6.3.1" + }, "tqdm": { "hashes": [ "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5", @@ -191,6 +1082,58 @@ ], "index": "pypi", "version": "==4.65.0" + }, + "traitlets": { + "hashes": [ + "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", + "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" + ], + "markers": "python_version >= '3.7'", + "version": "==5.9.0" + }, + "uri-template": { + "hashes": [ + "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06", + "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db" + ], + "version": "==1.2.0" + }, + "wcwidth": { + "hashes": [ + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + ], + "version": "==0.2.6" + }, + "webcolors": { + "hashes": [ + "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf", + "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a" + ], + "version": "==1.13" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "websocket-client": { + "hashes": [ + "sha256:3f09e6d8230892547132177f575a4e3e73cfdf06526e20cc02aa1c3b47184d40", + "sha256:cdf5877568b7e83aa7cf2244ab56a3213de587bbe0ce9d8b9600fc77b455d89e" + ], + "markers": "python_version >= '3.7'", + "version": "==1.5.1" + }, + "widgetsnbextension": { + "hashes": [ + "sha256:be3228a73bbab189a16be2d4a3cd89ecbd4e31948bfdc64edac17dcdee3cd99c", + "sha256:ea67c17a7cd4ae358f8f46c3b304c40698bc0423732e3f273321ee141232c8be" + ], + "markers": "python_version >= '3.7'", + "version": "==4.0.7" } }, "develop": { diff --git a/README.md b/README.md index b0e8300..4b84fb8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# lazy-learn +![lazy-learn logo](docs/logo/transparent.png) 0.0.1 --- diff --git a/doc/logo/grayscale_transparent.png b/doc/logo/grayscale_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef7a10e51bf25413e4c8f160ceeffccb4d5955c GIT binary patch literal 59514 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 OdvNp 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 literal 0 HcmV?d00001 diff --git a/doc/logo/original.png b/doc/logo/original.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec6c9e1fd5a25516593860a41a8c012c324983d GIT binary patch literal 62685 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 literal 0 HcmV?d00001 diff --git a/doc/logo/transparent.png b/doc/logo/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf50a015546ce0f46cf424d9e3a474d236b27c9 GIT binary patch literal 66560 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 literal 0 HcmV?d00001 diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index cbe341f..e6ea257 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -1,3 +1,4 @@ +import pandas as pd from pandas import Series from pipeline.pipeline import IngestionPipeline from tqdm import tqdm @@ -12,6 +13,7 @@ def apply(self, pipeline: IngestionPipeline): :param pipeline: parent IngestionPipeline :return: """ + self.df = pipeline.df columns = pipeline.df.columns column_types = {} @@ -37,7 +39,10 @@ def analyze_column(self, column: Series): elif self.numeric_test(types): return "numeric" - return "object" + elif self.datetime_check(column): + return "datetime" + else: + return "object" @staticmethod def categorical_test(values: list): @@ -73,6 +78,9 @@ def numeric_test(types: list): def string_test(types: set): raise NotImplementedError - @staticmethod - def date_check(types: set): - raise NotImplementedError + def datetime_check(self, column: Series): + try: + self.df[column.name] = pd.to_datetime(column) + return True + except: + return False diff --git a/python/src/lazylearn/models/models.py b/python/src/lazylearn/models/models.py index e992c72..d826534 100644 --- a/python/src/lazylearn/models/models.py +++ b/python/src/lazylearn/models/models.py @@ -1,7 +1,15 @@ +from pandas import DataFrame + + class Dataset: - def __init__(self): + def __init__(self, df: DataFrame, column_type_map: dict): self.name = None self.description = None + self.df = df + self.column_type_map = column_type_map + + def save(self): + raise NotImplementedError class Model: diff --git a/python/src/lazylearn/pipeline/pipeline.py b/python/src/lazylearn/pipeline/pipeline.py index c4ccaff..e7256f2 100644 --- a/python/src/lazylearn/pipeline/pipeline.py +++ b/python/src/lazylearn/pipeline/pipeline.py @@ -31,4 +31,4 @@ def __init__(self): self.summary_stats: dict = {} def response(self): - return Dataset + return Dataset(df=self.df, column_type_map=self.column_type_map) From 19625b477b558e763279bdc926d4a2399e707cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 19:42:37 +0200 Subject: [PATCH 12/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b84fb8..e38af4e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![lazy-learn logo](docs/logo/transparent.png) +![lazy-learn logo](doc/logo/transparent.png) 0.0.1 --- From 440fd57d74b47c391a0065c073fc7ceac0a3fbea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 19:46:50 +0200 Subject: [PATCH 13/24] Create transparent_small.png --- doc/logo/transparent_small.png | Bin 0 -> 71882 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/logo/transparent_small.png diff --git a/doc/logo/transparent_small.png b/doc/logo/transparent_small.png new file mode 100644 index 0000000000000000000000000000000000000000..76b6bbaeec8d41fa2f7629c0230d9094ab0ef027 GIT binary patch literal 71882 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 Date: Sun, 7 May 2023 19:47:26 +0200 Subject: [PATCH 14/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e38af4e..648f9fa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![lazy-learn logo](doc/logo/transparent.png) +![lazy-learn logo](doc/logo/transparent_small.png) 0.0.1 --- From 4bde29eb275724c7af64dea9a918dacbaf722836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 19:53:44 +0200 Subject: [PATCH 15/24] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 648f9fa..f25862e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -![lazy-learn logo](doc/logo/transparent_small.png) + + 0.0.1 --- From cb2c16ba00e4efec3df032455c736a756d82bef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 20:44:58 +0200 Subject: [PATCH 16/24] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f25862e..a86a11b 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,16 @@ - -0.0.1 + ---- +0.0.1 -## About -lazy-learn is a high-level Python interface for automated machine learning (AutoML). While there are many AutoML libraries available each typically solves a niche area of the overall ML pipeline without providing a covering and approachable end-to-end system. +**lazy-learn** is a high-level Python interface for automated machine learning (AutoML). While there are many AutoML libraries available each typically solves a niche area of the overall ML pipeline without providing a covering and approachable end-to-end system. The aim of lazy-learn is exactly that. Given a dataset, easy-learn will analyse types and distributions of attributes, preprocess, feature-engineer and ultimately train models to be used for further evaluation or inference. +--- + + ## Usage Using lazy-learn revolves around the `LazyLearner` class. You can think of it as a kind of project, and it is the wrapper for any experiment within lazy-learn. From 4574f760f3bc8504de1b7b4a2d7b653b0c6341ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 20:58:24 +0200 Subject: [PATCH 17/24] Update README.md --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a86a11b..09c2bfd 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,23 @@ Using lazy-learn revolves around the `LazyLearner` class. You can think of it as ## Installation +--- + +### Dependencies + +lazy-learn requires: + +- pandas +- scikit-learn + +--- + +### User Installation ``` pip install lazy-learn -``` \ No newline at end of file +``` + +## Help and Support +### Documentation + +### Citation \ No newline at end of file From bf0a4946436ff435dcb8ac228aeb5b58b590dfcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 20:59:22 +0200 Subject: [PATCH 18/24] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 09c2bfd..5a2fb77 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ Using lazy-learn revolves around the `LazyLearner` class. You can think of it as ## Installation ---- - ### Dependencies lazy-learn requires: From ac5e02fcddf8849d9ef8bc96edf75214ffb6c049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 20:59:46 +0200 Subject: [PATCH 19/24] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 5a2fb77..2dd2c6b 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,6 @@ The aim of lazy-learn is exactly that. Given a dataset, easy-learn will analyse types and distributions of attributes, preprocess, feature-engineer and ultimately train models to be used for further evaluation or inference. ---- - - ## Usage Using lazy-learn revolves around the `LazyLearner` class. You can think of it as a kind of project, and it is the wrapper for any experiment within lazy-learn. From 6eb0cf7c4f344c75b9c32688178bc90c254b6782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 21:00:32 +0200 Subject: [PATCH 20/24] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 2dd2c6b..5003c95 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ -0.0.1 - - **lazy-learn** is a high-level Python interface for automated machine learning (AutoML). While there are many AutoML libraries available each typically solves a niche area of the overall ML pipeline without providing a covering and approachable end-to-end system. The aim of lazy-learn is exactly that. Given a dataset, easy-learn will analyse types and distributions of attributes, preprocess, feature-engineer and ultimately train models to be used for further evaluation or inference. From 0a7082be6205301cd79e15a3a222e8ffc3ea293f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 21:00:59 +0200 Subject: [PATCH 21/24] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 5003c95..c634eb5 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,6 @@ lazy-learn requires: - pandas - scikit-learn ---- - ### User Installation ``` pip install lazy-learn From 4b2b631152e8f6eee70c61450b8fedb4eaa9eb9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 21:11:09 +0200 Subject: [PATCH 22/24] Update pyproject.toml --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 020cac1..425f362 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "0.0.1" authors = [ { name="Frederik P. Høngaard", email="mail@frederikhoengaard.com" }, ] -description = "A small example package" +description = "lazy-learn is a high-level Python interface for automated machine learning (AutoML) for the lazy data scientist. While there are many AutoML libraries available each typically solves a niche area of the overall ML pipeline without providing a covering and approachable end-to-end system. lazy-learn aims at providing the most approachable and fastest access to building baseline models." readme = "README.md" requires-python = ">=3.7" classifiers = [ @@ -18,4 +18,4 @@ classifiers = [ ] [project.urls] -"Homepage" = "https://github.com/pypa/sampleproject" \ No newline at end of file +"Homepage" = "https://github.com/frederikhoengaard/lazy-learn" \ No newline at end of file From 57677e5e4d8f1b54162200255866c5a00ed445d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 21:28:02 +0200 Subject: [PATCH 23/24] linting --- .../ingestion/ingestion_pipeline_steps/interpreter_step.py | 2 +- python/src/lazylearn/lazylearn.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py index e6ea257..10f9434 100644 --- a/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py +++ b/python/src/lazylearn/ingestion/ingestion_pipeline_steps/interpreter_step.py @@ -82,5 +82,5 @@ def datetime_check(self, column: Series): try: self.df[column.name] = pd.to_datetime(column) return True - except: + except Exception as e: # noqa return False diff --git a/python/src/lazylearn/lazylearn.py b/python/src/lazylearn/lazylearn.py index 8b50dc6..a6d620a 100644 --- a/python/src/lazylearn/lazylearn.py +++ b/python/src/lazylearn/lazylearn.py @@ -7,7 +7,7 @@ def __init__(self): def create_project(self, data, target, task="infer"): # ingest data - ingestion_response = Ingestion().run(data) + ingestion_response = Ingestion().run(data) # noqa # preprocess @@ -16,6 +16,3 @@ def create_project(self, data, target, task="infer"): # train # eval - - - From 9feb2e6ea2e6696a91eb9fee9f34757f64ba0a88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederik=20Peter=20H=C3=B8ngaard?= Date: Sun, 7 May 2023 21:30:15 +0200 Subject: [PATCH 24/24] Update verify.yaml --- .github/workflows/verify.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index c5c196c..b2ad3ca 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -4,7 +4,7 @@ on: pull_request: env: - PYTHONPATH: ./python/src/main/ + PYTHONPATH: ./python/src/lazylearn/ jobs: testing: @@ -54,12 +54,12 @@ jobs: - name: black run: | - python -m black --check python/src/main/ + python -m black --check python/src/lazylearn/ - name: isort run: | - python -m isort python/src/main/ --multi-line 3 --profile black --check + python -m isort python/src/lazylearn/ --multi-line 3 --profile black --check - name: flake8 run: | - python -m flake8 python/src/main/ + python -m flake8 python/src/lazylearn/