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.
- searchlibrium-0.0.142/MANIFEST.in +3 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/PKG-INFO +24 -8
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/README.md +20 -7
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/pyproject.toml +10 -1
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/__init__.py +2 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/constraints_builder.py +9 -1
- searchlibrium-0.0.142/src/SearchLibrium/data/Swissmetro_final.csv +24949 -0
- searchlibrium-0.0.142/src/SearchLibrium/data/TravelMode.csv +841 -0
- searchlibrium-0.0.142/src/SearchLibrium/data/electricity.csv +17233 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/hspbil.py +1 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/main.py +26 -7
- searchlibrium-0.0.142/src/SearchLibrium/sample_data.py +147 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/search.py +17 -10
- searchlibrium-0.0.142/src/SearchLibrium/version.txt +1 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/PKG-INFO +24 -8
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/SOURCES.txt +6 -1
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/requires.txt +3 -0
- searchlibrium-0.0.140/src/SearchLibrium/version.txt +0 -1
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/setup.cfg +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Halton.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/MixedLogit.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Mode_Activity_Nested.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/RandomP.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/SEARCH_SM_MARIO.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/Two_Level_Nest.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/__main__.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/_choice_model.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/_device.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/banditsa.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/bhhh/minimize.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/boxcox_functions.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/call_meta.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/harmony.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/latent_class.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/main_debug.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mdcev.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/misc.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixed_logit.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixed_nested.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/mixedrrm.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_logit.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_nested.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/multinomial_probit.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/ordered_logit.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/ordered_logit_mixed.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/predict.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/rrm.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/sapbil.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/selection_models.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/setup.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/siman.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_lc_de.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_mario_searches.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/test_sapbil_vs_banditsa.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium/threshold.py +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/dependency_links.txt +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/src/SearchLibrium.egg-info/entry_points.txt +0 -0
- {searchlibrium-0.0.140 → searchlibrium-0.0.142}/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.
|
|
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
|
-
|
|
456
|
-
|
|
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
|
-
|
|
416
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|