From 4d2913a502e0cca4ba1c997abe27d08b4970842d Mon Sep 17 00:00:00 2001 From: Ben Stabler Date: Thu, 27 Feb 2020 13:13:52 -0800 Subject: [PATCH] Cli (#110) (#111) * add command line utility * fix create --list * WIP: add examples as package data * use manifest file; include examples in package * include examples in package resources * use working_dir * swap --version and -V * Add run_bca.py to scripts folder * update docs Co-authored-by: Blake --- .gitignore | 1 + .travis.yml | 20 +- MANIFEST.in | 4 +- bca4abm/__init__.py | 4 +- bca4abm/bca4abm.py | 1 - bca4abm/cli/__init__.py | 1 + bca4abm/cli/main.py | 197 ++++++++++++++++++ .../configs/aggregate_demographics.csv | 0 .../configs/aggregate_demographics.yaml | 0 .../example_4step}/configs/aggregate_od.csv | 0 .../example_4step}/configs/aggregate_od.yaml | 0 .../example_4step}/configs/aggregate_zone.csv | 0 .../configs/aggregate_zone.yaml | 0 .../example_4step}/configs/link_daily.csv | 0 .../example_4step}/configs/link_daily.yaml | 0 .../example_4step}/configs/logging.yaml | 0 .../example_4step}/configs/settings.yaml | 0 .../example_4step}/configs/tables.yaml | 0 .../data/base-data/assign_mfs.omx | Bin .../example_4step}/data/base-data/cocs.csv | 0 .../data/base-data/linksMD1.csv | 0 .../data/base-data/linksPM2.csv | 0 .../data/base-data/ma.collpr.csv | 0 .../data/base-data/ma.hbcdcls.csv | 0 .../data/base-data/ma.hbohdcls.csv | 0 .../data/base-data/ma.hboldcls.csv | 0 .../data/base-data/ma.hbomdcls.csv | 0 .../data/base-data/ma.hboprh.csv | 0 .../data/base-data/ma.hboprl.csv | 0 .../data/base-data/ma.hboprm.csv | 0 .../data/base-data/ma.hbrhdcls.csv | 0 .../data/base-data/ma.hbrldcls.csv | 0 .../data/base-data/ma.hbrmdcls.csv | 0 .../data/base-data/ma.hbrprh.csv | 0 .../data/base-data/ma.hbrprl.csv | 0 .../data/base-data/ma.hbrprm.csv | 0 .../data/base-data/ma.hbshdcls.csv | 0 .../data/base-data/ma.hbsldcls.csv | 0 .../data/base-data/ma.hbsmdcls.csv | 0 .../data/base-data/ma.hbsprh.csv | 0 .../data/base-data/ma.hbsprl.csv | 0 .../data/base-data/ma.hbsprm.csv | 0 .../data/base-data/ma.hbwhdcls.csv | 0 .../data/base-data/ma.hbwldcls.csv | 0 .../data/base-data/ma.hbwmdcls.csv | 0 .../data/base-data/ma.hbwprh.csv | 0 .../data/base-data/ma.hbwprl.csv | 0 .../data/base-data/ma.hbwprm.csv | 0 .../data/base-data/ma.nhbnwdcls.csv | 0 .../data/base-data/ma.nhbwdcls.csv | 0 .../data/base-data/ma.nhnwpr.csv | 0 .../data/base-data/ma.nhwpr.csv | 0 .../data/base-data/ma.schdcls.csv | 0 .../data/base-data/ma.schpr.csv | 0 .../example_4step}/data/base-data/mf.cval.csv | 0 .../data/base-data/mode_choice_pa.omx | Bin .../data/base-data/parking_cost.csv | 0 .../data/base-data/parking_cost.omx | Bin .../data/base-data/skims_mfs.omx | Bin .../data/build-data/assign_mfs.omx | Bin .../example_4step}/data/build-data/cocs.csv | 0 .../data/build-data/linksMD1.csv | 0 .../data/build-data/linksPM2.csv | 0 .../data/build-data/ma.collpr.csv | 0 .../data/build-data/ma.hbcdcls.csv | 0 .../data/build-data/ma.hbohdcls.csv | 0 .../data/build-data/ma.hboldcls.csv | 0 .../data/build-data/ma.hbomdcls.csv | 0 .../data/build-data/ma.hboprh.csv | 0 .../data/build-data/ma.hboprl.csv | 0 .../data/build-data/ma.hboprm.csv | 0 .../data/build-data/ma.hbrhdcls.csv | 0 .../data/build-data/ma.hbrldcls.csv | 0 .../data/build-data/ma.hbrmdcls.csv | 0 .../data/build-data/ma.hbrprh.csv | 0 .../data/build-data/ma.hbrprl.csv | 0 .../data/build-data/ma.hbrprm.csv | 0 .../data/build-data/ma.hbshdcls.csv | 0 .../data/build-data/ma.hbsldcls.csv | 0 .../data/build-data/ma.hbsmdcls.csv | 0 .../data/build-data/ma.hbsprh.csv | 0 .../data/build-data/ma.hbsprl.csv | 0 .../data/build-data/ma.hbsprm.csv | 0 .../data/build-data/ma.hbwhdcls.csv | 0 .../data/build-data/ma.hbwldcls.csv | 0 .../data/build-data/ma.hbwmdcls.csv | 0 .../data/build-data/ma.hbwprh.csv | 0 .../data/build-data/ma.hbwprl.csv | 0 .../data/build-data/ma.hbwprm.csv | 0 .../data/build-data/ma.nhbnwdcls.csv | 0 .../data/build-data/ma.nhbwdcls.csv | 0 .../data/build-data/ma.nhnwpr.csv | 0 .../data/build-data/ma.nhwpr.csv | 0 .../data/build-data/ma.schdcls.csv | 0 .../data/build-data/ma.schpr.csv | 0 .../data/build-data/mf.cval.csv | 0 .../data/build-data/mode_choice_pa.omx | Bin .../data/build-data/parking_cost.csv | 0 .../data/build-data/parking_cost.omx | Bin .../data/build-data/skims_mfs.omx | Bin .../data/moves_2010_summer_running_rates.csv | 0 .../example_4step}/data/zone_districts.csv | 0 .../examples/example_4step}/output/.gitignore | 0 .../example_abm}/configs/aggregate_trips.csv | 0 .../example_abm}/configs/aggregate_trips.yaml | 0 .../example_abm}/configs/auto_ownership.csv | 0 .../example_abm}/configs/auto_ownership.yaml | 0 .../example_abm}/configs/demographics.csv | 0 .../example_abm}/configs/demographics.yaml | 0 .../examples/example_abm}/configs/link.csv | 0 .../examples/example_abm}/configs/link.yaml | 0 .../example_abm}/configs/link_daily.csv | 0 .../example_abm}/configs/link_daily.yaml | 0 .../example_abm}/configs/logging.yaml | 0 .../example_abm}/configs/person_trips.csv | 0 .../example_abm}/configs/person_trips.yaml | 0 .../configs/physical_activity.yaml | 0 .../configs/physical_activity_person.csv | 0 .../configs/physical_activity_trip.csv | 0 .../example_abm}/configs/settings.yaml | 0 .../examples/example_abm}/configs/tables.yaml | 0 .../examples/example_abm}/data/.gitignore | 0 .../data/aggregate_data_manifest.csv | 0 .../example_abm}/data/base-data/link_ampk.csv | 0 .../data/base-data/link_daily.csv | 0 .../example_abm}/data/base-data/testlos.omx | Bin .../example_abm}/data/base-data/testtrips.omx | Bin .../example_abm}/data/base_households.csv | 0 .../example_abm}/data/basetrips_buildlos.csv | 0 .../example_abm}/data/basetrips_normal.csv | 0 .../data/build-data/link_ampk.csv | 0 .../data/build-data/link_daily.csv | 0 .../example_abm}/data/build-data/testlos.omx | Bin .../data/build-data/testtrips.omx | Bin .../example_abm}/data/build_households.csv | 0 .../example_abm}/data/buildtrips_baselos.csv | 0 .../example_abm}/data/buildtrips_normal.csv | 0 .../example_abm}/data/link_data_manifest.csv | 0 .../examples/example_abm}/data/persons.csv | 0 .../examples/example_abm}/output/.gitignore | 0 bca4abm/processors/__init__.py | 1 - bca4abm/processors/abm/__init__.py | 1 - bca4abm/processors/four_step/__init__.py | 1 - bca4abm/tables/__init__.py | 1 - bca4abm/tests/test_cli.py | 13 ++ bca4abm/util/misc.py | 1 - bin/build_docs.sh | 63 ------ bin/test_build_docs.sh | 19 -- docs/conf.py | 8 +- docs/examples.rst | 96 +++++---- docs/gettingstarted.rst | 37 +++- example_abm/run_bca.py | 62 ------ scripts/README.md | 12 ++ {example_4step => scripts}/run_bca.py | 38 ++-- setup.py | 15 +- 155 files changed, 357 insertions(+), 239 deletions(-) create mode 100644 bca4abm/cli/__init__.py create mode 100644 bca4abm/cli/main.py rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_demographics.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_demographics.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_od.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_od.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_zone.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/aggregate_zone.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/link_daily.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/link_daily.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/logging.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/settings.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/configs/tables.yaml (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/assign_mfs.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/cocs.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/linksMD1.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/linksPM2.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.collpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbcdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbohdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hboldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbomdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hboprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hboprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hboprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrhdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbrprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbshdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbsldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbsmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbsprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbsprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbsprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwhdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.hbwprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.nhbnwdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.nhbwdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.nhnwpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.nhwpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.schdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/ma.schpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/mf.cval.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/mode_choice_pa.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/parking_cost.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/parking_cost.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/base-data/skims_mfs.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/assign_mfs.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/cocs.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/linksMD1.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/linksPM2.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.collpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbcdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbohdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hboldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbomdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hboprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hboprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hboprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrhdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbrprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbshdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbsldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbsmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbsprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbsprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbsprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwhdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwldcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwmdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwprh.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwprl.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.hbwprm.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.nhbnwdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.nhbwdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.nhnwpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.nhwpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.schdcls.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/ma.schpr.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/mf.cval.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/mode_choice_pa.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/parking_cost.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/parking_cost.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/build-data/skims_mfs.omx (100%) rename {example_4step => bca4abm/examples/example_4step}/data/moves_2010_summer_running_rates.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/data/zone_districts.csv (100%) rename {example_4step => bca4abm/examples/example_4step}/output/.gitignore (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/aggregate_trips.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/aggregate_trips.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/auto_ownership.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/auto_ownership.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/demographics.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/demographics.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/link.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/link.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/link_daily.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/link_daily.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/logging.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/person_trips.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/person_trips.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/physical_activity.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/physical_activity_person.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/physical_activity_trip.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/settings.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/configs/tables.yaml (100%) rename {example_abm => bca4abm/examples/example_abm}/data/.gitignore (100%) rename {example_abm => bca4abm/examples/example_abm}/data/aggregate_data_manifest.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/base-data/link_ampk.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/base-data/link_daily.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/base-data/testlos.omx (100%) rename {example_abm => bca4abm/examples/example_abm}/data/base-data/testtrips.omx (100%) rename {example_abm => bca4abm/examples/example_abm}/data/base_households.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/basetrips_buildlos.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/basetrips_normal.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/build-data/link_ampk.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/build-data/link_daily.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/build-data/testlos.omx (100%) rename {example_abm => bca4abm/examples/example_abm}/data/build-data/testtrips.omx (100%) rename {example_abm => bca4abm/examples/example_abm}/data/build_households.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/buildtrips_baselos.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/buildtrips_normal.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/link_data_manifest.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/data/persons.csv (100%) rename {example_abm => bca4abm/examples/example_abm}/output/.gitignore (100%) create mode 100644 bca4abm/tests/test_cli.py delete mode 100755 bin/build_docs.sh delete mode 100755 bin/test_build_docs.sh delete mode 100644 example_abm/run_bca.py create mode 100644 scripts/README.md rename {example_4step => scripts}/run_bca.py (59%) diff --git a/.gitignore b/.gitignore index b672021..369c102 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .ipynb_checkpoints sandbox/ .pytest_cache +.DS_Store ~$*.xlsx diff --git a/.travis.yml b/.travis.yml index 27a764e..10f7b16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,10 +13,8 @@ install: - conda config --set always_yes yes --set changeps1 no - conda update -q conda - conda info -a -- | - conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION +- conda create -q -n test-environment python=$TRAVIS_PYTHON_VERSION - source activate test-environment -# - pip install https://github.com/ActivitySim/activitysim/zipball/dev/ - pip install pytest pytest-cov coveralls pycodestyle - pip install . - pip freeze @@ -27,7 +25,21 @@ script: after_success: - coveralls -- bin/build_docs.sh +# Build docs +- pip install sphinx numpydoc sphinx_rtd_theme +- cd docs +- make clean +- make html +- touch build/html/.nojekyll + +deploy: + provider: pages + local_dir: docs/build/html + skip_cleanup: true + github_token: $GH_TOKEN + keep_history: true + on: + branch: master notifications: slack: diff --git a/MANIFEST.in b/MANIFEST.in index 076e1c6..2e9dcd5 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1 @@ -include papers/* -include example_4step/* -include example_abm/* +graft bca4abm/examples diff --git a/bca4abm/__init__.py b/bca4abm/__init__.py index bcf866c..b5f1b22 100644 --- a/bca4abm/__init__.py +++ b/bca4abm/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import # bca4abm # Copyright (C) 2016 RSG Inc # See full license in LICENSE.txt. @@ -7,4 +6,5 @@ from . import tables from . import processors -__version__ = version = '0.1dev' +__version__ = '0.5' +__doc__ = 'Benefit Calculations for Travel Models' diff --git a/bca4abm/bca4abm.py b/bca4abm/bca4abm.py index 0145f2d..47cf0c7 100644 --- a/bca4abm/bca4abm.py +++ b/bca4abm/bca4abm.py @@ -1,4 +1,3 @@ -from __future__ import print_function # bca4abm # Copyright (C) 2016 RSG Inc # See full license in LICENSE.txt. diff --git a/bca4abm/cli/__init__.py b/bca4abm/cli/__init__.py new file mode 100644 index 0000000..12a7e52 --- /dev/null +++ b/bca4abm/cli/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/bca4abm/cli/main.py b/bca4abm/cli/main.py new file mode 100644 index 0000000..e2932a5 --- /dev/null +++ b/bca4abm/cli/main.py @@ -0,0 +1,197 @@ +# bca4abm +# Copyright (C) 2016 RSG Inc +# See full license in LICENSE.txt. +""" +Welcome to bca4abm! +""" + +import os +import shutil +import sys +import warnings +import logging +import argparse +import pkg_resources + +from activitysim.core import tracing +from activitysim.core import pipeline +from activitysim.core import inject + +from activitysim.core.config import setting + +# the following import has the side-effect of registering injectables +import bca4abm + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--version', '-V', action='version', version=bca4abm.__version__) + + # print help if no subcommand is provided + parser.set_defaults(func=lambda x: parser.print_help()) + subparsers = parser.add_subparsers(title='subcommands', + help='available subcommand options') + + subparser_create(subparsers) + subparser_run(subparsers) + + args = parser.parse_args() + args.func(args) + + +def subparser_create(subparsers): + """Create command args + """ + parser_create = subparsers.add_parser('create', description=create.__doc__, + help='create a new bca4abm configuration') + create_group = parser_create.add_mutually_exclusive_group(required=True) + create_group.add_argument('-l', '--list', + action='store_true', + help='list available example directories') + create_group.add_argument('-e', '--example', + type=str, + metavar='PATH', + help='example directory to copy') + parser_create.add_argument('-d', '--destination', + type=str, + metavar='PATH', + default=os.getcwd(), + help="path to new project directory (default: %(default)s)") + parser_create.set_defaults(func=create) + + +def create(args): + """ + Create a new bca4abm configuration from an existing template. + + Use the -l flag to view a list of example configurations, then + copy to your own working directory. These new project files can + be run with the 'bca run' command. + """ + + example_dirs = pkg_resources.resource_listdir('bca4abm', 'examples') + + if args.list: + print('Available examples:') + for example in example_dirs: + print("\t"+example) + + sys.exit(0) + + if args.example: + if args.example not in example_dirs: + sys.exit("error: could not find example '%s'" % args.example) + + if os.path.isdir(args.destination): + dest_path = os.path.join(args.destination, args.example) + else: + dest_path = args.destination + + resource = os.path.join('examples', args.example) + example_path = pkg_resources.resource_filename('bca4abm', resource) + + print('copying files from %s...' % args.example) + shutil.copytree(example_path, dest_path) + + sys.exit("copied! new project files are in %s" % os.path.abspath(dest_path)) + + +def subparser_run(subparsers): + """Run command args + """ + parser_run = subparsers.add_parser('run', description=run.__doc__, help='run bca4abm') + parser_run.add_argument('-w', '--working_dir', + type=str, + metavar='PATH', + help='path to example/project directory (default: %s)' % os.getcwd()) + parser_run.add_argument('-c', '--config', + type=str, + metavar='PATH', + help='path to config dir') + parser_run.add_argument('-o', '--output', + type=str, + metavar='PATH', + help='path to output dir') + parser_run.add_argument('-d', '--data', + type=str, + metavar='PATH', + help='path to data dir') + parser_run.add_argument('-r', '--resume', + type=str, + metavar='STEPNAME', + help='resume after step') + parser_run.add_argument('-p', '--pipeline', + type=str, + metavar='FILE', + help='pipeline file name') + parser_run.set_defaults(func=run) + + +def run(args): + """ + Run bca4abm. Specify a project folder using the '--working_dir' option, + or point to the config, data, and output folders directly with + '--config', '--data', and '--output'. + + """ + + if args.working_dir and os.path.exists(args.working_dir): + os.chdir(args.working_dir) + + if args.config: + inject.add_injectable('configs_dir', args.config) + + if args.data: + inject.add_injectable('data_dir', args.data) + + if args.output: + inject.add_injectable('output_dir', args.output) + + for injectable in ['configs_dir', 'data_dir', 'output_dir']: + try: + dir_path = inject.get_injectable(injectable) + except RuntimeError: + sys.exit('Error: please specify either a --working_dir ' + "containing 'configs', 'data', and 'output' folders " + 'or all three of --config, --data, and --output') + if not os.path.exists(dir_path): + sys.exit("Could not find %s '%s'" % (injectable, os.path.abspath(dir_path))) + + if args.pipeline: + inject.add_injectable('pipeline_file_name', args.pipeline) + + if args.resume: + override_setting('resume_after', args.resume) + + tracing.config_logger() + tracing.delete_csv_files() # only modifies output_dir + warnings.simplefilter('always') + logging.captureWarnings(capture=True) + + t0 = tracing.print_elapsed_time() + + # If you provide a resume_after argument to pipeline.run + # the pipeline manager will attempt to load checkpointed tables from the checkpoint store + # and resume pipeline processing on the next submodel step after the specified checkpoint + resume_after = setting('resume_after', None) + + if resume_after: + print('resume_after: %s' % resume_after) + + pipeline.run(models=setting('models'), resume_after=resume_after) + + # tables will no longer be available after pipeline is closed + pipeline.close_pipeline() + + t0 = tracing.print_elapsed_time('all models', t0) + + +# TODO: move to activitysim.core.config +def override_setting(key, value): + new_settings = inject.get_injectable('settings') + new_settings[key] = value + inject.add_injectable('settings', new_settings) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/example_4step/configs/aggregate_demographics.csv b/bca4abm/examples/example_4step/configs/aggregate_demographics.csv similarity index 100% rename from example_4step/configs/aggregate_demographics.csv rename to bca4abm/examples/example_4step/configs/aggregate_demographics.csv diff --git a/example_4step/configs/aggregate_demographics.yaml b/bca4abm/examples/example_4step/configs/aggregate_demographics.yaml similarity index 100% rename from example_4step/configs/aggregate_demographics.yaml rename to bca4abm/examples/example_4step/configs/aggregate_demographics.yaml diff --git a/example_4step/configs/aggregate_od.csv b/bca4abm/examples/example_4step/configs/aggregate_od.csv similarity index 100% rename from example_4step/configs/aggregate_od.csv rename to bca4abm/examples/example_4step/configs/aggregate_od.csv diff --git a/example_4step/configs/aggregate_od.yaml b/bca4abm/examples/example_4step/configs/aggregate_od.yaml similarity index 100% rename from example_4step/configs/aggregate_od.yaml rename to bca4abm/examples/example_4step/configs/aggregate_od.yaml diff --git a/example_4step/configs/aggregate_zone.csv b/bca4abm/examples/example_4step/configs/aggregate_zone.csv similarity index 100% rename from example_4step/configs/aggregate_zone.csv rename to bca4abm/examples/example_4step/configs/aggregate_zone.csv diff --git a/example_4step/configs/aggregate_zone.yaml b/bca4abm/examples/example_4step/configs/aggregate_zone.yaml similarity index 100% rename from example_4step/configs/aggregate_zone.yaml rename to bca4abm/examples/example_4step/configs/aggregate_zone.yaml diff --git a/example_4step/configs/link_daily.csv b/bca4abm/examples/example_4step/configs/link_daily.csv similarity index 100% rename from example_4step/configs/link_daily.csv rename to bca4abm/examples/example_4step/configs/link_daily.csv diff --git a/example_4step/configs/link_daily.yaml b/bca4abm/examples/example_4step/configs/link_daily.yaml similarity index 100% rename from example_4step/configs/link_daily.yaml rename to bca4abm/examples/example_4step/configs/link_daily.yaml diff --git a/example_4step/configs/logging.yaml b/bca4abm/examples/example_4step/configs/logging.yaml similarity index 100% rename from example_4step/configs/logging.yaml rename to bca4abm/examples/example_4step/configs/logging.yaml diff --git a/example_4step/configs/settings.yaml b/bca4abm/examples/example_4step/configs/settings.yaml similarity index 100% rename from example_4step/configs/settings.yaml rename to bca4abm/examples/example_4step/configs/settings.yaml diff --git a/example_4step/configs/tables.yaml b/bca4abm/examples/example_4step/configs/tables.yaml similarity index 100% rename from example_4step/configs/tables.yaml rename to bca4abm/examples/example_4step/configs/tables.yaml diff --git a/example_4step/data/base-data/assign_mfs.omx b/bca4abm/examples/example_4step/data/base-data/assign_mfs.omx similarity index 100% rename from example_4step/data/base-data/assign_mfs.omx rename to bca4abm/examples/example_4step/data/base-data/assign_mfs.omx diff --git a/example_4step/data/base-data/cocs.csv b/bca4abm/examples/example_4step/data/base-data/cocs.csv similarity index 100% rename from example_4step/data/base-data/cocs.csv rename to bca4abm/examples/example_4step/data/base-data/cocs.csv diff --git a/example_4step/data/base-data/linksMD1.csv b/bca4abm/examples/example_4step/data/base-data/linksMD1.csv similarity index 100% rename from example_4step/data/base-data/linksMD1.csv rename to bca4abm/examples/example_4step/data/base-data/linksMD1.csv diff --git a/example_4step/data/base-data/linksPM2.csv b/bca4abm/examples/example_4step/data/base-data/linksPM2.csv similarity index 100% rename from example_4step/data/base-data/linksPM2.csv rename to bca4abm/examples/example_4step/data/base-data/linksPM2.csv diff --git a/example_4step/data/base-data/ma.collpr.csv b/bca4abm/examples/example_4step/data/base-data/ma.collpr.csv similarity index 100% rename from example_4step/data/base-data/ma.collpr.csv rename to bca4abm/examples/example_4step/data/base-data/ma.collpr.csv diff --git a/example_4step/data/base-data/ma.hbcdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbcdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbcdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbcdcls.csv diff --git a/example_4step/data/base-data/ma.hbohdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbohdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbohdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbohdcls.csv diff --git a/example_4step/data/base-data/ma.hboldcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hboldcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hboldcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hboldcls.csv diff --git a/example_4step/data/base-data/ma.hbomdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbomdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbomdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbomdcls.csv diff --git a/example_4step/data/base-data/ma.hboprh.csv b/bca4abm/examples/example_4step/data/base-data/ma.hboprh.csv similarity index 100% rename from example_4step/data/base-data/ma.hboprh.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hboprh.csv diff --git a/example_4step/data/base-data/ma.hboprl.csv b/bca4abm/examples/example_4step/data/base-data/ma.hboprl.csv similarity index 100% rename from example_4step/data/base-data/ma.hboprl.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hboprl.csv diff --git a/example_4step/data/base-data/ma.hboprm.csv b/bca4abm/examples/example_4step/data/base-data/ma.hboprm.csv similarity index 100% rename from example_4step/data/base-data/ma.hboprm.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hboprm.csv diff --git a/example_4step/data/base-data/ma.hbrhdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrhdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrhdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrhdcls.csv diff --git a/example_4step/data/base-data/ma.hbrldcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrldcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrldcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrldcls.csv diff --git a/example_4step/data/base-data/ma.hbrmdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrmdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrmdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrmdcls.csv diff --git a/example_4step/data/base-data/ma.hbrprh.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrprh.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrprh.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrprh.csv diff --git a/example_4step/data/base-data/ma.hbrprl.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrprl.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrprl.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrprl.csv diff --git a/example_4step/data/base-data/ma.hbrprm.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbrprm.csv similarity index 100% rename from example_4step/data/base-data/ma.hbrprm.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbrprm.csv diff --git a/example_4step/data/base-data/ma.hbshdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbshdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbshdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbshdcls.csv diff --git a/example_4step/data/base-data/ma.hbsldcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbsldcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbsldcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbsldcls.csv diff --git a/example_4step/data/base-data/ma.hbsmdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbsmdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbsmdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbsmdcls.csv diff --git a/example_4step/data/base-data/ma.hbsprh.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbsprh.csv similarity index 100% rename from example_4step/data/base-data/ma.hbsprh.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbsprh.csv diff --git a/example_4step/data/base-data/ma.hbsprl.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbsprl.csv similarity index 100% rename from example_4step/data/base-data/ma.hbsprl.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbsprl.csv diff --git a/example_4step/data/base-data/ma.hbsprm.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbsprm.csv similarity index 100% rename from example_4step/data/base-data/ma.hbsprm.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbsprm.csv diff --git a/example_4step/data/base-data/ma.hbwhdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwhdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwhdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwhdcls.csv diff --git a/example_4step/data/base-data/ma.hbwldcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwldcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwldcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwldcls.csv diff --git a/example_4step/data/base-data/ma.hbwmdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwmdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwmdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwmdcls.csv diff --git a/example_4step/data/base-data/ma.hbwprh.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwprh.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwprh.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwprh.csv diff --git a/example_4step/data/base-data/ma.hbwprl.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwprl.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwprl.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwprl.csv diff --git a/example_4step/data/base-data/ma.hbwprm.csv b/bca4abm/examples/example_4step/data/base-data/ma.hbwprm.csv similarity index 100% rename from example_4step/data/base-data/ma.hbwprm.csv rename to bca4abm/examples/example_4step/data/base-data/ma.hbwprm.csv diff --git a/example_4step/data/base-data/ma.nhbnwdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.nhbnwdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.nhbnwdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.nhbnwdcls.csv diff --git a/example_4step/data/base-data/ma.nhbwdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.nhbwdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.nhbwdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.nhbwdcls.csv diff --git a/example_4step/data/base-data/ma.nhnwpr.csv b/bca4abm/examples/example_4step/data/base-data/ma.nhnwpr.csv similarity index 100% rename from example_4step/data/base-data/ma.nhnwpr.csv rename to bca4abm/examples/example_4step/data/base-data/ma.nhnwpr.csv diff --git a/example_4step/data/base-data/ma.nhwpr.csv b/bca4abm/examples/example_4step/data/base-data/ma.nhwpr.csv similarity index 100% rename from example_4step/data/base-data/ma.nhwpr.csv rename to bca4abm/examples/example_4step/data/base-data/ma.nhwpr.csv diff --git a/example_4step/data/base-data/ma.schdcls.csv b/bca4abm/examples/example_4step/data/base-data/ma.schdcls.csv similarity index 100% rename from example_4step/data/base-data/ma.schdcls.csv rename to bca4abm/examples/example_4step/data/base-data/ma.schdcls.csv diff --git a/example_4step/data/base-data/ma.schpr.csv b/bca4abm/examples/example_4step/data/base-data/ma.schpr.csv similarity index 100% rename from example_4step/data/base-data/ma.schpr.csv rename to bca4abm/examples/example_4step/data/base-data/ma.schpr.csv diff --git a/example_4step/data/base-data/mf.cval.csv b/bca4abm/examples/example_4step/data/base-data/mf.cval.csv similarity index 100% rename from example_4step/data/base-data/mf.cval.csv rename to bca4abm/examples/example_4step/data/base-data/mf.cval.csv diff --git a/example_4step/data/base-data/mode_choice_pa.omx b/bca4abm/examples/example_4step/data/base-data/mode_choice_pa.omx similarity index 100% rename from example_4step/data/base-data/mode_choice_pa.omx rename to bca4abm/examples/example_4step/data/base-data/mode_choice_pa.omx diff --git a/example_4step/data/base-data/parking_cost.csv b/bca4abm/examples/example_4step/data/base-data/parking_cost.csv similarity index 100% rename from example_4step/data/base-data/parking_cost.csv rename to bca4abm/examples/example_4step/data/base-data/parking_cost.csv diff --git a/example_4step/data/base-data/parking_cost.omx b/bca4abm/examples/example_4step/data/base-data/parking_cost.omx similarity index 100% rename from example_4step/data/base-data/parking_cost.omx rename to bca4abm/examples/example_4step/data/base-data/parking_cost.omx diff --git a/example_4step/data/base-data/skims_mfs.omx b/bca4abm/examples/example_4step/data/base-data/skims_mfs.omx similarity index 100% rename from example_4step/data/base-data/skims_mfs.omx rename to bca4abm/examples/example_4step/data/base-data/skims_mfs.omx diff --git a/example_4step/data/build-data/assign_mfs.omx b/bca4abm/examples/example_4step/data/build-data/assign_mfs.omx similarity index 100% rename from example_4step/data/build-data/assign_mfs.omx rename to bca4abm/examples/example_4step/data/build-data/assign_mfs.omx diff --git a/example_4step/data/build-data/cocs.csv b/bca4abm/examples/example_4step/data/build-data/cocs.csv similarity index 100% rename from example_4step/data/build-data/cocs.csv rename to bca4abm/examples/example_4step/data/build-data/cocs.csv diff --git a/example_4step/data/build-data/linksMD1.csv b/bca4abm/examples/example_4step/data/build-data/linksMD1.csv similarity index 100% rename from example_4step/data/build-data/linksMD1.csv rename to bca4abm/examples/example_4step/data/build-data/linksMD1.csv diff --git a/example_4step/data/build-data/linksPM2.csv b/bca4abm/examples/example_4step/data/build-data/linksPM2.csv similarity index 100% rename from example_4step/data/build-data/linksPM2.csv rename to bca4abm/examples/example_4step/data/build-data/linksPM2.csv diff --git a/example_4step/data/build-data/ma.collpr.csv b/bca4abm/examples/example_4step/data/build-data/ma.collpr.csv similarity index 100% rename from example_4step/data/build-data/ma.collpr.csv rename to bca4abm/examples/example_4step/data/build-data/ma.collpr.csv diff --git a/example_4step/data/build-data/ma.hbcdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbcdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbcdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbcdcls.csv diff --git a/example_4step/data/build-data/ma.hbohdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbohdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbohdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbohdcls.csv diff --git a/example_4step/data/build-data/ma.hboldcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hboldcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hboldcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hboldcls.csv diff --git a/example_4step/data/build-data/ma.hbomdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbomdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbomdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbomdcls.csv diff --git a/example_4step/data/build-data/ma.hboprh.csv b/bca4abm/examples/example_4step/data/build-data/ma.hboprh.csv similarity index 100% rename from example_4step/data/build-data/ma.hboprh.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hboprh.csv diff --git a/example_4step/data/build-data/ma.hboprl.csv b/bca4abm/examples/example_4step/data/build-data/ma.hboprl.csv similarity index 100% rename from example_4step/data/build-data/ma.hboprl.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hboprl.csv diff --git a/example_4step/data/build-data/ma.hboprm.csv b/bca4abm/examples/example_4step/data/build-data/ma.hboprm.csv similarity index 100% rename from example_4step/data/build-data/ma.hboprm.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hboprm.csv diff --git a/example_4step/data/build-data/ma.hbrhdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrhdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrhdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrhdcls.csv diff --git a/example_4step/data/build-data/ma.hbrldcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrldcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrldcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrldcls.csv diff --git a/example_4step/data/build-data/ma.hbrmdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrmdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrmdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrmdcls.csv diff --git a/example_4step/data/build-data/ma.hbrprh.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrprh.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrprh.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrprh.csv diff --git a/example_4step/data/build-data/ma.hbrprl.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrprl.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrprl.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrprl.csv diff --git a/example_4step/data/build-data/ma.hbrprm.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbrprm.csv similarity index 100% rename from example_4step/data/build-data/ma.hbrprm.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbrprm.csv diff --git a/example_4step/data/build-data/ma.hbshdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbshdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbshdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbshdcls.csv diff --git a/example_4step/data/build-data/ma.hbsldcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbsldcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbsldcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbsldcls.csv diff --git a/example_4step/data/build-data/ma.hbsmdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbsmdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbsmdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbsmdcls.csv diff --git a/example_4step/data/build-data/ma.hbsprh.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbsprh.csv similarity index 100% rename from example_4step/data/build-data/ma.hbsprh.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbsprh.csv diff --git a/example_4step/data/build-data/ma.hbsprl.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbsprl.csv similarity index 100% rename from example_4step/data/build-data/ma.hbsprl.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbsprl.csv diff --git a/example_4step/data/build-data/ma.hbsprm.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbsprm.csv similarity index 100% rename from example_4step/data/build-data/ma.hbsprm.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbsprm.csv diff --git a/example_4step/data/build-data/ma.hbwhdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwhdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwhdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwhdcls.csv diff --git a/example_4step/data/build-data/ma.hbwldcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwldcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwldcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwldcls.csv diff --git a/example_4step/data/build-data/ma.hbwmdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwmdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwmdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwmdcls.csv diff --git a/example_4step/data/build-data/ma.hbwprh.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwprh.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwprh.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwprh.csv diff --git a/example_4step/data/build-data/ma.hbwprl.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwprl.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwprl.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwprl.csv diff --git a/example_4step/data/build-data/ma.hbwprm.csv b/bca4abm/examples/example_4step/data/build-data/ma.hbwprm.csv similarity index 100% rename from example_4step/data/build-data/ma.hbwprm.csv rename to bca4abm/examples/example_4step/data/build-data/ma.hbwprm.csv diff --git a/example_4step/data/build-data/ma.nhbnwdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.nhbnwdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.nhbnwdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.nhbnwdcls.csv diff --git a/example_4step/data/build-data/ma.nhbwdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.nhbwdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.nhbwdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.nhbwdcls.csv diff --git a/example_4step/data/build-data/ma.nhnwpr.csv b/bca4abm/examples/example_4step/data/build-data/ma.nhnwpr.csv similarity index 100% rename from example_4step/data/build-data/ma.nhnwpr.csv rename to bca4abm/examples/example_4step/data/build-data/ma.nhnwpr.csv diff --git a/example_4step/data/build-data/ma.nhwpr.csv b/bca4abm/examples/example_4step/data/build-data/ma.nhwpr.csv similarity index 100% rename from example_4step/data/build-data/ma.nhwpr.csv rename to bca4abm/examples/example_4step/data/build-data/ma.nhwpr.csv diff --git a/example_4step/data/build-data/ma.schdcls.csv b/bca4abm/examples/example_4step/data/build-data/ma.schdcls.csv similarity index 100% rename from example_4step/data/build-data/ma.schdcls.csv rename to bca4abm/examples/example_4step/data/build-data/ma.schdcls.csv diff --git a/example_4step/data/build-data/ma.schpr.csv b/bca4abm/examples/example_4step/data/build-data/ma.schpr.csv similarity index 100% rename from example_4step/data/build-data/ma.schpr.csv rename to bca4abm/examples/example_4step/data/build-data/ma.schpr.csv diff --git a/example_4step/data/build-data/mf.cval.csv b/bca4abm/examples/example_4step/data/build-data/mf.cval.csv similarity index 100% rename from example_4step/data/build-data/mf.cval.csv rename to bca4abm/examples/example_4step/data/build-data/mf.cval.csv diff --git a/example_4step/data/build-data/mode_choice_pa.omx b/bca4abm/examples/example_4step/data/build-data/mode_choice_pa.omx similarity index 100% rename from example_4step/data/build-data/mode_choice_pa.omx rename to bca4abm/examples/example_4step/data/build-data/mode_choice_pa.omx diff --git a/example_4step/data/build-data/parking_cost.csv b/bca4abm/examples/example_4step/data/build-data/parking_cost.csv similarity index 100% rename from example_4step/data/build-data/parking_cost.csv rename to bca4abm/examples/example_4step/data/build-data/parking_cost.csv diff --git a/example_4step/data/build-data/parking_cost.omx b/bca4abm/examples/example_4step/data/build-data/parking_cost.omx similarity index 100% rename from example_4step/data/build-data/parking_cost.omx rename to bca4abm/examples/example_4step/data/build-data/parking_cost.omx diff --git a/example_4step/data/build-data/skims_mfs.omx b/bca4abm/examples/example_4step/data/build-data/skims_mfs.omx similarity index 100% rename from example_4step/data/build-data/skims_mfs.omx rename to bca4abm/examples/example_4step/data/build-data/skims_mfs.omx diff --git a/example_4step/data/moves_2010_summer_running_rates.csv b/bca4abm/examples/example_4step/data/moves_2010_summer_running_rates.csv similarity index 100% rename from example_4step/data/moves_2010_summer_running_rates.csv rename to bca4abm/examples/example_4step/data/moves_2010_summer_running_rates.csv diff --git a/example_4step/data/zone_districts.csv b/bca4abm/examples/example_4step/data/zone_districts.csv similarity index 100% rename from example_4step/data/zone_districts.csv rename to bca4abm/examples/example_4step/data/zone_districts.csv diff --git a/example_4step/output/.gitignore b/bca4abm/examples/example_4step/output/.gitignore similarity index 100% rename from example_4step/output/.gitignore rename to bca4abm/examples/example_4step/output/.gitignore diff --git a/example_abm/configs/aggregate_trips.csv b/bca4abm/examples/example_abm/configs/aggregate_trips.csv similarity index 100% rename from example_abm/configs/aggregate_trips.csv rename to bca4abm/examples/example_abm/configs/aggregate_trips.csv diff --git a/example_abm/configs/aggregate_trips.yaml b/bca4abm/examples/example_abm/configs/aggregate_trips.yaml similarity index 100% rename from example_abm/configs/aggregate_trips.yaml rename to bca4abm/examples/example_abm/configs/aggregate_trips.yaml diff --git a/example_abm/configs/auto_ownership.csv b/bca4abm/examples/example_abm/configs/auto_ownership.csv similarity index 100% rename from example_abm/configs/auto_ownership.csv rename to bca4abm/examples/example_abm/configs/auto_ownership.csv diff --git a/example_abm/configs/auto_ownership.yaml b/bca4abm/examples/example_abm/configs/auto_ownership.yaml similarity index 100% rename from example_abm/configs/auto_ownership.yaml rename to bca4abm/examples/example_abm/configs/auto_ownership.yaml diff --git a/example_abm/configs/demographics.csv b/bca4abm/examples/example_abm/configs/demographics.csv similarity index 100% rename from example_abm/configs/demographics.csv rename to bca4abm/examples/example_abm/configs/demographics.csv diff --git a/example_abm/configs/demographics.yaml b/bca4abm/examples/example_abm/configs/demographics.yaml similarity index 100% rename from example_abm/configs/demographics.yaml rename to bca4abm/examples/example_abm/configs/demographics.yaml diff --git a/example_abm/configs/link.csv b/bca4abm/examples/example_abm/configs/link.csv similarity index 100% rename from example_abm/configs/link.csv rename to bca4abm/examples/example_abm/configs/link.csv diff --git a/example_abm/configs/link.yaml b/bca4abm/examples/example_abm/configs/link.yaml similarity index 100% rename from example_abm/configs/link.yaml rename to bca4abm/examples/example_abm/configs/link.yaml diff --git a/example_abm/configs/link_daily.csv b/bca4abm/examples/example_abm/configs/link_daily.csv similarity index 100% rename from example_abm/configs/link_daily.csv rename to bca4abm/examples/example_abm/configs/link_daily.csv diff --git a/example_abm/configs/link_daily.yaml b/bca4abm/examples/example_abm/configs/link_daily.yaml similarity index 100% rename from example_abm/configs/link_daily.yaml rename to bca4abm/examples/example_abm/configs/link_daily.yaml diff --git a/example_abm/configs/logging.yaml b/bca4abm/examples/example_abm/configs/logging.yaml similarity index 100% rename from example_abm/configs/logging.yaml rename to bca4abm/examples/example_abm/configs/logging.yaml diff --git a/example_abm/configs/person_trips.csv b/bca4abm/examples/example_abm/configs/person_trips.csv similarity index 100% rename from example_abm/configs/person_trips.csv rename to bca4abm/examples/example_abm/configs/person_trips.csv diff --git a/example_abm/configs/person_trips.yaml b/bca4abm/examples/example_abm/configs/person_trips.yaml similarity index 100% rename from example_abm/configs/person_trips.yaml rename to bca4abm/examples/example_abm/configs/person_trips.yaml diff --git a/example_abm/configs/physical_activity.yaml b/bca4abm/examples/example_abm/configs/physical_activity.yaml similarity index 100% rename from example_abm/configs/physical_activity.yaml rename to bca4abm/examples/example_abm/configs/physical_activity.yaml diff --git a/example_abm/configs/physical_activity_person.csv b/bca4abm/examples/example_abm/configs/physical_activity_person.csv similarity index 100% rename from example_abm/configs/physical_activity_person.csv rename to bca4abm/examples/example_abm/configs/physical_activity_person.csv diff --git a/example_abm/configs/physical_activity_trip.csv b/bca4abm/examples/example_abm/configs/physical_activity_trip.csv similarity index 100% rename from example_abm/configs/physical_activity_trip.csv rename to bca4abm/examples/example_abm/configs/physical_activity_trip.csv diff --git a/example_abm/configs/settings.yaml b/bca4abm/examples/example_abm/configs/settings.yaml similarity index 100% rename from example_abm/configs/settings.yaml rename to bca4abm/examples/example_abm/configs/settings.yaml diff --git a/example_abm/configs/tables.yaml b/bca4abm/examples/example_abm/configs/tables.yaml similarity index 100% rename from example_abm/configs/tables.yaml rename to bca4abm/examples/example_abm/configs/tables.yaml diff --git a/example_abm/data/.gitignore b/bca4abm/examples/example_abm/data/.gitignore similarity index 100% rename from example_abm/data/.gitignore rename to bca4abm/examples/example_abm/data/.gitignore diff --git a/example_abm/data/aggregate_data_manifest.csv b/bca4abm/examples/example_abm/data/aggregate_data_manifest.csv similarity index 100% rename from example_abm/data/aggregate_data_manifest.csv rename to bca4abm/examples/example_abm/data/aggregate_data_manifest.csv diff --git a/example_abm/data/base-data/link_ampk.csv b/bca4abm/examples/example_abm/data/base-data/link_ampk.csv similarity index 100% rename from example_abm/data/base-data/link_ampk.csv rename to bca4abm/examples/example_abm/data/base-data/link_ampk.csv diff --git a/example_abm/data/base-data/link_daily.csv b/bca4abm/examples/example_abm/data/base-data/link_daily.csv similarity index 100% rename from example_abm/data/base-data/link_daily.csv rename to bca4abm/examples/example_abm/data/base-data/link_daily.csv diff --git a/example_abm/data/base-data/testlos.omx b/bca4abm/examples/example_abm/data/base-data/testlos.omx similarity index 100% rename from example_abm/data/base-data/testlos.omx rename to bca4abm/examples/example_abm/data/base-data/testlos.omx diff --git a/example_abm/data/base-data/testtrips.omx b/bca4abm/examples/example_abm/data/base-data/testtrips.omx similarity index 100% rename from example_abm/data/base-data/testtrips.omx rename to bca4abm/examples/example_abm/data/base-data/testtrips.omx diff --git a/example_abm/data/base_households.csv b/bca4abm/examples/example_abm/data/base_households.csv similarity index 100% rename from example_abm/data/base_households.csv rename to bca4abm/examples/example_abm/data/base_households.csv diff --git a/example_abm/data/basetrips_buildlos.csv b/bca4abm/examples/example_abm/data/basetrips_buildlos.csv similarity index 100% rename from example_abm/data/basetrips_buildlos.csv rename to bca4abm/examples/example_abm/data/basetrips_buildlos.csv diff --git a/example_abm/data/basetrips_normal.csv b/bca4abm/examples/example_abm/data/basetrips_normal.csv similarity index 100% rename from example_abm/data/basetrips_normal.csv rename to bca4abm/examples/example_abm/data/basetrips_normal.csv diff --git a/example_abm/data/build-data/link_ampk.csv b/bca4abm/examples/example_abm/data/build-data/link_ampk.csv similarity index 100% rename from example_abm/data/build-data/link_ampk.csv rename to bca4abm/examples/example_abm/data/build-data/link_ampk.csv diff --git a/example_abm/data/build-data/link_daily.csv b/bca4abm/examples/example_abm/data/build-data/link_daily.csv similarity index 100% rename from example_abm/data/build-data/link_daily.csv rename to bca4abm/examples/example_abm/data/build-data/link_daily.csv diff --git a/example_abm/data/build-data/testlos.omx b/bca4abm/examples/example_abm/data/build-data/testlos.omx similarity index 100% rename from example_abm/data/build-data/testlos.omx rename to bca4abm/examples/example_abm/data/build-data/testlos.omx diff --git a/example_abm/data/build-data/testtrips.omx b/bca4abm/examples/example_abm/data/build-data/testtrips.omx similarity index 100% rename from example_abm/data/build-data/testtrips.omx rename to bca4abm/examples/example_abm/data/build-data/testtrips.omx diff --git a/example_abm/data/build_households.csv b/bca4abm/examples/example_abm/data/build_households.csv similarity index 100% rename from example_abm/data/build_households.csv rename to bca4abm/examples/example_abm/data/build_households.csv diff --git a/example_abm/data/buildtrips_baselos.csv b/bca4abm/examples/example_abm/data/buildtrips_baselos.csv similarity index 100% rename from example_abm/data/buildtrips_baselos.csv rename to bca4abm/examples/example_abm/data/buildtrips_baselos.csv diff --git a/example_abm/data/buildtrips_normal.csv b/bca4abm/examples/example_abm/data/buildtrips_normal.csv similarity index 100% rename from example_abm/data/buildtrips_normal.csv rename to bca4abm/examples/example_abm/data/buildtrips_normal.csv diff --git a/example_abm/data/link_data_manifest.csv b/bca4abm/examples/example_abm/data/link_data_manifest.csv similarity index 100% rename from example_abm/data/link_data_manifest.csv rename to bca4abm/examples/example_abm/data/link_data_manifest.csv diff --git a/example_abm/data/persons.csv b/bca4abm/examples/example_abm/data/persons.csv similarity index 100% rename from example_abm/data/persons.csv rename to bca4abm/examples/example_abm/data/persons.csv diff --git a/example_abm/output/.gitignore b/bca4abm/examples/example_abm/output/.gitignore similarity index 100% rename from example_abm/output/.gitignore rename to bca4abm/examples/example_abm/output/.gitignore diff --git a/bca4abm/processors/__init__.py b/bca4abm/processors/__init__.py index 0cf277d..02ff31b 100644 --- a/bca4abm/processors/__init__.py +++ b/bca4abm/processors/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import # bca4abm # Copyright (C) 2016 RSG Inc # See full license in LICENSE.txt. diff --git a/bca4abm/processors/abm/__init__.py b/bca4abm/processors/abm/__init__.py index 1600194..a774a5a 100644 --- a/bca4abm/processors/abm/__init__.py +++ b/bca4abm/processors/abm/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import from . import person_trips from . import demographics from . import auto_ownership diff --git a/bca4abm/processors/four_step/__init__.py b/bca4abm/processors/four_step/__init__.py index 3a17a0e..533ee75 100644 --- a/bca4abm/processors/four_step/__init__.py +++ b/bca4abm/processors/four_step/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import from . import aggregate_demographics from . import aggregate_zone from . import aggregate_od diff --git a/bca4abm/tables/__init__.py b/bca4abm/tables/__init__.py index d1e1179..0011ef9 100644 --- a/bca4abm/tables/__init__.py +++ b/bca4abm/tables/__init__.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import # bca4abm # Copyright (C) 2016 RSG Inc # See full license in LICENSE.txt. diff --git a/bca4abm/tests/test_cli.py b/bca4abm/tests/test_cli.py new file mode 100644 index 0000000..c2fdc95 --- /dev/null +++ b/bca4abm/tests/test_cli.py @@ -0,0 +1,13 @@ +import pytest +import subprocess + +# the following import has the side-effect of registering injectables +from bca4abm import bca4abm as bca + + +def test_cli(): + + # cp = completed process + cp = subprocess.run(['bca4abm', '-h'], capture_output=True) + + assert 'usage: bca4abm [-h] [--version]' in str(cp.stdout) diff --git a/bca4abm/util/misc.py b/bca4abm/util/misc.py index 33d9e88..211f070 100644 --- a/bca4abm/util/misc.py +++ b/bca4abm/util/misc.py @@ -1,4 +1,3 @@ -from __future__ import print_function # bca4abm # See full license in LICENSE.txt. diff --git a/bin/build_docs.sh b/bin/build_docs.sh deleted file mode 100755 index 5b6514a..0000000 --- a/bin/build_docs.sh +++ /dev/null @@ -1,63 +0,0 @@ -#! /usr/bin/env bash - -# Copied from github.com/sympy/sympy -# -# This file automatically deploys changes to http://rsginc.github.io/bca4abm/. -# This will only happen when building a non-pull request build on the master -# branch of bca4abm. -# It requires an access token which should be present in .travis.yml file. -# -# Following is the procedure to get the access token: -# -# $ curl -X POST -u -H "Content-Type: application/json" -d\ -# "{\"scopes\":[\"public_repo\"],\"note\":\"token for pushing from travis\"}"\ -# https://api.github.com/authorizations -# -# It'll give you a JSON response having a key called "token". -# -# $ gem install travis -# $ travis encrypt -r sympy/sympy GH_TOKEN= env.global -# -# This will give you an access token("secure"). This helps in creating an -# environment variable named GH_TOKEN while building. -# -# Add this secure code to .travis.yml as described here http://docs.travis-ci.com/user/encryption-keys/ - -# Exit on error -set -e - -ACTUAL_TRAVIS_JOB_NUMBER=`echo $TRAVIS_JOB_NUMBER| cut -d'.' -f 2` - - -if [ "$TRAVIS_REPO_SLUG" == "RSGInc/bca4abm" ] && \ - [ "$TRAVIS_BRANCH" == "master" ] && \ - [ "$TRAVIS_PULL_REQUEST" == "false" ] && \ - [ "$ACTUAL_TRAVIS_JOB_NUMBER" == "1" ]; then - - echo "Installing dependencies" - conda install --yes --quiet sphinx numpydoc - pip install sphinx_rtd_theme - - echo "Building docs" - cd docs - make clean - make html - - cd ../../ - echo "Setting git attributes" - git config --global user.email "toliwaga@gmail.com" - git config --global user.name "Jeff Doyle" - - echo "Cloning repository" - git clone --quiet --single-branch --branch=gh-pages https://${GH_TOKEN}@github.com/RSGInc/bca4abm.git gh-pages > /dev/null 2>&1 - - cd gh-pages - rm -rf * - cp -R ../bca4abm/docs/_build/html/* ./ - touch .nojekyll - git add -A . - - git commit -am "Update dev doc after building $TRAVIS_BUILD_NUMBER" - echo "Pushing commit" - git push -fq origin gh-pages > /dev/null 2>&1 -fi diff --git a/bin/test_build_docs.sh b/bin/test_build_docs.sh deleted file mode 100755 index 5fc5331..0000000 --- a/bin/test_build_docs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#! /usr/bin/env bash - -# Exit on error -set -e - -echo "Installing dependencies" - -#source activate bca - -#conda install --yes --quiet sphinx numpydoc -#pip install sphinx_rtd_theme - -#pip install sphinx numpydoc sphinx_rtd_theme -pip freeze - -echo "Building docs" -cd docs -make clean -make html diff --git a/docs/conf.py b/docs/conf.py index 250b5e5..e13eef4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,13 +17,7 @@ import sphinx_rtd_theme -# -- Get Package Version -------------------------------------------------- -with open("../setup.py") as file: - lines = file.readlines() - for l in lines: - if "version" in l: - VERSION = l.replace("version='", "").replace("',", "").replace(" ", "") - print("package version: " + VERSION) +from bca4abm import __version__ as VERSION # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the diff --git a/docs/examples.rst b/docs/examples.rst index aad6763..243bdb6 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -5,11 +5,18 @@ Examples ======== There are two example implementations included in the project, one for an activity-based model and one for -for a four-step (trip-based) model. bca4abm requires model outputs for a base and a build alternative. The required model -outputs which are input to bca4abm need to be the same in each alternative. The values -in the model outputs can be different, but the files, the formats, the number of +for a four-step (trip-based) model. bca4abm requires model outputs for a base and a build alternative. The required model +outputs which are input to bca4abm need to be the same in each alternative. The values +in the model outputs can be different, but the files, the formats, the number of matrices, etc. all need to be the same. The outputs need to be in open data formats - CSV and `open matrix (OMX) `_. +Each example may be run via + + :: + + bca4abm create --example [example name] + bca4abm run [example name] + Basic Setup ----------- @@ -18,10 +25,9 @@ Each benefits calculator model has the same folder setup: * configs - setting and data processor expression files for the overall tool and for each data processor * data - base and build model scenario input data tables and matrices * output - an empty output folder - * run_bca.py - script to run the model -The ``configs`` folder contains settings, expressions files, and other files required for specifying -model utilities and form. The first place to start in the ``configs`` folder is ``settings.yaml``, which +The ``configs`` folder contains settings, expressions files, and other files required for specifying +model utilities and form. The first place to start in the ``configs`` folder is ``settings.yaml``, which is the main settings file for the model run. This file includes: * ``models`` - list of model steps to run - auto demographics processor, person trips processor, etc. @@ -36,13 +42,13 @@ is the main settings file for the model run. This file includes: * ``DISCOUNT_RATE`` - cost discounting factor * ``ANNUALIZATION_FACTOR`` - daily to annual factor -Included in the ``configs`` folder are the model specification files that store the configuration files for each model. Also included +Included in the ``configs`` folder are the model specification files that store the configuration files for each model. Also included in the ``configs`` folder is the ``tables.yaml`` file that stores the file names for each data processor input table, as well as the mapping from input column names to column names used in the expressions. The file also specifies the input -table file name and the name of the table used in the expressions. All fields to be used in expressions must be in the mapping +table file name and the name of the table used in the expressions. All fields to be used in expressions must be in the mapping since the mapping defines which fields are loaded into memory. -ABM Example +ABM Example ----------- Models @@ -60,7 +66,7 @@ The models are: * finalize_abm_results - writes results by equity group (aka COC or community of concern) * write_data_dictionary - writes data pipeline data table column types for debugging * write_tables - writes output files - + The current set of files are below. +------------------------------------------------+--------------------------------------------------------------------+ @@ -90,18 +96,18 @@ The current set of files are below. +------------------------------------------------+--------------------------------------------------------------------+ ABM expression file specifics: - - * All target fields specified in the expressions file will be aggregated and written out to the summary results file. Each summary result entry is named as follows: the two digit processor abbreviation + the target field. For example: AO_base_auto_ownership_cost. + + * All target fields specified in the expressions file will be aggregated and written out to the summary results file. Each summary result entry is named as follows: the two digit processor abbreviation + the target field. For example: AO_base_auto_ownership_cost. * aggregate_trips.csv references the fields in aggregate_data_manifest.csv as: `base_trips, build_trips, base_ivt, build_ivt, vot, aoc_units, base_aoc, build_aoc, toll_units, base_toll, build_toll` * auto_ownership.csv, demographics.csv, physical_activity_person.csv refer to the person table as `persons` * link.csv, link_daily.csv refer to the links table as `links` * person_trips.csv refers to the trips table as `trips` * physical_activity_trip.csv refers to the base and build trips as `trips, base, build` - + Data ~~~~ -The ``data`` folder contains the input data for the base and build scenario. +The ``data`` folder contains the input data for the base and build scenario. * Disaggregate data @@ -115,21 +121,21 @@ The ``data`` folder contains the input data for the base and build scenario. * Aggregate data - * aggregate_data_manifest.csv - aggregate markets for which to apply the aggregate calculations defined in aggregate_trips.csv - each row in the manifest contains a trip matrix, an in-vehicle time matrix, an auto operating cost matrix, and a toll matrix. Each matrix will be loaded for the base and build alternative from the base and build data folders. These matrices + the additional settings in each row for units, value-of-time, etc. are referenced in the expressions. + * aggregate_data_manifest.csv - aggregate markets for which to apply the aggregate calculations defined in aggregate_trips.csv - each row in the manifest contains a trip matrix, an in-vehicle time matrix, an auto operating cost matrix, and a toll matrix. Each matrix will be loaded for the base and build alternative from the base and build data folders. These matrices + the additional settings in each row for units, value-of-time, etc. are referenced in the expressions. * base data folder * testlos.omx - base alternative level-of-service matrices - IVT, opercost, tollcost * testtrips.omx - base alternative trips - * build data folder + * build data folder * testlos.omx - build alternative level-of-service matrices - IVT, opercost, tollcost * testtrips.omx - build alternative trips - * Link data + * Link data * link_data_manifest.csv - link time period tables to process in link processor. The daily like table is not specified since it is handled by a separate daily link processor. - * base data folder + * base data folder * link_ampk.csv - base alternative AM peak link records * link_daily.csv - base alternative daily link records @@ -143,7 +149,7 @@ Outputs ~~~~~~~ The ABM example outputs are: - + * asim.log - log file * data_dict.txt - pipeline table data and fields * final_summary_results.csv - all calculated measures. All target fields specified in the expressions file will be aggregated and written out to the summary results file. Each summary result entry is named as follows: the two digit processor abbreviation + the target field. For example: `AO_base_auto_ownership_cost`. @@ -153,7 +159,7 @@ The ABM example outputs are: * pipeline.h5.h5 - HDF5 data pipeline which contains all the data tables in pandas format and can be read into pandas with `pd.read_hdf`. * If `trace_hh_id` is specified in the settings file: - + * auto_ownership.csv - results by person * demographics.csv - results by person * person_trips.csv - results by person @@ -196,32 +202,32 @@ The current set of files are below. +------------------------------------------------+--------------------------------------------------------------------+ 4Step expression file specifics: - + * The `silo` column in the expressions files is used for specifying the relevant communities-of-concern (COC) for the result. An `*` is used to specify that the result applies to everyone. If the result applies to just one COC, for example, low_income hhs, then the silo entry should correspond to a valid `coc_silos` entry in the setting file, such as `coc_lowinc.` * aggregate_demographics.csv refers to the zone table as `cvals` - * aggregate_zone.csv refers to the zone table as `zones` and prepends `base_` or `build_` - * aggregate_od.csv refers to the matrices specified in `aggregate_od_matrices` by name and appends `_base` or `_build` + * aggregate_zone.csv refers to the zone table as `zones` and prepends `base_` or `build_` + * aggregate_od.csv refers to the matrices specified in `aggregate_od_matrices` by name and appends `_base` or `_build` * link.csv refers to the links table specified in the `link_daily_file_names` by `links` plus the name appended Data ~~~~ -The ``data`` folder contains the input data for the base and build scenario. +The ``data`` folder contains the input data for the base and build scenario. * Link - - * linksMD1.csv - link MD1 period assignment results + + * linksMD1.csv - link MD1 period assignment results * linksPM2.csv - link PM2 assignment results - - * OD - + + * OD + * assign_mfs.omx - assignment matrices * skims_mfs.omx - skims matrices * mode_choice_pa.omx - mode choice production-attraction matrices * parking_cost.omx - parking costs at the destination - - * Zone - + + * Zone + * mf.cval.csv - see above * cocs.csv - externally defined COC share of households by zone * Productions files such as ma.hboprh.csv (hbo high inc) @@ -234,23 +240,23 @@ Outputs ~~~~~~~ The 4step example outputs are: - + * bca.log - log file * data_dict.txt - pipeline table data and fields * final_aggregate_results.csv - results by measure and COC, including for everyone * pipeline.h5.h5 - HDF5 data pipeline which contains all the data tables in pandas format and can be read into pandas with `pd.read_hdf`. * Intermediate outputs for debugging - - * final_zone_demographics.csv - demographics processor calculated fields for each zone - * final_aggregate_zone_summary.csv - zone processor calculated fields for each zone - * final_aggregate_od_zone_summary.csv - OD processor calculated fields summed to each origin zone - * final_aggregate_od_district_summary.csv - District-to-district OD processor calculated fields summed + + * final_zone_demographics.csv - demographics processor calculated fields for each zone + * final_aggregate_zone_summary.csv - zone processor calculated fields for each zone + * final_aggregate_od_zone_summary.csv - OD processor calculated fields summed to each origin zone + * final_aggregate_od_district_summary.csv - District-to-district OD processor calculated fields summed * link_daily_results_base|build.csv - link processor calculated fields - + * If `trace_od` is specified in the settings file: - - * aggregate_demographics.csv - demographics processor calculated fields for the trace origin zone - * aggregate_zone.csv - zone processor calculated fields for the trace origin zone - * aggregate_od.csv - OD processor calculated fields for the trace OD pair - * link_daily_results_build.csv - build scenario link processor calculated fields for links in the trace origin or destination zone - * link_daily_results_base.csv - base scenario link processor calculated fields for links in the trace origin or destination zone + + * aggregate_demographics.csv - demographics processor calculated fields for the trace origin zone + * aggregate_zone.csv - zone processor calculated fields for the trace origin zone + * aggregate_od.csv - OD processor calculated fields for the trace OD pair + * link_daily_results_build.csv - build scenario link processor calculated fields for links in the trace origin or destination zone + * link_daily_results_base.csv - base scenario link processor calculated fields for links in the trace origin or destination zone diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst index 73dc4d6..1789e50 100644 --- a/docs/gettingstarted.rst +++ b/docs/gettingstarted.rst @@ -15,11 +15,11 @@ Installation conda create -n bca4abmtest python=3.7 activate bca4abmtest -* Get and install the bca4abm package from `GitHub `_ +* Get and install the bca4abm package from `PyPi `_ :: - pip install https://github.com/RSGInc/bca4abm/zipball/master + pip install bca4abm .. note:: @@ -39,20 +39,45 @@ Installation Running the Model ----------------- -* Activate the conda Python environment +* View the list of available examples :: - activate bca4abmtest + bca4abm create --list + +* Create a local copy of an example folder + +:: + + bca4abm create --example example_4step --destination my_test_example + +* Run the example + +:: -* Change to the ABM or 4step example folder and then run the run_bca.py program + bca4abm run --working_dir my_test_example + +or :: - python run_bca.py + bca4abm run -c my_test_example/configs -d my_test_example/data -o my_test_example/output * Check the outputs folder for results, for example the ``final_aggregate_results.csv`` file for the 4step example +More usage information can be found via ``bca4abm -h`` and ``bca4abm [command] -h`` + +.. note:: + + A customizable run script for power users can be found in the `Github repo `__. + This script takes many of the same arguments as the ``bca4abm run`` command, including paths to + ``--config``, ``--data``, and ``--output`` directories. It looks for these folders in the current + working directory by default. + + :: + + python run_bca.py + Process Overview ---------------- diff --git a/example_abm/run_bca.py b/example_abm/run_bca.py deleted file mode 100644 index 81634dc..0000000 --- a/example_abm/run_bca.py +++ /dev/null @@ -1,62 +0,0 @@ -from __future__ import print_function -# bca4abm -# Copyright (C) 2016 RSG Inc -# See full license in LICENSE.txt. - -import pandas as pd -import numpy as np -import os -import warnings -import logging - -# the following import has the side-effect of registering injectables -from bca4abm import bca4abm as bca - -from activitysim.core import tracing -from activitysim.core import pipeline -from activitysim.core import inject - -from activitysim.core.config import handle_standard_args -from activitysim.core.config import setting - -parent_dir = os.path.dirname(__file__) - - -# Add (and handle) 'standard' activitysim arguments: -# --config : specify path to config_dir -# --output : specify path to output_dir -# --data : specify path to data_dir -# --models : specify run_list name -# --resume : resume_after -handle_standard_args() - -tracing.config_logger() -tracing.delete_csv_files() # only modifies output_dir - -warnings.simplefilter("always") - -logging.captureWarnings(capture=True) - -old_settings = np.seterr(divide='raise', over='raise', invalid='raise', under='ignore') -print("numpy.geterr: %s" % np.geterr()) - - -t0 = tracing.print_elapsed_time() - -MODELS = setting('models') - -# If you provide a resume_after argument to pipeline.run -# the pipeline manager will attempt to load checkpointed tables from the checkpoint store -# and resume pipeline processing on the next submodel step after the specified checkpoint -resume_after = setting('resume_after', None) - -if resume_after: - print("resume_after", resume_after) - - -pipeline.run(models=MODELS, resume_after=resume_after) - -# tables will no longer be available after pipeline is closed -pipeline.close_pipeline() - -t0 = tracing.print_elapsed_time("all models", t0) diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..9fb558c --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,12 @@ +## Scripts + +### Run your model with run_bca.py + + - Set up your `config`, `data`, and `output` folders + - Copy `run_bca.py` to the same directory OR specify inputs on the command line + - Multiple `--config` and `--data` directories can be used + - Run `python run_bca.py` + +### Other scripts + - create_mce_example.py - this script was used to prepare input data for the example_4step template + - cvt_freight_skims.py - Python 2 script for converting CSV skims to OMX format diff --git a/example_4step/run_bca.py b/scripts/run_bca.py similarity index 59% rename from example_4step/run_bca.py rename to scripts/run_bca.py index 94fd08c..04e4663 100644 --- a/example_4step/run_bca.py +++ b/scripts/run_bca.py @@ -1,7 +1,15 @@ -from __future__ import print_function # bca4abm # Copyright (C) 2016 RSG Inc # See full license in LICENSE.txt. +"""run_bca.py + +This is a template script for running the bca4abm program on a set of config/data folders. It is +a modifiable version of the `bca4abm run` command that can be customized to fit more specific needs. +One such usage could be to use pipeline tables before they are closed. + +useage: python path/to/scripts/run_bca.py +""" +from __future__ import print_function import pandas as pd import numpy as np @@ -9,7 +17,6 @@ import warnings import logging - # the following import has the side-effect of registering injectables from bca4abm import bca4abm as bca @@ -20,31 +27,22 @@ from activitysim.core.config import handle_standard_args from activitysim.core.config import setting -parent_dir = os.path.dirname(__file__) - # Add (and handle) 'standard' activitysim arguments: -# --config : specify path to config_dir +# --config : specify path to config_dir. This may be specified several times. +# --data : specify path to data_dir. This may be specified several times. # --output : specify path to output_dir -# --data : specify path to data_dir -# --models : specify run_list name # --resume : resume_after handle_standard_args() tracing.config_logger() tracing.delete_csv_files() # only modifies output_dir - warnings.simplefilter("always") - logging.captureWarnings(capture=True) -old_settings = np.seterr(divide='raise', over='raise', invalid='raise', under='ignore') -print("numpy.geterr: %s" % np.geterr()) - +t0 = tracing.print_elapsed_time() # start timer -t0 = tracing.print_elapsed_time() - -MODELS = setting('models') +models = setting('models') # If you provide a resume_after argument to pipeline.run # the pipeline manager will attempt to load checkpointed tables from the checkpoint store @@ -52,12 +50,16 @@ resume_after = setting('resume_after', None) if resume_after: - print("resume_after", resume_after) + print('resume_after', resume_after) + +pipeline.run(models=models, resume_after=resume_after) -pipeline.run(models=MODELS, resume_after=resume_after) +print('Pipeline tables:') +for table in pipeline.orca_dataframe_tables(): + print(' ' + table) # tables will no longer be available after pipeline is closed pipeline.close_pipeline() -t0 = tracing.print_elapsed_time("all models", t0) +tracing.print_elapsed_time("all models", t0) # end timer diff --git a/setup.py b/setup.py index df405d8..5677d5a 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,22 @@ from setuptools import setup, find_packages +import os +import re + +with open(os.path.join('bca4abm', '__init__.py')) as f: + info = re.search(r'__.*', f.read(), re.S) + exec(info[0]) + setup( - name="bca4abm", - version='0.5', - description='Benefit Calculations for Travel Models', + name='bca4abm', + version=__version__, + description=__doc__, author='contributing authors', author_email='ben.stabler@rsginc.com', license='BSD-3', url='https://github.com/RSGInc/bca4abm', packages=find_packages(exclude=['*.tests']), include_package_data=True, + entry_points={'console_scripts': ['bca4abm=bca4abm.cli.main:main']}, install_requires=[ 'numpy >= 1.16.1', 'openmatrix >= 0.3.4.1', @@ -18,6 +26,5 @@ 'toolz >= 0.8.1', 'zbox >= 1.2', 'activitysim >= 0.9.1', - 'future >= 0.16.0' ] )