SearchLibrium 0.0.140__tar.gz → 0.0.142__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 (58) hide show
  1. searchlibrium-0.0.142/MANIFEST.in +3 -0
  2. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/PKG-INFO +24 -8
  3. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/README.md +20 -7
  4. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/pyproject.toml +10 -1
  5. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/__init__.py +2 -0
  6. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/constraints_builder.py +9 -1
  7. searchlibrium-0.0.142/src/SearchLibrium/data/Swissmetro_final.csv +24949 -0
  8. searchlibrium-0.0.142/src/SearchLibrium/data/TravelMode.csv +841 -0
  9. searchlibrium-0.0.142/src/SearchLibrium/data/electricity.csv +17233 -0
  10. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/hspbil.py +1 -0
  11. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/main.py +26 -7
  12. searchlibrium-0.0.142/src/SearchLibrium/sample_data.py +147 -0
  13. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/search.py +17 -10
  14. searchlibrium-0.0.142/src/SearchLibrium/version.txt +1 -0
  15. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/PKG-INFO +24 -8
  16. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/SOURCES.txt +6 -1
  17. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/requires.txt +3 -0
  18. searchlibrium-0.0.140/src/SearchLibrium/version.txt +0 -1
  19. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/setup.cfg +0 -0
  20. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Halton.py +0 -0
  21. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/MixedLogit.py +0 -0
  22. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Mode_Activity_Nested.py +0 -0
  23. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/RandomP.py +0 -0
  24. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/SEARCH_SM_MARIO.py +0 -0
  25. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Two_Level_Nest.py +0 -0
  26. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/__main__.py +0 -0
  27. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/_choice_model.py +0 -0
  28. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/_device.py +0 -0
  29. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/banditsa.py +0 -0
  30. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/bhhh/minimize.py +0 -0
  31. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/boxcox_functions.py +0 -0
  32. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/call_meta.py +0 -0
  33. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/harmony.py +0 -0
  34. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/latent_class.py +0 -0
  35. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/main_debug.py +0 -0
  36. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mdcev.py +0 -0
  37. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/misc.py +0 -0
  38. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixed_logit.py +0 -0
  39. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixed_nested.py +0 -0
  40. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixedrrm.py +0 -0
  41. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_logit.py +0 -0
  42. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_nested.py +0 -0
  43. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_probit.py +0 -0
  44. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/ordered_logit.py +0 -0
  45. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/ordered_logit_mixed.py +0 -0
  46. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/predict.py +0 -0
  47. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/rrm.py +0 -0
  48. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/sapbil.py +0 -0
  49. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/selection_models.py +0 -0
  50. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/setup.py +0 -0
  51. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/siman.py +0 -0
  52. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_lc_de.py +0 -0
  53. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_mario_searches.py +0 -0
  54. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_sapbil_vs_banditsa.py +0 -0
  55. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/threshold.py +0 -0
  56. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/dependency_links.txt +0 -0
  57. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/entry_points.txt +0 -0
  58. {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/top_level.txt +0 -0
@@ -0,0 +1,3 @@
1
+ include README.md
2
+ include src/SearchLibrium/version.txt
3
+ recursive-include src/SearchLibrium/data *.csv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SearchLibrium
3
- Version: 0.0.140
3
+ Version: 0.0.142
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>
@@ -27,6 +27,9 @@ Requires-Dist: statsmodels
27
27
  Requires-Dist: jax>=0.4.30
28
28
  Requires-Dist: jaxlib>=0.4.30
29
29
  Requires-Dist: jaxopt>=0.8.5
30
+ Requires-Dist: addicty
31
+ Requires-Dist: pyfiglet
32
+ Requires-Dist: colorama
30
33
  Provides-Extra: jax
31
34
  Requires-Dist: jax>=0.4.30; extra == "jax"
32
35
  Requires-Dist: jaxlib>=0.4.30; extra == "jax"
@@ -451,16 +454,29 @@ After every `call_siman` run a dashboard is printed:
451
454
 
452
455
  ## Bundled datasets
453
456
 
457
+ Three example choice datasets ship inside the package (`SearchLibrium/data/*.csv`) — no
458
+ download required, and they work offline (e.g. on HPC compute nodes with no internet egress):
459
+
454
460
  ```python
455
- import SearchLibrium as sl
456
- sl.main.preview_dataset() # prints head of each dataset
461
+ from SearchLibrium import (
462
+ load_electricity_data, load_travel_mode_data, load_swiss_metro_data, preview_datasets,
463
+ )
464
+
465
+ preview_datasets() # prints shape + head of all three
466
+
467
+ df = load_swiss_metro_data() # the dataset used in Quick Start above
457
468
  ```
458
469
 
459
- | Name | Description |
460
- | ---- | ----------- |
461
- | `electricity` | Stated-preference electricity plan choice |
462
- | `travel_mode` | Mode choice: air / train / bus / car |
463
- | `swiss_metro` | Swiss Metro SP study (SM / train / car) |
470
+ | Name | Loader | Description | Alts | Rows |
471
+ | ---- | ------ | ----------- | ---- | ---- |
472
+ | `electricity` | `load_electricity_data()` | Stated-preference electricity plan choice | 4 | 17,232 |
473
+ | `travel_mode` | `load_travel_mode_data()` | Mode choice: air / train / bus / car | 4 | 840 |
474
+ | `swiss_metro` | `load_swiss_metro_data()` | Swiss Metro SP study (SM / train / car) | 3 | 24,948 |
475
+
476
+ Each loader's docstring documents the exact `Parameters(...)` call for that dataset — the
477
+ three use different column-naming conventions (e.g. `travel_mode`'s choice column is a
478
+ `"yes"/"no"` string keyed by `mode`, not a `0/1` int keyed by `alt`), so see
479
+ `help(load_travel_mode_data)` rather than assuming a single shared schema.
464
480
 
465
481
  ---
466
482
 
@@ -411,16 +411,29 @@ After every `call_siman` run a dashboard is printed:
411
411
 
412
412
  ## Bundled datasets
413
413
 
414
+ Three example choice datasets ship inside the package (`SearchLibrium/data/*.csv`) — no
415
+ download required, and they work offline (e.g. on HPC compute nodes with no internet egress):
416
+
414
417
  ```python
415
- import SearchLibrium as sl
416
- sl.main.preview_dataset() # prints head of each dataset
418
+ from SearchLibrium import (
419
+ load_electricity_data, load_travel_mode_data, load_swiss_metro_data, preview_datasets,
420
+ )
421
+
422
+ preview_datasets() # prints shape + head of all three
423
+
424
+ df = load_swiss_metro_data() # the dataset used in Quick Start above
417
425
  ```
418
426
 
419
- | Name | Description |
420
- | ---- | ----------- |
421
- | `electricity` | Stated-preference electricity plan choice |
422
- | `travel_mode` | Mode choice: air / train / bus / car |
423
- | `swiss_metro` | Swiss Metro SP study (SM / train / car) |
427
+ | Name | Loader | Description | Alts | Rows |
428
+ | ---- | ------ | ----------- | ---- | ---- |
429
+ | `electricity` | `load_electricity_data()` | Stated-preference electricity plan choice | 4 | 17,232 |
430
+ | `travel_mode` | `load_travel_mode_data()` | Mode choice: air / train / bus / car | 4 | 840 |
431
+ | `swiss_metro` | `load_swiss_metro_data()` | Swiss Metro SP study (SM / train / car) | 3 | 24,948 |
432
+
433
+ Each loader's docstring documents the exact `Parameters(...)` call for that dataset — the
434
+ three use different column-naming conventions (e.g. `travel_mode`'s choice column is a
435
+ `"yes"/"no"` string keyed by `mode`, not a `0/1` int keyed by `alt`), so see
436
+ `help(load_travel_mode_data)` rather than assuming a single shared schema.
424
437
 
425
438
  ---
426
439
 
@@ -8,6 +8,12 @@ version = {file = "src/SearchLibrium/version.txt"}
8
8
  [tool.setuptools.packages]
9
9
  find = { where = ["src"] }
10
10
 
11
+ [tool.setuptools]
12
+ include-package-data = true
13
+
14
+ [tool.setuptools.package-data]
15
+ SearchLibrium = ["data/*.csv"]
16
+
11
17
  [project]
12
18
  name = "SearchLibrium"
13
19
  dynamic = ["version"]
@@ -47,6 +53,9 @@ dependencies = [
47
53
  "jax>=0.4.30",
48
54
  "jaxlib>=0.4.30",
49
55
  "jaxopt>=0.8.5",
56
+ "addicty",
57
+ "pyfiglet",
58
+ "colorama",
50
59
  ]
51
60
 
52
61
  [project.optional-dependencies]
@@ -73,7 +82,7 @@ Documentation = "https://pypi.org/project/SearchLibrium/"
73
82
  realpython = "SearchLibrium.__main__:main"
74
83
 
75
84
  [tool.bumpver]
76
- current_version = "0.0.140"
85
+ current_version = "0.0.142"
77
86
  version_pattern = "MAJOR.MINOR.PATCH"
78
87
  commit_message = "[skip ci] Bump version {old_version} -> {new_version}"
79
88
  commit = true
@@ -115,6 +115,7 @@ try:
115
115
  from .hspbil import HSPBIL
116
116
  from .call_meta import call_harmony, call_harmony_pbil, call_siman, call_parsa, call_search, call_sapbil, call_banditsa, call_parcopsa, estimate_ctrl
117
117
  from .predict import DestinationPredictor, predict_destination_components, predict_aggregate_destination_flows
118
+ from .sample_data import load_electricity_data, load_travel_mode_data, load_swiss_metro_data, preview_datasets
118
119
 
119
120
  except ImportError as e:
120
121
  from _choice_model import DiscreteChoiceModel
@@ -137,6 +138,7 @@ except ImportError as e:
137
138
  from hspbil import HSPBIL
138
139
  from call_meta import call_siman, call_harmony, call_harmony_pbil, call_search, call_sapbil, call_banditsa, call_parsa, call_parcopsa, estimate_ctrl
139
140
  from predict import DestinationPredictor, predict_destination_components, predict_aggregate_destination_flows
141
+ from sample_data import load_electricity_data, load_travel_mode_data, load_swiss_metro_data, preview_datasets
140
142
  try:
141
143
  from .main import print_ascii_art_logo
142
144
  except Exception:
@@ -422,7 +422,15 @@ class ConstraintBuilder:
422
422
  for k, v in value.items():
423
423
  summary_lines.append(f" {k}: {v}")
424
424
  elif isinstance(value, list):
425
- summary_lines.append(f"{key}: {', '.join(value)}")
425
+ # Items aren't always strings — mutually_exclusive stores a list of
426
+ # groups (each a list of var names), min_behavioral a list of dicts.
427
+ formatted = []
428
+ for item in value:
429
+ if isinstance(item, (list, tuple)):
430
+ formatted.append("[" + ", ".join(str(v) for v in item) + "]")
431
+ else:
432
+ formatted.append(str(item))
433
+ summary_lines.append(f"{key}: {', '.join(formatted)}")
426
434
  else:
427
435
  summary_lines.append(f"{key}: {value}")
428
436