howso-engine 60.2.1__tar.gz → 60.2.2__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.
Files changed (109) hide show
  1. {howso_engine-60.2.1/howso_engine.egg-info → howso_engine-60.2.2}/PKG-INFO +1 -1
  2. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/abstract_data.py +14 -2
  3. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/base.py +5 -1
  4. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/pandas.py +10 -4
  5. {howso_engine-60.2.1 → howso_engine-60.2.2/howso_engine.egg-info}/PKG-INFO +1 -1
  6. {howso_engine-60.2.1 → howso_engine-60.2.2}/.coveragerc +0 -0
  7. {howso_engine-60.2.1 → howso_engine-60.2.2}/.flake8 +0 -0
  8. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/CODEOWNERS +0 -0
  9. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/templates/version_summary.md +0 -0
  10. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/workflows/build-pr.yml +0 -0
  11. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/workflows/build-release.yml +0 -0
  12. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/workflows/build.yml +0 -0
  13. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/workflows/rebuild-requirements.yml +0 -0
  14. {howso_engine-60.2.1 → howso_engine-60.2.2}/.github/workflows/version-update.yml +0 -0
  15. {howso_engine-60.2.1 → howso_engine-60.2.2}/.gitignore +0 -0
  16. {howso_engine-60.2.1 → howso_engine-60.2.2}/.gitmodules +0 -0
  17. {howso_engine-60.2.1 → howso_engine-60.2.2}/.pylintrc +0 -0
  18. {howso_engine-60.2.1 → howso_engine-60.2.2}/CONTRIBUTING.md +0 -0
  19. {howso_engine-60.2.1 → howso_engine-60.2.2}/LICENSE-3RD-PARTY.txt +0 -0
  20. {howso_engine-60.2.1 → howso_engine-60.2.2}/LICENSE.txt +0 -0
  21. {howso_engine-60.2.1 → howso_engine-60.2.2}/MANIFEST.in +0 -0
  22. {howso_engine-60.2.1 → howso_engine-60.2.2}/Makefile +0 -0
  23. {howso_engine-60.2.1 → howso_engine-60.2.2}/README.md +0 -0
  24. {howso_engine-60.2.1 → howso_engine-60.2.2}/bin/build.sh +0 -0
  25. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-mt-debug-howso.yml +0 -0
  26. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-mt-howso.yml +0 -0
  27. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-mt-noavx-traces-howso.yml +0 -0
  28. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-mt-traces-howso.yml +0 -0
  29. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-st-debug-howso.yml +0 -0
  30. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-st-howso.yml +0 -0
  31. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/latest-st-traces-howso.yml +0 -0
  32. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/powershell/Download-Tzdata.ps1 +0 -0
  33. {howso_engine-60.2.1 → howso_engine-60.2.2}/config/powershell/Helper-Functions.ps1 +0 -0
  34. {howso_engine-60.2.1 → howso_engine-60.2.2}/hatch.toml +0 -0
  35. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/__main__.py +0 -0
  36. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/__init__.py +0 -0
  37. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/api.py +0 -0
  38. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/base.py +0 -0
  39. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/cache.py +0 -0
  40. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/client.py +0 -0
  41. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/configuration.py +0 -0
  42. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/exceptions.py +0 -0
  43. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/feature_flags.py +0 -0
  44. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/pandas/__init__.py +0 -0
  45. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/pandas/client.py +0 -0
  46. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/protocols.py +0 -0
  47. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/__init__.py +0 -0
  48. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/aggregate_reaction.py +0 -0
  49. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/base.py +0 -0
  50. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/group_reaction.py +0 -0
  51. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/project.py +0 -0
  52. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/reaction.py +0 -0
  53. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/session.py +0 -0
  54. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/trainee.py +0 -0
  55. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/schemas/version.py +0 -0
  56. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/client/typing.py +0 -0
  57. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/direct/__init__.py +0 -0
  58. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/direct/_utilities.py +0 -0
  59. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/direct/client.py +0 -0
  60. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/direct/schemas/__init__.py +0 -0
  61. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/direct/schemas/trainee.py +0 -0
  62. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/engine/__init__.py +0 -0
  63. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/engine/client.py +0 -0
  64. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/engine/project.py +0 -0
  65. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/engine/session.py +0 -0
  66. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/engine/trainee.py +0 -0
  67. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/howso-engine/howso.caml +0 -0
  68. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/howso-engine/migrations/migrations.caml +0 -0
  69. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/howso-engine/version.json +0 -0
  70. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/scikit/__init__.py +0 -0
  71. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/scikit/scikit.py +0 -0
  72. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/__init__.py +0 -0
  73. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/decorators.py +0 -0
  74. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/__init__.py +0 -0
  75. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/infer_feature_attributes.py +0 -0
  76. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/protocols.py +0 -0
  77. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/relational.py +0 -0
  78. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/serializers.py +0 -0
  79. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/suggestions.py +0 -0
  80. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/time_series.py +0 -0
  81. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/feature_attributes/warnings.py +0 -0
  82. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/features.py +0 -0
  83. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/installation_verification.py +0 -0
  84. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/internals.py +0 -0
  85. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/json_wrapper.py +0 -0
  86. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/locale.py +0 -0
  87. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/monitors.py +0 -0
  88. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/posix.py +0 -0
  89. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/random.py +0 -0
  90. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/reaction.py +0 -0
  91. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/testing.py +0 -0
  92. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/tokenizing.py +0 -0
  93. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso/utilities/utilities.py +0 -0
  94. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso_engine.egg-info/SOURCES.txt +0 -0
  95. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso_engine.egg-info/dependency_links.txt +0 -0
  96. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso_engine.egg-info/entry_points.txt +0 -0
  97. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso_engine.egg-info/requires.txt +0 -0
  98. {howso_engine-60.2.1 → howso_engine-60.2.2}/howso_engine.egg-info/top_level.txt +0 -0
  99. {howso_engine-60.2.1 → howso_engine-60.2.2}/pyproject.toml +0 -0
  100. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.10-dev.txt +0 -0
  101. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.10.txt +0 -0
  102. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.11-dev.txt +0 -0
  103. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.11.txt +0 -0
  104. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.12-dev.txt +0 -0
  105. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.12.txt +0 -0
  106. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.13-dev.txt +0 -0
  107. {howso_engine-60.2.1 → howso_engine-60.2.2}/requirements-3.13.txt +0 -0
  108. {howso_engine-60.2.1 → howso_engine-60.2.2}/setup.cfg +0 -0
  109. {howso_engine-60.2.1 → howso_engine-60.2.2}/version.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-engine
3
- Version: 60.2.1
3
+ Version: 60.2.2
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
@@ -188,9 +188,21 @@ class InferFeatureAttributesAbstractData(InferFeatureAttributesBase):
188
188
 
189
189
  elif is_datetime64_any_dtype(dtype):
190
190
  typing_info = {}
191
- if dtype in ['datetime64[Y]', 'datetime64[M]', 'datetime64[D]']:
191
+ if dtype in ["datetime64[Y]", "datetime64[M]", "datetime64[D]"]:
192
192
  return FeatureType.DATE, {}
193
- elif isinstance(dtype, pd.DatetimeTZDtype):
193
+ # datetime64[Y/M/D] only supported by Pandas > 3.0; need more checks for date-only columns
194
+ first_non_null = self._get_first_non_null(feature_name)
195
+ if isinstance(first_non_null, datetime.date) and not isinstance(first_non_null, pd.Timestamp):
196
+ # Timestamp objects are instances of datetime.date/time, but only return 'DATE' here if
197
+ # it's *not* a Timestamp as there may be tzinfo we should inspect.
198
+ return FeatureType.DATE, {}
199
+ # Date-only Timestamp objects in Pandas will have a default time of midnight
200
+ if (isinstance(first_non_null, pd.Timestamp)
201
+ and first_non_null.time() == datetime.time(0, 0, 0)
202
+ and (not hasattr(dtype, "tz") or not dtype.tz)
203
+ ):
204
+ return FeatureType.DATE, {}
205
+ if isinstance(dtype, pd.DatetimeTZDtype):
194
206
  # If using a named time zone capture it, otherwise
195
207
  # rely on the offset in the iso8601 format
196
208
  tz_name = getattr(dtype.tz, 'key', None) or getattr(dtype.tz, 'zone', None)
@@ -1492,7 +1492,7 @@ class InferFeatureAttributesBase(ABC):
1492
1492
  @staticmethod
1493
1493
  def _is_datetime(string: str) -> bool:
1494
1494
  """
1495
- Return True if string can be interpreted as a date.
1495
+ Return True if string can be interpreted as a date(time).
1496
1496
 
1497
1497
  Parameters
1498
1498
  ----------
@@ -1543,6 +1543,10 @@ class InferFeatureAttributesBase(ABC):
1543
1543
  # column itself is not actually a datetime type
1544
1544
  rand_val = self._get_random_value(feature, no_nulls=True)
1545
1545
 
1546
+ # Casting `datetime` objects to string will result in valid ISO-8601
1547
+ if isinstance(rand_val, (datetime.date, datetime.datetime)):
1548
+ return True
1549
+
1546
1550
  # Try to parse one or both values as strictly iso8601
1547
1551
  try:
1548
1552
  if not self._is_datetime(first_non_none):
@@ -226,12 +226,18 @@ class InferFeatureAttributesDataFrame(InferFeatureAttributesBase):
226
226
  elif is_datetime64_any_dtype(dtype):
227
227
  typing_info = {}
228
228
  # Check for date-only features
229
- if dtype in ['datetime64[Y]', 'datetime64[M]', 'datetime64[D]']:
229
+ if dtype in ["datetime64[Y]", "datetime64[M]", "datetime64[D]"]:
230
230
  return FeatureType.DATE, {}
231
231
  first_non_null = self._get_first_non_null(feature_name)
232
- if isinstance(first_non_null, pd.Timestamp):
233
- # Date-only Timestamp objects in Pandas will have a default time of midnight
234
- if first_non_null.time() == datetime.time(0, 0, 0) and (not hasattr(dtype, 'tz') or not dtype.tz):
232
+ if isinstance(first_non_null, datetime.date) and not isinstance(first_non_null, pd.Timestamp):
233
+ # Timestamp objects are instances of datetime.date/time, but only return 'DATE' here if
234
+ # it's *not* a Timestamp as there may be tzinfo we should inspect.
235
+ return FeatureType.DATE, {}
236
+ # Date-only Timestamp objects in Pandas will have a default time of midnight
237
+ if (isinstance(first_non_null, pd.Timestamp)
238
+ and first_non_null.time() == datetime.time(0, 0, 0)
239
+ and (not hasattr(dtype, "tz") or not dtype.tz)
240
+ ):
235
241
  return FeatureType.DATE, {}
236
242
  # Datetime feature (with timezone info)
237
243
  if isinstance(dtype, pd.DatetimeTZDtype):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-engine
3
- Version: 60.2.1
3
+ Version: 60.2.2
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes