howso-engine 69.0.0__tar.gz → 69.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {howso_engine-69.0.0 → howso_engine-69.0.1}/LICENSE-3RD-PARTY.txt +35 -35
- {howso_engine-69.0.0/howso_engine.egg-info → howso_engine-69.0.1}/PKG-INFO +2 -2
- howso_engine-69.0.1/howso/howso-engine/howso.caml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/howso-engine/migrations/migrations.caml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/howso-engine/version.json +4 -4
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/abstract_data.py +4 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/base.py +58 -11
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/infer_feature_attributes.py +5 -2
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/pandas.py +33 -1
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/time_series.py +13 -4
- {howso_engine-69.0.0 → howso_engine-69.0.1/howso_engine.egg-info}/PKG-INFO +2 -2
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/requires.txt +1 -1
- {howso_engine-69.0.0 → howso_engine-69.0.1}/pyproject.toml +1 -1
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.11-dev.txt +16 -14
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.11.txt +4 -4
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.12-dev.txt +16 -14
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.12.txt +4 -4
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.13-dev.txt +16 -14
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.13.txt +4 -4
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.14-dev.txt +16 -14
- {howso_engine-69.0.0 → howso_engine-69.0.1}/requirements-3.14.txt +4 -4
- howso_engine-69.0.1/version.json +5 -0
- howso_engine-69.0.0/howso/howso-engine/howso.caml +0 -0
- howso_engine-69.0.0/version.json +0 -5
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.coveragerc +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.flake8 +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/CODEOWNERS +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/templates/version_summary.md +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/workflows/build-pr.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/workflows/build-release.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/workflows/build.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/workflows/rebuild-requirements.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.github/workflows/version-update.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.gitignore +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.gitmodules +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/.pylintrc +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/CONTRIBUTING.md +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/LICENSE.txt +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/MANIFEST.in +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/Makefile +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/README.md +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/bin/build.sh +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-mt-debug-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-mt-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-mt-noavx-traces-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-mt-traces-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-st-debug-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-st-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/latest-st-traces-howso.yml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/powershell/Download-Tzdata.ps1 +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/config/powershell/Helper-Functions.ps1 +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/hatch.toml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/__main__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/api.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/base.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/cache.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/client.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/configuration.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/exceptions.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/feature_flags.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/pandas/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/pandas/client.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/protocols.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/aggregate_reaction.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/base.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/group_reaction.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/project.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/reaction.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/session.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/trainee.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/schemas/version.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/client/typing.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/direct/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/direct/_utilities.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/direct/client.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/direct/schemas/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/direct/schemas/trainee.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/engine/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/engine/client.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/engine/project.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/engine/session.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/engine/trainee.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/scikit/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/scikit/scikit.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/decorators.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/fanout_features.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/protocols.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/relational.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/serializers.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/suggestions.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/warnings.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/features.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/__init__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/__main__.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/_constants.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/_helpers.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/_output.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/_probes.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/_types.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/checks_cpu.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/checks_engine.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/checks_environment.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/checks_optional.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/main.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/installation_verification/registry.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/internals.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/json_wrapper.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/locale.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/monitors.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/posix.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/progress.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/random.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/reaction.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/testing.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/tokenizing.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/utilities.py +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/SOURCES.txt +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/dependency_links.txt +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/entry_points.txt +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/scm_file_list.json +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/howso_engine.egg-info/top_level.txt +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/pyrightconfig.json +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/ruff.toml +0 -0
- {howso_engine-69.0.0 → howso_engine-69.0.1}/setup.cfg +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Faker
|
|
2
|
-
40.
|
|
2
|
+
40.44.0
|
|
3
3
|
MIT License
|
|
4
4
|
joke2k
|
|
5
5
|
https://github.com/joke2k/faker
|
|
6
6
|
Faker is a Python package that generates fake data for you.
|
|
7
|
-
/home/runner/.pyenv/versions/3.14.
|
|
7
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/faker-40.44.0.dist-info/licenses/LICENSE.txt
|
|
8
8
|
Copyright (c) 2012 Daniele Faraglia
|
|
9
9
|
|
|
10
10
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -32,7 +32,7 @@ MIT License
|
|
|
32
32
|
Kirill Simonov
|
|
33
33
|
https://pyyaml.org/
|
|
34
34
|
YAML parser and emitter for Python
|
|
35
|
-
/home/runner/.pyenv/versions/3.14.
|
|
35
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pyyaml-6.0.3.dist-info/licenses/LICENSE
|
|
36
36
|
Copyright (c) 2017-2021 Ingy döt Net
|
|
37
37
|
Copyright (c) 2006-2016 Kirill Simonov
|
|
38
38
|
|
|
@@ -61,7 +61,7 @@ BSD-2-Clause
|
|
|
61
61
|
Georg Brandl <georg@python.org>
|
|
62
62
|
https://pygments.org
|
|
63
63
|
Pygments is a syntax highlighting package written in Python.
|
|
64
|
-
/home/runner/.pyenv/versions/3.14.
|
|
64
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pygments-2.21.0.dist-info/licenses/LICENSE
|
|
65
65
|
Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
|
|
66
66
|
All rights reserved.
|
|
67
67
|
|
|
@@ -95,7 +95,7 @@ MIT
|
|
|
95
95
|
Filipe Laíns <lains@riseup.net>, Bernát Gábor <gaborjbernat@gmail.com>, layday <layday@protonmail.com>, Henry Schreiner <henryschreineriii@gmail.com>
|
|
96
96
|
https://build.pypa.io
|
|
97
97
|
A simple, correct Python build frontend
|
|
98
|
-
/home/runner/.pyenv/versions/3.14.
|
|
98
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/build-1.6.1.dist-info/licenses/LICENSE
|
|
99
99
|
Copyright © 2019 Filipe Laíns <filipe.lains@gmail.com>
|
|
100
100
|
|
|
101
101
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
@@ -124,7 +124,7 @@ Mozilla Public License 2.0 (MPL 2.0)
|
|
|
124
124
|
Kenneth Reitz
|
|
125
125
|
https://github.com/certifi/python-certifi
|
|
126
126
|
Python package for providing Mozilla's CA Bundle.
|
|
127
|
-
/home/runner/.pyenv/versions/3.14.
|
|
127
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/certifi-2026.10.23.dist-info/licenses/LICENSE
|
|
128
128
|
This package contains a modified version of ca-bundle.crt:
|
|
129
129
|
|
|
130
130
|
ca-bundle.crt -- Bundle of CA Root Certificates
|
|
@@ -153,7 +153,7 @@ MIT
|
|
|
153
153
|
"Ahmed R. TAHRI" <tahri.ahmed@proton.me>
|
|
154
154
|
https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md
|
|
155
155
|
The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet.
|
|
156
|
-
/home/runner/.pyenv/versions/3.14.
|
|
156
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/charset_normalizer-3.5.2.dist-info/licenses/LICENSE
|
|
157
157
|
MIT License
|
|
158
158
|
|
|
159
159
|
Copyright (c) 2025 TAHRI Ahmed R.
|
|
@@ -183,7 +183,7 @@ BSD-3-Clause
|
|
|
183
183
|
UNKNOWN
|
|
184
184
|
https://github.com/pallets/click/
|
|
185
185
|
Composable command line interface toolkit
|
|
186
|
-
/home/runner/.pyenv/versions/3.14.
|
|
186
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/click-8.5.0.dist-info/licenses/LICENSE.txt
|
|
187
187
|
Copyright 2014 Pallets
|
|
188
188
|
|
|
189
189
|
Redistribution and use in source and binary forms, with or without
|
|
@@ -220,7 +220,7 @@ BSD License
|
|
|
220
220
|
The cloudpickle developer team
|
|
221
221
|
https://github.com/cloudpipe/cloudpickle
|
|
222
222
|
Pickler class to extend the standard pickle.Pickler functionality
|
|
223
|
-
/home/runner/.pyenv/versions/3.14.
|
|
223
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/cloudpickle-3.1.2.dist-info/licenses/LICENSE
|
|
224
224
|
This module was extracted from the `cloud` package, developed by
|
|
225
225
|
PiCloud, Inc.
|
|
226
226
|
|
|
@@ -261,7 +261,7 @@ MIT
|
|
|
261
261
|
Jason Moiron <jmoiron@jmoiron.net>
|
|
262
262
|
https://github.com/python-humanize/humanize
|
|
263
263
|
Python humanize utilities
|
|
264
|
-
/home/runner/.pyenv/versions/3.14.
|
|
264
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/humanize-4.16.0.dist-info/licenses/LICENCE
|
|
265
265
|
Copyright (c) 2010-2020 Jason Moiron and Contributors
|
|
266
266
|
|
|
267
267
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
@@ -290,7 +290,7 @@ BSD-3-Clause
|
|
|
290
290
|
Kim Davies <kim+pypi@gumleaf.org>
|
|
291
291
|
https://github.com/kjd/idna
|
|
292
292
|
Internationalized Domain Names in Applications (IDNA)
|
|
293
|
-
/home/runner/.pyenv/versions/3.14.
|
|
293
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/idna-3.20.dist-info/licenses/LICENSE.md
|
|
294
294
|
BSD 3-Clause License
|
|
295
295
|
|
|
296
296
|
Copyright (c) 2013-2026, Kim Davies and contributors.
|
|
@@ -330,7 +330,7 @@ BSD-3-Clause
|
|
|
330
330
|
Gael Varoquaux <gael.varoquaux@normalesup.org>
|
|
331
331
|
https://joblib.readthedocs.io
|
|
332
332
|
Lightweight pipelining with Python functions
|
|
333
|
-
/home/runner/.pyenv/versions/3.14.
|
|
333
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/joblib-1.6.0.dist-info/licenses/LICENSE.txt
|
|
334
334
|
BSD 3-Clause License
|
|
335
335
|
|
|
336
336
|
Copyright (c) 2008-2021, The joblib developers.
|
|
@@ -368,7 +368,7 @@ MIT License
|
|
|
368
368
|
Chris Sewell <chrisj_sewell@hotmail.com>
|
|
369
369
|
https://github.com/executablebooks/markdown-it-py
|
|
370
370
|
Python port of markdown-it. Markdown parsing, done right!
|
|
371
|
-
/home/runner/.pyenv/versions/3.14.
|
|
371
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/markdown_it_py-4.2.0.dist-info/licenses/LICENSE
|
|
372
372
|
MIT License
|
|
373
373
|
|
|
374
374
|
Copyright (c) 2020 ExecutableBookProject
|
|
@@ -398,7 +398,7 @@ MIT License
|
|
|
398
398
|
Taneli Hukkinen <hukkin@users.noreply.github.com>
|
|
399
399
|
https://github.com/executablebooks/mdurl
|
|
400
400
|
Markdown URL utilities
|
|
401
|
-
/home/runner/.pyenv/versions/3.14.
|
|
401
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/mdurl-0.1.2.dist-info/LICENSE
|
|
402
402
|
Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
|
|
403
403
|
Copyright (c) 2021 Taneli Hukkinen
|
|
404
404
|
|
|
@@ -453,7 +453,7 @@ MIT License
|
|
|
453
453
|
Hajime Senuma <hajime.senuma@gmail.com>
|
|
454
454
|
https://pypi.org/project/mmh3/
|
|
455
455
|
Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions.
|
|
456
|
-
/home/runner/.pyenv/versions/3.14.
|
|
456
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/mmh3-5.3.1.dist-info/licenses/LICENSE
|
|
457
457
|
MIT License
|
|
458
458
|
|
|
459
459
|
Copyright (c) 2011-2026 Hajime Senuma
|
|
@@ -482,7 +482,7 @@ BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0
|
|
|
482
482
|
Travis E. Oliphant et al.
|
|
483
483
|
https://numpy.org
|
|
484
484
|
Fundamental package for array computing in Python
|
|
485
|
-
/home/runner/.pyenv/versions/3.14.
|
|
485
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/numpy-2.4.6.dist-info/licenses/LICENSE.txt
|
|
486
486
|
Copyright (c) 2005-2025, NumPy Developers.
|
|
487
487
|
All rights reserved.
|
|
488
488
|
|
|
@@ -1426,7 +1426,7 @@ Apache-2.0 OR BSD-2-Clause
|
|
|
1426
1426
|
Donald Stufft <donald@stufft.io>
|
|
1427
1427
|
https://github.com/pypa/packaging
|
|
1428
1428
|
Core utilities for Python packages
|
|
1429
|
-
/home/runner/.pyenv/versions/3.14.
|
|
1429
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/packaging-26.3.dist-info/licenses/LICENSE
|
|
1430
1430
|
This software is made available under the terms of *either* of the licenses
|
|
1431
1431
|
found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made
|
|
1432
1432
|
under the terms of *both* these licenses.
|
|
@@ -1438,7 +1438,7 @@ BSD License
|
|
|
1438
1438
|
The Pandas Development Team <pandas-dev@python.org>
|
|
1439
1439
|
https://pandas.pydata.org
|
|
1440
1440
|
Powerful data structures for data analysis, time series, and statistics
|
|
1441
|
-
/home/runner/.pyenv/versions/3.14.
|
|
1441
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pandas-2.3.3.dist-info/LICENSE
|
|
1442
1442
|
BSD 3-Clause License
|
|
1443
1443
|
|
|
1444
1444
|
Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
|
|
@@ -2696,7 +2696,7 @@ BSD License
|
|
|
2696
2696
|
Vincent Driessen <me@nvie.com>
|
|
2697
2697
|
https://github.com/jazzband/pip-tools/
|
|
2698
2698
|
pip-tools keeps your pinned dependencies fresh.
|
|
2699
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2699
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pip_tools-7.4.1.dist-info/LICENSE
|
|
2700
2700
|
BSD 3-Clause License
|
|
2701
2701
|
|
|
2702
2702
|
Copyright (c). All rights reserved.
|
|
@@ -2733,7 +2733,7 @@ BSD-3-Clause
|
|
|
2733
2733
|
Giampaolo Rodola
|
|
2734
2734
|
https://github.com/giampaolo/psutil
|
|
2735
2735
|
Cross-platform lib for process and system monitoring.
|
|
2736
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2736
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/psutil-7.2.2.dist-info/LICENSE
|
|
2737
2737
|
BSD 3-Clause License
|
|
2738
2738
|
|
|
2739
2739
|
Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola
|
|
@@ -2771,7 +2771,7 @@ MIT
|
|
|
2771
2771
|
Thomas Kluyver <thomas@kluyver.me.uk>
|
|
2772
2772
|
https://github.com/pypa/pyproject-hooks
|
|
2773
2773
|
Wrappers to call pyproject.toml-based build backend hooks.
|
|
2774
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2774
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pyproject_hooks-1.3.3.dist-info/licenses/LICENSE
|
|
2775
2775
|
The MIT License (MIT)
|
|
2776
2776
|
|
|
2777
2777
|
Copyright (c) 2017 Thomas Kluyver
|
|
@@ -2801,7 +2801,7 @@ Apache Software License; BSD License
|
|
|
2801
2801
|
Gustavo Niemeyer
|
|
2802
2802
|
https://github.com/dateutil/dateutil
|
|
2803
2803
|
Extensions to the standard Python datetime module
|
|
2804
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2804
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/python_dateutil-3.0.0.dist-info/licenses/LICENSE
|
|
2805
2805
|
Copyright 2017- Paul Ganssle <paul@ganssle.io>
|
|
2806
2806
|
Copyright 2017- dateutil contributors (see AUTHORS file)
|
|
2807
2807
|
|
|
@@ -2858,12 +2858,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
2858
2858
|
The above BSD License Applies to all code, even that also covered by Apache 2.0.
|
|
2859
2859
|
|
|
2860
2860
|
pytz
|
|
2861
|
-
2026.
|
|
2861
|
+
2026.6
|
|
2862
2862
|
MIT License
|
|
2863
2863
|
Stuart Bishop
|
|
2864
2864
|
http://pythonhosted.org/pytz
|
|
2865
2865
|
World timezone definitions, modern and historical
|
|
2866
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2866
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/pytz-2026.6.dist-info/LICENSE.txt
|
|
2867
2867
|
Copyright (c) 2003-2019 Stuart Bishop <stuart@stuartbishop.net>
|
|
2868
2868
|
|
|
2869
2869
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
@@ -2891,7 +2891,7 @@ Apache-2.0 AND CNRI-Python
|
|
|
2891
2891
|
Matthew Barnett <regex@mrabarnett.plus.com>
|
|
2892
2892
|
https://github.com/mrabarnett/mrab-regex
|
|
2893
2893
|
Alternative regular expression module, to replace re.
|
|
2894
|
-
/home/runner/.pyenv/versions/3.14.
|
|
2894
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/regex-2026.9.29.dist-info/licenses/LICENSE.txt
|
|
2895
2895
|
This work was derived from the 're' module of CPython 2.6 and CPython 3.1,
|
|
2896
2896
|
copyright (c) 1998-2001 by Secret Labs AB and licensed under CNRI's Python 1.6
|
|
2897
2897
|
license.
|
|
@@ -3108,7 +3108,7 @@ Apache Software License
|
|
|
3108
3108
|
Kenneth Reitz <me@kennethreitz.org>
|
|
3109
3109
|
https://github.com/psf/requests
|
|
3110
3110
|
Python HTTP for Humans.
|
|
3111
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3111
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/requests-2.34.2.dist-info/licenses/LICENSE
|
|
3112
3112
|
|
|
3113
3113
|
Apache License
|
|
3114
3114
|
Version 2.0, January 2004
|
|
@@ -3292,7 +3292,7 @@ MIT License
|
|
|
3292
3292
|
Will McGugan
|
|
3293
3293
|
https://github.com/Textualize/rich
|
|
3294
3294
|
Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
|
|
3295
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3295
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/rich-15.0.0.dist-info/licenses/LICENSE
|
|
3296
3296
|
Copyright (c) 2020 Will McGugan
|
|
3297
3297
|
|
|
3298
3298
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -3320,7 +3320,7 @@ MIT License
|
|
|
3320
3320
|
UNKNOWN
|
|
3321
3321
|
https://github.com/hplt-project/sacremoses
|
|
3322
3322
|
SacreMoses
|
|
3323
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3323
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/sacremoses-0.2.0.dist-info/licenses/LICENSE
|
|
3324
3324
|
MIT License
|
|
3325
3325
|
|
|
3326
3326
|
Copyright (c) 2020 alvations
|
|
@@ -3350,7 +3350,7 @@ BSD License
|
|
|
3350
3350
|
Raphaël Barrois
|
|
3351
3351
|
https://github.com/rbarrois/python-semanticversion
|
|
3352
3352
|
A library implementing the 'SemVer' scheme.
|
|
3353
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3353
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/semantic_version-2.10.0.dist-info/LICENSE
|
|
3354
3354
|
Copyright (c) The python-semanticversion project
|
|
3355
3355
|
All rights reserved.
|
|
3356
3356
|
|
|
@@ -3381,7 +3381,7 @@ MIT License
|
|
|
3381
3381
|
Benjamin Peterson
|
|
3382
3382
|
https://github.com/benjaminp/six
|
|
3383
3383
|
Python 2 and 3 compatibility utilities
|
|
3384
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3384
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/six-1.17.0.dist-info/LICENSE
|
|
3385
3385
|
Copyright (c) 2010-2024 Benjamin Peterson
|
|
3386
3386
|
|
|
3387
3387
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
@@ -3408,7 +3408,7 @@ MPL-2.0 AND MIT
|
|
|
3408
3408
|
UNKNOWN
|
|
3409
3409
|
https://tqdm.github.io
|
|
3410
3410
|
Fast, Extensible Progress Meter
|
|
3411
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3411
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/tqdm-4.70.1.dist-info/licenses/LICENCE
|
|
3412
3412
|
`tqdm` is a product of collaborative work.
|
|
3413
3413
|
Unless otherwise stated, all authors (see commit logs) retain copyright
|
|
3414
3414
|
for their respective work, and release the work under the MIT licence
|
|
@@ -3466,7 +3466,7 @@ PSF-2.0
|
|
|
3466
3466
|
"Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Michael Lee" <levkivskyi@gmail.com>
|
|
3467
3467
|
https://github.com/python/typing_extensions
|
|
3468
3468
|
Backported and Experimental Type Hints for Python 3.9+
|
|
3469
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3469
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/typing_extensions-4.16.0.dist-info/licenses/LICENSE
|
|
3470
3470
|
A. HISTORY OF THE SOFTWARE
|
|
3471
3471
|
==========================
|
|
3472
3472
|
|
|
@@ -3749,12 +3749,12 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
3749
3749
|
|
|
3750
3750
|
|
|
3751
3751
|
tzdata
|
|
3752
|
-
2026.
|
|
3752
|
+
2026.6
|
|
3753
3753
|
Apache-2.0
|
|
3754
3754
|
Python Software Foundation
|
|
3755
3755
|
https://github.com/python/tzdata
|
|
3756
3756
|
Provider of IANA time zone data
|
|
3757
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3757
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/tzdata-2026.6.dist-info/licenses/LICENSE
|
|
3758
3758
|
Apache Software License 2.0
|
|
3759
3759
|
|
|
3760
3760
|
Copyright (c) 2020, Paul Ganssle (Google)
|
|
@@ -3779,7 +3779,7 @@ MIT
|
|
|
3779
3779
|
Andrey Petrov <andrey.petrov@shazow.net>
|
|
3780
3780
|
https://github.com/urllib3/urllib3/blob/main/CHANGES.rst
|
|
3781
3781
|
HTTP library with thread-safe connection pooling, file post, and more.
|
|
3782
|
-
/home/runner/.pyenv/versions/3.14.
|
|
3782
|
+
/home/runner/.pyenv/versions/3.14.10/lib/python3.14/site-packages/urllib3-2.8.0.dist-info/licenses/LICENSE.txt
|
|
3783
3783
|
MIT License
|
|
3784
3784
|
|
|
3785
3785
|
Copyright (c) 2008-2020 Andrey Petrov and contributors.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: howso-engine
|
|
3
|
-
Version: 69.0.
|
|
3
|
+
Version: 69.0.1
|
|
4
4
|
Summary: The Howso Engine™ is a natively and fully explainable ML engine, serving as an alternative to black box AI neural networks.
|
|
5
5
|
Author: Howso Incorporated
|
|
6
6
|
Author-email: support@howso.com
|
|
@@ -705,7 +705,7 @@ Requires-Dist: sacremoses
|
|
|
705
705
|
Requires-Dist: semantic-version~=2.0
|
|
706
706
|
Requires-Dist: typing-extensions~=4.9
|
|
707
707
|
Requires-Dist: urllib3>=2.6.3
|
|
708
|
-
Requires-Dist: amalgam-lang==37.
|
|
708
|
+
Requires-Dist: amalgam-lang==37.1.0
|
|
709
709
|
Provides-Extra: dev
|
|
710
710
|
Requires-Dist: dill~=0.0; extra == "dev"
|
|
711
711
|
Requires-Dist: flake8-docstrings; extra == "dev"
|
|
Binary file
|
|
Binary file
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "122.0.
|
|
2
|
+
"version": "122.0.1",
|
|
3
3
|
"dependencies": {
|
|
4
|
-
"amalgam": "83.0.
|
|
4
|
+
"amalgam": "83.0.7"
|
|
5
5
|
},
|
|
6
6
|
"display_title": "",
|
|
7
7
|
"build_date": "",
|
|
8
|
-
"sha": "
|
|
9
|
-
"url": "https://github.com/howsoai/howso-engine/releases/tag/122.0.
|
|
8
|
+
"sha": "28140dd81cafb88742c93b10fc66af7332b747a1",
|
|
9
|
+
"url": "https://github.com/howsoai/howso-engine/releases/tag/122.0.1"
|
|
10
10
|
}
|
{howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/abstract_data.py
RENAMED
|
@@ -291,6 +291,10 @@ class InferFeatureAttributesAbstractData(InferFeatureAttributesBase):
|
|
|
291
291
|
if isinstance(random_value, str):
|
|
292
292
|
random_value = random_value.strip()
|
|
293
293
|
|
|
294
|
+
# Explicitly declared as not a date/time; skip date/time detection
|
|
295
|
+
if getattr(self, 'datetime_feature_formats', {}).get(feature_name) is False:
|
|
296
|
+
return FeatureType.STRING, {}
|
|
297
|
+
|
|
294
298
|
max_samples = max(5, self._get_num_cases(feature_name))
|
|
295
299
|
num_samples = 1
|
|
296
300
|
while num_samples <= max_samples:
|
|
@@ -13,7 +13,6 @@ import platform
|
|
|
13
13
|
from numbers import Real
|
|
14
14
|
from typing import Any, cast, Literal, Self, TYPE_CHECKING
|
|
15
15
|
import warnings
|
|
16
|
-
from zoneinfo import ZoneInfo
|
|
17
16
|
|
|
18
17
|
from dateutil.parser import isoparse, parse as dt_parse
|
|
19
18
|
import numpy as np
|
|
@@ -1299,6 +1298,15 @@ class InferFeatureAttributesBase(ABC):
|
|
|
1299
1298
|
|
|
1300
1299
|
typing_info = typing_info or dict()
|
|
1301
1300
|
|
|
1301
|
+
if (
|
|
1302
|
+
self.datetime_feature_formats.get(feature_name) is False
|
|
1303
|
+
and feature_type in (FeatureType.DATETIME, FeatureType.DATE, FeatureType.TIME)
|
|
1304
|
+
):
|
|
1305
|
+
warnings.warn(
|
|
1306
|
+
f'The feature "{feature_name}" is declared as not a date/time in '
|
|
1307
|
+
'`datetime_feature_formats`, but its data is already formatted as '
|
|
1308
|
+
f'{feature_type.value} objects. This declaration will be ignored.')
|
|
1309
|
+
|
|
1302
1310
|
# EXPLICITLY DECLARED ORDINALS
|
|
1303
1311
|
if feature_name in ordinal_feature_values:
|
|
1304
1312
|
if feature_name not in pre_processed_ordinals:
|
|
@@ -1620,8 +1628,11 @@ class InferFeatureAttributesBase(ABC):
|
|
|
1620
1628
|
def _infer_string_attributes(self, feature_name: str) -> dict:
|
|
1621
1629
|
"""Get inferred attributes for the given string column."""
|
|
1622
1630
|
# Column has arbitrary string values, first check if they
|
|
1623
|
-
# are ISO8601 datetimes.
|
|
1624
|
-
if
|
|
1631
|
+
# are ISO8601 datetimes, unless explicitly declared as not a date/time.
|
|
1632
|
+
if (
|
|
1633
|
+
self.datetime_feature_formats.get(feature_name) is not False
|
|
1634
|
+
and self._is_iso8601_datetime_column(feature_name)
|
|
1635
|
+
):
|
|
1625
1636
|
# if datetime, determine the iso8601 format it's using
|
|
1626
1637
|
if first_non_null := self._get_first_non_null(feature_name):
|
|
1627
1638
|
fmt = determine_iso_format(first_non_null, feature_name)
|
|
@@ -1880,16 +1891,52 @@ class InferFeatureAttributesBase(ABC):
|
|
|
1880
1891
|
dt_format[-1] == "Z", # Last char of 'Z' is ISO8601 identifier for UTC
|
|
1881
1892
|
self.default_time_zone is not None]):
|
|
1882
1893
|
self.warnings_collector.triage(IFAWarningEmitterType.MISSING_TZ_FEATURES, feature_name)
|
|
1883
|
-
elif "%z" in dt_format:
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
# Some datetime objects might have a time zone attribute not visible as a string
|
|
1887
|
-
if getattr(rand_val, "tzinfo", None) is not None and isinstance(rand_val.tzinfo, ZoneInfo):
|
|
1888
|
-
continue
|
|
1889
|
-
# Warn in case of UTC offset -- could lead to unexpected results due to time zone
|
|
1890
|
-
# differences
|
|
1894
|
+
elif "%z" in dt_format and not self._has_dst_safe_time_zones(feature_name, dt_format):
|
|
1895
|
+
# Warn in case of nonzero UTC offsets -- could lead to unexpected results due to
|
|
1896
|
+
# daylight savings time
|
|
1891
1897
|
self.warnings_collector.triage(IFAWarningEmitterType.UTC_OFFSET, feature_name)
|
|
1892
1898
|
|
|
1899
|
+
def _has_dst_safe_time_zones(self, feature_name: str, dt_format: str) -> bool:
|
|
1900
|
+
"""
|
|
1901
|
+
Return whether a sample of a feature's values is unaffected by daylight savings time.
|
|
1902
|
+
|
|
1903
|
+
A value is safe when it is a datetime carrying a named time zone, or
|
|
1904
|
+
when its UTC offset is zero, as no daylight savings transition applies
|
|
1905
|
+
to UTC. A string that cannot be parsed with `dt_format` is not safe.
|
|
1906
|
+
|
|
1907
|
+
Parameters
|
|
1908
|
+
----------
|
|
1909
|
+
feature_name : str
|
|
1910
|
+
The name of the feature to sample.
|
|
1911
|
+
dt_format : str
|
|
1912
|
+
The date time format of the feature's string values.
|
|
1913
|
+
|
|
1914
|
+
Returns
|
|
1915
|
+
-------
|
|
1916
|
+
bool
|
|
1917
|
+
True if every sampled value is safe.
|
|
1918
|
+
"""
|
|
1919
|
+
# Filtering nulls out of a large column is costly, so a plain sample is
|
|
1920
|
+
# tried first and the filtered one only for a sparse column.
|
|
1921
|
+
sample = [v for v in self._get_random_value(feature_name, count=30) or [] if not pd.isna(v)]
|
|
1922
|
+
if not sample:
|
|
1923
|
+
sample = self._get_random_value(feature_name, no_nulls=True, count=30) or []
|
|
1924
|
+
for raw_value in sample:
|
|
1925
|
+
value = raw_value
|
|
1926
|
+
if isinstance(raw_value, str):
|
|
1927
|
+
try:
|
|
1928
|
+
value = datetime.datetime.strptime(raw_value, dt_format) # noqa: DTZ007 -- dt_format has %z
|
|
1929
|
+
except ValueError:
|
|
1930
|
+
return False
|
|
1931
|
+
if not isinstance(value, datetime.datetime) or value.tzinfo is None:
|
|
1932
|
+
return False
|
|
1933
|
+
# `zoneinfo` zones expose `key` and `pytz` zones expose `zone`
|
|
1934
|
+
if getattr(value.tzinfo, "key", None) or getattr(value.tzinfo, "zone", None):
|
|
1935
|
+
continue
|
|
1936
|
+
if value.utcoffset() != datetime.timedelta(0):
|
|
1937
|
+
return False
|
|
1938
|
+
return True
|
|
1939
|
+
|
|
1893
1940
|
@staticmethod
|
|
1894
1941
|
def _is_datetime(string: str) -> bool:
|
|
1895
1942
|
"""
|
|
@@ -33,7 +33,7 @@ class InferOptions(TypedDict, total=False):
|
|
|
33
33
|
"""Infer feature attributes options."""
|
|
34
34
|
|
|
35
35
|
attempt_infer_extended_nominals: bool
|
|
36
|
-
datetime_feature_formats: dict[str, str | tuple[str, str]]
|
|
36
|
+
datetime_feature_formats: dict[str, str | tuple[str, str] | Literal[False]]
|
|
37
37
|
default_time_zone: str | None
|
|
38
38
|
dependent_features: dict[str, list[str]]
|
|
39
39
|
enable_suggestions: bool
|
|
@@ -131,7 +131,9 @@ def infer_feature_attributes(
|
|
|
131
131
|
must have locales specified. If locale is omitted, the default system locale is used.
|
|
132
132
|
The keys are the feature name, and the values are a tuple of date/time format and locale
|
|
133
133
|
string. Time-only feature formats are expected to adhere to the format codes used in
|
|
134
|
-
strftime().
|
|
134
|
+
strftime(). A value of ``False`` declares a feature as not a date/time, so date-like
|
|
135
|
+
strings are kept as strings rather than inferred as date, time or datetime features.
|
|
136
|
+
``False`` has no effect on features whose data are already date/time objects.
|
|
135
137
|
|
|
136
138
|
Examples::
|
|
137
139
|
|
|
@@ -139,6 +141,7 @@ def infer_feature_attributes(
|
|
|
139
141
|
"start_date": ("%Y-%m-%d %A %H.%M.%S", "es_ES"),
|
|
140
142
|
"end_date": "%Y-%m-%d",
|
|
141
143
|
"start_time": "%H:%M:%S %p",
|
|
144
|
+
"version_label": False,
|
|
142
145
|
}
|
|
143
146
|
|
|
144
147
|
default_time_zone : str, default None
|
|
@@ -227,10 +227,13 @@ class InferFeatureAttributesDataFrame(InferFeatureAttributesBase):
|
|
|
227
227
|
# Timestamp objects are instances of datetime.date/time, but only return 'DATE' here if
|
|
228
228
|
# it's *not* a Timestamp as there may be tzinfo we should inspect.
|
|
229
229
|
return FeatureType.DATE, {}
|
|
230
|
-
# Date-only Timestamp objects in Pandas will have a default time of midnight
|
|
230
|
+
# Date-only Timestamp objects in Pandas will have a default time of midnight.
|
|
231
|
+
# Confirm that holds across the column rather than for just this one value,
|
|
232
|
+
# so a timed column that happens to start at midnight is not demoted to a date.
|
|
231
233
|
if (isinstance(first_non_null, pd.Timestamp)
|
|
232
234
|
and first_non_null.time() == datetime.time(0, 0, 0)
|
|
233
235
|
and (not hasattr(dtype, "tz") or not dtype.tz)
|
|
236
|
+
and self._is_datetime_date_only(feature_name)
|
|
234
237
|
):
|
|
235
238
|
return FeatureType.DATE, {}
|
|
236
239
|
# Datetime feature (with timezone info)
|
|
@@ -238,6 +241,11 @@ class InferFeatureAttributesDataFrame(InferFeatureAttributesBase):
|
|
|
238
241
|
# If using a named time zone capture it, otherwise
|
|
239
242
|
# rely on the offset in the iso8601 format
|
|
240
243
|
tz_name = getattr(dtype.tz, 'key', None) or getattr(dtype.tz, 'zone', None)
|
|
244
|
+
if tz_name is None and dtype.tz is datetime.timezone.utc:
|
|
245
|
+
# Stdlib UTC exposes neither `key` nor `zone` the way
|
|
246
|
+
# `zoneinfo` and `pytz` zones do, but it is still a
|
|
247
|
+
# named zone, unlike fixed offsets.
|
|
248
|
+
tz_name = 'UTC'
|
|
241
249
|
if tz_name:
|
|
242
250
|
typing_info['timezone'] = tz_name
|
|
243
251
|
# Datetime feature with no timezone info
|
|
@@ -263,6 +271,9 @@ class InferFeatureAttributesDataFrame(InferFeatureAttributesBase):
|
|
|
263
271
|
# DataFrames may use 'object' dtype for strings, detect
|
|
264
272
|
# string columns by checking the type of the data
|
|
265
273
|
if isinstance(first_non_null, str):
|
|
274
|
+
# Explicitly declared as not a date/time; skip date/time detection
|
|
275
|
+
if getattr(self, 'datetime_feature_formats', {}).get(feature_name) is False:
|
|
276
|
+
return FeatureType.STRING, {}
|
|
266
277
|
max_samples = max(5, self._get_num_cases(feature_name))
|
|
267
278
|
num_samples = 1
|
|
268
279
|
while num_samples <= max_samples:
|
|
@@ -355,6 +366,27 @@ class InferFeatureAttributesDataFrame(InferFeatureAttributesBase):
|
|
|
355
366
|
except Exception: # noqa: Deliberately broad
|
|
356
367
|
return False
|
|
357
368
|
|
|
369
|
+
def _is_datetime_date_only(self, feature_name: str, max_rows: int = 1000) -> bool:
|
|
370
|
+
"""
|
|
371
|
+
Return whether every sampled value of a datetime feature falls at midnight.
|
|
372
|
+
|
|
373
|
+
A date-only column in a datetime dtype carries a midnight time
|
|
374
|
+
component on every row.
|
|
375
|
+
"""
|
|
376
|
+
column = self.data[feature_name]
|
|
377
|
+
seen = 0
|
|
378
|
+
for start in range(0, len(column), max_rows):
|
|
379
|
+
chunk = column.iloc[start:start + max_rows].dropna()
|
|
380
|
+
if chunk.empty:
|
|
381
|
+
continue
|
|
382
|
+
if (chunk != chunk.dt.normalize()).any():
|
|
383
|
+
return False
|
|
384
|
+
seen += len(chunk)
|
|
385
|
+
if seen >= max_rows:
|
|
386
|
+
break
|
|
387
|
+
# No non-null values observed: nothing indicates a time component.
|
|
388
|
+
return True
|
|
389
|
+
|
|
358
390
|
def _get_first_non_null(self, feature_name: str) -> t.Any | None:
|
|
359
391
|
index = self.data[feature_name].first_valid_index()
|
|
360
392
|
if index is None:
|
{howso_engine-69.0.0 → howso_engine-69.0.1}/howso/utilities/feature_attributes/time_series.py
RENAMED
|
@@ -180,7 +180,8 @@ def _infer_delta_min_max_from_chunk( # noqa: C901
|
|
|
180
180
|
if isinstance(dt_format, Collection) and not isinstance(dt_format, str) and len(dt_format) == 2:
|
|
181
181
|
dt_format, _ = dt_format
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
# `False` declares the feature as not a date/time
|
|
184
|
+
if dt_format is not None and dt_format is not False:
|
|
184
185
|
datetime_columns[f_name] = dt_format
|
|
185
186
|
|
|
186
187
|
# Batch convert datetime columns
|
|
@@ -426,13 +427,16 @@ class InferFeatureAttributesTimeSeries(ABC):
|
|
|
426
427
|
features are assumed to be in ISO8601 format. Non-English datetimes
|
|
427
428
|
must have locales specified. If locale is omitted, the default
|
|
428
429
|
system locale is used. The keys are the feature name, and the values
|
|
429
|
-
are a tuple of date time format and locale string
|
|
430
|
+
are a tuple of date time format and locale string. A value of ``False``
|
|
431
|
+
declares a feature as not a date/time, so date-like strings are kept as
|
|
432
|
+
strings; the time feature cannot be declared this way:
|
|
430
433
|
|
|
431
434
|
Examples::
|
|
432
435
|
|
|
433
436
|
{
|
|
434
437
|
"start_date" : ("%Y-%m-%d %A %H.%M.%S", "es_ES"),
|
|
435
|
-
"end_date" : "%Y-%m-%d"
|
|
438
|
+
"end_date" : "%Y-%m-%d",
|
|
439
|
+
"version_label" : False
|
|
436
440
|
}
|
|
437
441
|
|
|
438
442
|
default_time_zone : str, default None
|
|
@@ -790,6 +794,10 @@ class InferFeatureAttributesTimeSeries(ABC):
|
|
|
790
794
|
if self.time_feature_name in time_invariant_features:
|
|
791
795
|
raise ValueError("time_feature_name cannot be in the time_invariant_features list.")
|
|
792
796
|
|
|
797
|
+
if datetime_feature_formats and datetime_feature_formats.get(self.time_feature_name) is False:
|
|
798
|
+
raise ValueError("time_feature_name cannot be declared as not a date/time in "
|
|
799
|
+
"`datetime_feature_formats`.")
|
|
800
|
+
|
|
793
801
|
# ID features are time-invariant.
|
|
794
802
|
for id_feature in id_feature_names:
|
|
795
803
|
if id_feature not in time_invariant_features:
|
|
@@ -1202,7 +1210,8 @@ class IFATimeSeriesADC(InferFeatureAttributesTimeSeries):
|
|
|
1202
1210
|
if isinstance(dt_format, Collection) and not isinstance(dt_format, str) and len(dt_format) == 2:
|
|
1203
1211
|
dt_format, _ = dt_format
|
|
1204
1212
|
|
|
1205
|
-
|
|
1213
|
+
# `False` declares the feature as not a date/time
|
|
1214
|
+
if dt_format is not None and dt_format is not False:
|
|
1206
1215
|
spark_format = _python_to_java_datetime_format(dt_format)
|
|
1207
1216
|
spark_df = spark_df.withColumn(
|
|
1208
1217
|
f"{f_name}_epoch", F.unix_timestamp(F.col(f_name), spark_format).cast("double")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: howso-engine
|
|
3
|
-
Version: 69.0.
|
|
3
|
+
Version: 69.0.1
|
|
4
4
|
Summary: The Howso Engine™ is a natively and fully explainable ML engine, serving as an alternative to black box AI neural networks.
|
|
5
5
|
Author: Howso Incorporated
|
|
6
6
|
Author-email: support@howso.com
|
|
@@ -705,7 +705,7 @@ Requires-Dist: sacremoses
|
|
|
705
705
|
Requires-Dist: semantic-version~=2.0
|
|
706
706
|
Requires-Dist: typing-extensions~=4.9
|
|
707
707
|
Requires-Dist: urllib3>=2.6.3
|
|
708
|
-
Requires-Dist: amalgam-lang==37.
|
|
708
|
+
Requires-Dist: amalgam-lang==37.1.0
|
|
709
709
|
Provides-Extra: dev
|
|
710
710
|
Requires-Dist: dill~=0.0; extra == "dev"
|
|
711
711
|
Requires-Dist: flake8-docstrings; extra == "dev"
|
|
@@ -48,7 +48,7 @@ dependencies = [
|
|
|
48
48
|
"semantic-version~=2.0",
|
|
49
49
|
"typing-extensions~=4.9",
|
|
50
50
|
"urllib3>=2.6.3",
|
|
51
|
-
"amalgam-lang==37.
|
|
51
|
+
"amalgam-lang==37.1.0", # Use exact since Engine is exact in version.json
|
|
52
52
|
]
|
|
53
53
|
|
|
54
54
|
[project.optional-dependencies]
|