howso-engine 60.2.0__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 (112) hide show
  1. {howso_engine-60.2.0/howso_engine.egg-info → howso_engine-60.2.2}/PKG-INFO +1 -1
  2. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/base.py +0 -8
  3. howso_engine-60.2.2/howso/howso-engine/howso.caml +0 -0
  4. howso_engine-60.2.2/howso/howso-engine/migrations/migrations.caml +0 -0
  5. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/howso-engine/version.json +3 -3
  6. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/abstract_data.py +14 -2
  7. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/base.py +5 -1
  8. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/pandas.py +10 -4
  9. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/testing.py +4 -1
  10. {howso_engine-60.2.0 → howso_engine-60.2.2/howso_engine.egg-info}/PKG-INFO +1 -1
  11. howso_engine-60.2.2/version.json +5 -0
  12. howso_engine-60.2.0/howso/howso-engine/howso.caml +0 -0
  13. howso_engine-60.2.0/howso/howso-engine/migrations/migrations.caml +0 -0
  14. howso_engine-60.2.0/version.json +0 -5
  15. {howso_engine-60.2.0 → howso_engine-60.2.2}/.coveragerc +0 -0
  16. {howso_engine-60.2.0 → howso_engine-60.2.2}/.flake8 +0 -0
  17. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/CODEOWNERS +0 -0
  18. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/templates/version_summary.md +0 -0
  19. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/workflows/build-pr.yml +0 -0
  20. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/workflows/build-release.yml +0 -0
  21. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/workflows/build.yml +0 -0
  22. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/workflows/rebuild-requirements.yml +0 -0
  23. {howso_engine-60.2.0 → howso_engine-60.2.2}/.github/workflows/version-update.yml +0 -0
  24. {howso_engine-60.2.0 → howso_engine-60.2.2}/.gitignore +0 -0
  25. {howso_engine-60.2.0 → howso_engine-60.2.2}/.gitmodules +0 -0
  26. {howso_engine-60.2.0 → howso_engine-60.2.2}/.pylintrc +0 -0
  27. {howso_engine-60.2.0 → howso_engine-60.2.2}/CONTRIBUTING.md +0 -0
  28. {howso_engine-60.2.0 → howso_engine-60.2.2}/LICENSE-3RD-PARTY.txt +0 -0
  29. {howso_engine-60.2.0 → howso_engine-60.2.2}/LICENSE.txt +0 -0
  30. {howso_engine-60.2.0 → howso_engine-60.2.2}/MANIFEST.in +0 -0
  31. {howso_engine-60.2.0 → howso_engine-60.2.2}/Makefile +0 -0
  32. {howso_engine-60.2.0 → howso_engine-60.2.2}/README.md +0 -0
  33. {howso_engine-60.2.0 → howso_engine-60.2.2}/bin/build.sh +0 -0
  34. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-mt-debug-howso.yml +0 -0
  35. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-mt-howso.yml +0 -0
  36. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-mt-noavx-traces-howso.yml +0 -0
  37. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-mt-traces-howso.yml +0 -0
  38. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-st-debug-howso.yml +0 -0
  39. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-st-howso.yml +0 -0
  40. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/latest-st-traces-howso.yml +0 -0
  41. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/powershell/Download-Tzdata.ps1 +0 -0
  42. {howso_engine-60.2.0 → howso_engine-60.2.2}/config/powershell/Helper-Functions.ps1 +0 -0
  43. {howso_engine-60.2.0 → howso_engine-60.2.2}/hatch.toml +0 -0
  44. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/__main__.py +0 -0
  45. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/__init__.py +0 -0
  46. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/api.py +0 -0
  47. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/cache.py +0 -0
  48. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/client.py +0 -0
  49. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/configuration.py +0 -0
  50. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/exceptions.py +0 -0
  51. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/feature_flags.py +0 -0
  52. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/pandas/__init__.py +0 -0
  53. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/pandas/client.py +0 -0
  54. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/protocols.py +0 -0
  55. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/__init__.py +0 -0
  56. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/aggregate_reaction.py +0 -0
  57. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/base.py +0 -0
  58. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/group_reaction.py +0 -0
  59. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/project.py +0 -0
  60. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/reaction.py +0 -0
  61. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/session.py +0 -0
  62. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/trainee.py +0 -0
  63. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/schemas/version.py +0 -0
  64. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/client/typing.py +0 -0
  65. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/direct/__init__.py +0 -0
  66. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/direct/_utilities.py +0 -0
  67. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/direct/client.py +0 -0
  68. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/direct/schemas/__init__.py +0 -0
  69. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/direct/schemas/trainee.py +0 -0
  70. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/engine/__init__.py +0 -0
  71. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/engine/client.py +0 -0
  72. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/engine/project.py +0 -0
  73. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/engine/session.py +0 -0
  74. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/engine/trainee.py +0 -0
  75. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/scikit/__init__.py +0 -0
  76. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/scikit/scikit.py +0 -0
  77. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/__init__.py +0 -0
  78. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/decorators.py +0 -0
  79. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/__init__.py +0 -0
  80. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/infer_feature_attributes.py +0 -0
  81. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/protocols.py +0 -0
  82. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/relational.py +0 -0
  83. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/serializers.py +0 -0
  84. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/suggestions.py +0 -0
  85. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/time_series.py +0 -0
  86. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/feature_attributes/warnings.py +0 -0
  87. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/features.py +0 -0
  88. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/installation_verification.py +0 -0
  89. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/internals.py +0 -0
  90. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/json_wrapper.py +0 -0
  91. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/locale.py +0 -0
  92. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/monitors.py +0 -0
  93. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/posix.py +0 -0
  94. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/random.py +0 -0
  95. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/reaction.py +0 -0
  96. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/tokenizing.py +0 -0
  97. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso/utilities/utilities.py +0 -0
  98. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso_engine.egg-info/SOURCES.txt +0 -0
  99. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso_engine.egg-info/dependency_links.txt +0 -0
  100. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso_engine.egg-info/entry_points.txt +0 -0
  101. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso_engine.egg-info/requires.txt +0 -0
  102. {howso_engine-60.2.0 → howso_engine-60.2.2}/howso_engine.egg-info/top_level.txt +0 -0
  103. {howso_engine-60.2.0 → howso_engine-60.2.2}/pyproject.toml +0 -0
  104. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.10-dev.txt +0 -0
  105. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.10.txt +0 -0
  106. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.11-dev.txt +0 -0
  107. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.11.txt +0 -0
  108. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.12-dev.txt +0 -0
  109. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.12.txt +0 -0
  110. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.13-dev.txt +0 -0
  111. {howso_engine-60.2.0 → howso_engine-60.2.2}/requirements-3.13.txt +0 -0
  112. {howso_engine-60.2.0 → howso_engine-60.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-engine
3
- Version: 60.2.0
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
@@ -781,8 +781,6 @@ class AbstractHowsoClient(ABC):
781
781
  with suppress(NotImplementedError):
782
782
  feature_attributes.validate(cases)
783
783
 
784
- util.validate_list_shape(cases, 2, "cases", "list", allow_none=False)
785
-
786
784
  def impute(
787
785
  self,
788
786
  trainee_id: str,
@@ -1256,8 +1254,6 @@ class AbstractHowsoClient(ABC):
1256
1254
  trainee_id = self._resolve_trainee(trainee_id).id
1257
1255
  feature_attributes = self.resolve_feature_attributes(trainee_id)
1258
1256
 
1259
- util.validate_list_shape(contexts, 2, "contexts", "list of object", allow_none=False)
1260
-
1261
1257
  if context_features is None:
1262
1258
  context_features = internals.get_features_from_data(
1263
1259
  contexts,
@@ -2616,7 +2612,6 @@ class AbstractHowsoClient(ABC):
2616
2612
 
2617
2613
  # validate discriminative-react only parameters
2618
2614
  if desired_conviction is None:
2619
- util.validate_list_shape(context_values, 2, "contexts", "list of object")
2620
2615
  util.validate_list_shape(action_features, 1, "action_features", "str")
2621
2616
  util.validate_list_shape(context_features, 1, "context_features", "str")
2622
2617
 
@@ -5570,9 +5565,6 @@ class AbstractHowsoClient(ABC):
5570
5565
  trainee_id = self._resolve_trainee(trainee_id).id
5571
5566
  feature_attributes = self.resolve_feature_attributes(trainee_id)
5572
5567
 
5573
- util.validate_list_shape(from_values, 2, 'from_values', 'list of list of object')
5574
- util.validate_list_shape(to_values, 2, 'to_values', 'list of list of object')
5575
-
5576
5568
  if from_case_indices is None and from_values is None:
5577
5569
  raise ValueError("One of `from_case_indices` or `from_values` "
5578
5570
  "must be specified.")
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "115.3.1",
2
+ "version": "115.3.2",
3
3
  "dependencies": {
4
4
  "amalgam": "78.0.2"
5
5
  },
6
6
  "display_title": "",
7
7
  "build_date": "",
8
- "sha": "2e9e26fc4d30e33c3f51da951afa476d307fe67c",
9
- "url": "https://github.com/howsoai/howso-engine/releases/tag/115.3.1"
8
+ "sha": "91523a9761f1d5fd5fa7fb34c791739e8b0aa516",
9
+ "url": "https://github.com/howsoai/howso-engine/releases/tag/115.3.2"
10
10
  }
@@ -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):
@@ -6,6 +6,7 @@ import os
6
6
  from unittest.mock import patch
7
7
 
8
8
  from howso.client.base import AbstractHowsoClient
9
+ from howso.client.client import get_howso_client_class
9
10
  from howso.direct import HowsoDirectClient
10
11
 
11
12
 
@@ -57,7 +58,9 @@ def get_configurationless_test_client(
57
58
  An instance of a subclass of AbstractHowsoClient.
58
59
  """
59
60
  if "USE_HOWSO_CONFIG" in get_test_options():
60
- return client_class(**kwargs)
61
+ _, client_params = get_howso_client_class(**kwargs)
62
+ client_params.update(kwargs)
63
+ return client_class(**client_params)
61
64
  else:
62
65
  # Ignore any locally defined config (howso.yml) files.
63
66
  names_to_remove = ('XDG_CONFIG_HOME', 'HOWSO_CONFIG')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-engine
3
- Version: 60.2.0
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
@@ -0,0 +1,5 @@
1
+ {
2
+ "dependencies": {
3
+ "howso-engine": "115.3.2"
4
+ }
5
+ }
@@ -1,5 +0,0 @@
1
- {
2
- "dependencies": {
3
- "howso-engine": "115.3.1"
4
- }
5
- }
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