SearchLibrium 0.0.149__tar.gz → 0.0.151__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 (59) hide show
  1. {searchlibrium-0.0.149/src/SearchLibrium.egg-info → searchlibrium-0.0.151}/PKG-INFO +1 -1
  2. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/pyproject.toml +1 -1
  3. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/mdcev.py +16 -0
  4. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/predict.py +15 -2
  5. searchlibrium-0.0.151/src/SearchLibrium/version.txt +1 -0
  6. {searchlibrium-0.0.149 → searchlibrium-0.0.151/src/SearchLibrium.egg-info}/PKG-INFO +1 -1
  7. searchlibrium-0.0.149/src/SearchLibrium/version.txt +0 -1
  8. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/MANIFEST.in +0 -0
  9. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/README.md +0 -0
  10. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/setup.cfg +0 -0
  11. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/BEHier.py +0 -0
  12. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/Halton.py +0 -0
  13. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/MixedLogit.py +0 -0
  14. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/Mode_Activity_Nested.py +0 -0
  15. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/RandomP.py +0 -0
  16. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/SEARCH_SM_MARIO.py +0 -0
  17. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/Two_Level_Nest.py +0 -0
  18. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/__init__.py +0 -0
  19. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/__main__.py +0 -0
  20. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/_choice_model.py +0 -0
  21. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/_device.py +0 -0
  22. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/banditsa.py +0 -0
  23. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/bhhh/minimize.py +0 -0
  24. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/boxcox_functions.py +0 -0
  25. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/call_meta.py +0 -0
  26. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/constraints_builder.py +0 -0
  27. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/data/Swissmetro_final.csv +0 -0
  28. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/data/TravelMode.csv +0 -0
  29. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/data/electricity.csv +0 -0
  30. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/harmony.py +0 -0
  31. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/hspbil.py +0 -0
  32. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/latent_class.py +0 -0
  33. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/main.py +0 -0
  34. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/main_debug.py +0 -0
  35. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/misc.py +0 -0
  36. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/mixed_logit.py +0 -0
  37. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/mixed_nested.py +0 -0
  38. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/mixedrrm.py +0 -0
  39. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/multinomial_logit.py +0 -0
  40. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/multinomial_nested.py +0 -0
  41. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/multinomial_probit.py +0 -0
  42. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/ordered_logit.py +0 -0
  43. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/ordered_logit_mixed.py +0 -0
  44. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/rrm.py +0 -0
  45. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/sample_data.py +0 -0
  46. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/sapbil.py +0 -0
  47. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/search.py +0 -0
  48. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/selection_models.py +0 -0
  49. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/setup.py +0 -0
  50. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/siman.py +0 -0
  51. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/test_lc_de.py +0 -0
  52. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/test_mario_searches.py +0 -0
  53. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/test_sapbil_vs_banditsa.py +0 -0
  54. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium/threshold.py +0 -0
  55. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium.egg-info/SOURCES.txt +0 -0
  56. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium.egg-info/dependency_links.txt +0 -0
  57. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium.egg-info/entry_points.txt +0 -0
  58. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium.egg-info/requires.txt +0 -0
  59. {searchlibrium-0.0.149 → searchlibrium-0.0.151}/src/SearchLibrium.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SearchLibrium
3
- Version: 0.0.149
3
+ Version: 0.0.151
4
4
  Summary: A Python package for econometric models driven by search
5
5
  Author: Mario Fernando Taco Morales, Alexander Paz, Prithvi Beeramole, Robert Burdett
6
6
  Author-email: Zeke Ahern <z.ahern@qut.edu.au>
@@ -82,7 +82,7 @@ Documentation = "https://pypi.org/project/SearchLibrium/"
82
82
  realpython = "SearchLibrium.__main__:main"
83
83
 
84
84
  [tool.bumpver]
85
- current_version = "0.0.149"
85
+ current_version = "0.0.151"
86
86
  version_pattern = "MAJOR.MINOR.PATCH"
87
87
  commit_message = "[skip ci] Bump version {old_version} -> {new_version}"
88
88
  commit = true
@@ -353,6 +353,22 @@ class MDCEVModel:
353
353
 
354
354
  self.mle_success_ = bool(res.success)
355
355
  self.mle_message_ = str(res.message)
356
+
357
+ # fit_mle() refines baseline_utility_/alpha_/gamma_ beyond the initial
358
+ # self.fit(...) call above, but fit_result_ (what summary() reads)
359
+ # was never refreshed -- summary() would silently keep reporting the
360
+ # pre-MLE heuristic estimates. participation_rate/mean_allocation/
361
+ # mean_budget are observed-data statistics, unaffected by refinement.
362
+ old_result = self.fit_result_
363
+ self.fit_result_ = MDCEVFitResult(
364
+ labels=old_result.labels,
365
+ baseline_utility=self.baseline_utility_.copy(),
366
+ alpha=self.alpha_.copy(),
367
+ gamma=self.gamma_.copy(),
368
+ participation_rate=old_result.participation_rate,
369
+ mean_allocation=old_result.mean_allocation,
370
+ mean_budget=old_result.mean_budget,
371
+ )
356
372
  return self
357
373
 
358
374
  def summary(self) -> pd.DataFrame:
@@ -88,6 +88,14 @@ class DestinationPredictor:
88
88
  if prob is None:
89
89
  prob = getattr(self.model, 'choice_pred_prob', None)
90
90
  if prob is not None and hasattr(prob, 'shape') and len(prob.shape) == 2:
91
+ # JAX-fitted models (_jax=True, the default) leave this as a
92
+ # jax.Array. Downstream code (predict_destinations()) runs plain
93
+ # numpy ops (argmax/argsort) per row in a Python loop; numpy
94
+ # dispatching those against an un-converted jax.Array is
95
+ # catastrophically slow (~4s per argsort call observed, i.e.
96
+ # hours instead of seconds for a few thousand trips) rather than
97
+ # erroring, so convert once here up front.
98
+ prob = np.asarray(prob)
91
99
  self._probs = prob
92
100
  return prob
93
101
 
@@ -106,8 +114,9 @@ class DestinationPredictor:
106
114
  avail.reshape(self.n_trips, self.n_dests),
107
115
  return_logsum=True,
108
116
  )
117
+ probs = np.asarray(probs) # see conversion note above
109
118
  self._probs = probs
110
- self._logsums = logsums
119
+ self._logsums = np.asarray(logsums)
111
120
  return probs
112
121
 
113
122
  # ------------------------------------------------------------------
@@ -147,7 +156,11 @@ class DestinationPredictor:
147
156
  (self.idca[self.trip_id_col] == tid)
148
157
  & (self.idca[self.choice_col] == 1)
149
158
  ]
150
- actual_code = int(actual[self.dest_col].iloc[0]) if len(actual) else -1
159
+ # dest_col isn't always integer-coded (e.g. string alt labels
160
+ # like 'CAR'/'SM'/'TRAIN') -- keep the raw value so it compares
161
+ # correctly against dest_codes/best_code, which retain whatever
162
+ # dtype the source data used.
163
+ actual_code = actual[self.dest_col].iloc[0] if len(actual) else -1
151
164
 
152
165
  rows.append({
153
166
  self.trip_id_col: tid,
@@ -0,0 +1 @@
1
+ 0.0.151
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SearchLibrium
3
- Version: 0.0.149
3
+ Version: 0.0.151
4
4
  Summary: A Python package for econometric models driven by search
5
5
  Author: Mario Fernando Taco Morales, Alexander Paz, Prithvi Beeramole, Robert Burdett
6
6
  Author-email: Zeke Ahern <z.ahern@qut.edu.au>
@@ -1 +0,0 @@
1
- 0.0.149