Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .travis.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,7 @@ install:
cytoolz ipython-notebook jinja2 matplotlib numpy pandas pandana patsy pip
pytables pytest pyyaml scipy statsmodels toolz
- source activate test-environment
- pip install bottle prettytable simplejson zbox
- pip install https://github.com/synthicity/urbansim/archive/master.zip
- pip install bottle orca prettytable simplejson zbox
- pip install openmatrix
- pip install pytest-cov coveralls pep8
- pip install .
Expand Down
19 changes: 10 additions & 9 deletions activitysim/defaults/misc.py
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
import urbansim.sim.simulation as sim
import warnings
import os
import yaml
import pandas as pd
import warnings

import numpy as np
import orca
import pandas as pd
import yaml


warnings.filterwarnings('ignore', category=pd.io.pytables.PerformanceWarning)
pd.options.mode.chained_assignment = None


@sim.injectable()
@orca.injectable()
def set_random_seed():
pass


@sim.injectable()
@orca.injectable()
def configs_dir():
return '.'


@sim.injectable()
@orca.injectable()
def data_dir():
return '.'


@sim.injectable()
@orca.injectable()
def settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "settings.yaml")) as f:
return yaml.load(f)


@sim.injectable(cache=True)
@orca.injectable(cache=True)
def store(data_dir, settings):
return pd.HDFStore(os.path.join(data_dir, "data", settings["store"]),
mode='r')
10 changes: 6 additions & 4 deletions activitysim/defaults/models/auto_ownership.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
import os
import urbansim.sim.simulation as sim

import orca

from activitysim import activitysim as asim

"""
Expand All@@ -8,18 +10,18 @@
"""


@sim.injectable()
@orca.injectable()
def auto_ownership_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "auto_ownership.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def auto_ownership_simulate(set_random_seed, households_merged,
auto_ownership_spec):

choices, _ = asim.simple_simulate(
households_merged.to_frame(), auto_ownership_spec)

print "Choices:\n", choices.value_counts()
sim.add_column("households", "auto_ownership", choices)
orca.add_column("households", "auto_ownership", choices)
18 changes: 10 additions & 8 deletions activitysim/defaults/models/cdap.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from activitysim.cdap import cdap

Expand All@@ -15,37 +17,37 @@
"""


@sim.injectable()
@orca.injectable()
def cdap_1_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_1_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_2_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_2_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_3_person_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_3_person.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_final_rules(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_final_rules.csv")
return asim.read_model_spec(f).fillna(0)


@sim.injectable()
@orca.injectable()
def cdap_all_people(configs_dir):
f = os.path.join(configs_dir, 'configs', "cdap_all_people.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def cdap_simulate(set_random_seed, persons_merged,
cdap_1_person_spec, cdap_2_person_spec, cdap_3_person_spec,
cdap_final_rules, cdap_all_people):
Expand All@@ -60,4 +62,4 @@ def cdap_simulate(set_random_seed, persons_merged,
cdap_all_people)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "cdap_activity", choices)
orca.add_column("persons", "cdap_activity", choices)
12 changes: 7 additions & 5 deletions activitysim/defaults/models/destination.py
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
import urbansim.sim.simulation as sim
from activitysim import activitysim as asim
import os

import orca
import pandas as pd

from activitysim import activitysim as asim

"""
Given the tour generation from the above, each tour needs to have a
destination, so in this case tours are the choosers (with the associated
person that's making the tour)
"""


@sim.table()
@orca.table()
def destination_choice_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', 'destination_choice.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def destination_choice(set_random_seed,
non_mandatory_tours_merged,
skims,
Expand DownExpand Up@@ -64,4 +66,4 @@ def destination_choice(set_random_seed,
print "Choices:\n", choices.describe()
# every trip now has a destination which is the index from the
# alternatives table - in this case it's the destination taz
sim.add_column("non_mandatory_tours", "destination", choices)
orca.add_column("non_mandatory_tours", "destination", choices)
19 changes: 10 additions & 9 deletions activitysim/defaults/models/mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -10,7 +12,7 @@
"""


@sim.table()
@orca.table()
def tdd_alts(configs_dir):
# right now this file just contains the start and end hour
f = os.path.join(configs_dir, "configs",
Expand All@@ -20,19 +22,19 @@ def tdd_alts(configs_dir):

# used to have duration in the actual alternative csv file,
# but this is probably better as a computed column like this
@sim.column("tdd_alts")
@orca.column("tdd_alts")
def duration(tdd_alts):
return tdd_alts.end - tdd_alts.start


@sim.table()
@orca.table()
def tdd_work_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_work.csv')
return asim.read_model_spec(f).fillna(0)


@sim.table()
@orca.table()
def tdd_school_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_school.csv')
Expand All@@ -41,7 +43,7 @@ def tdd_school_spec(configs_dir):

# I think it's easier to do this in one model so you can merge the two
# resulting series together right away
@sim.model()
@orca.step()
def mandatory_scheduling(set_random_seed,
mandatory_tours_merged,
tdd_alts,
Expand DownExpand Up@@ -69,6 +71,5 @@ def mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"mandatory_tours", "tour_departure_and_duration", choices)
20 changes: 11 additions & 9 deletions activitysim/defaults/models/mandatory_tour_frequency.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.mandatory_tour_frequency import process_mandatory_tours

Expand All@@ -10,13 +12,13 @@
"""


@sim.injectable()
@orca.injectable()
def mandatory_tour_frequency_spec(configs_dir):
f = os.path.join(configs_dir, 'configs', "mandatory_tour_frequency.csv")
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def mandatory_tour_frequency(set_random_seed,
persons_merged,
mandatory_tour_frequency_spec):
Expand All@@ -36,7 +38,7 @@ def mandatory_tour_frequency(set_random_seed,
index=choices.index).reindex(persons_merged.local.index)

print "Choices:\n", choices.value_counts()
sim.add_column("persons", "mandatory_tour_frequency", choices)
orca.add_column("persons", "mandatory_tour_frequency", choices)


"""
Expand All@@ -46,7 +48,7 @@ def mandatory_tour_frequency(set_random_seed,
"""


@sim.table()
@orca.table()
def mandatory_tours(persons):
persons = persons.to_frame(columns=["mandatory_tour_frequency",
"is_worker"])
Expand All@@ -55,7 +57,7 @@ def mandatory_tours(persons):


# broadcast mandatory_tours on to persons using the person_id foreign key
sim.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
sim.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons', 'mandatory_tours',
cast_index=True, onto_on='person_id')
orca.broadcast('persons_merged', 'mandatory_tours',
cast_index=True, onto_on='person_id')
18 changes: 10 additions & 8 deletions activitysim/defaults/models/mode.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import os
import copy
import yaml
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim
import yaml

from activitysim import activitysim as asim
from activitysim import skim as askim

Expand All@@ -12,7 +14,7 @@
"""


@sim.injectable()
@orca.injectable()
def mode_choice_settings(configs_dir):
with open(os.path.join(configs_dir, "configs", "mode_choice.yaml")) as f:
return yaml.load(f)
Expand DownExpand Up@@ -45,7 +47,7 @@ def evaluate_expression_list(expressions, locals_d):
return pd.Series(d)


@sim.injectable()
@orca.injectable()
def mode_choice_coefficients(mode_choice_settings):
# coefficients comes as a list of dicts and needs to be tuples
coeffs = [x.items()[0] for x in mode_choice_settings['COEFFICIENTS']]
Expand All@@ -54,7 +56,7 @@ def mode_choice_coefficients(mode_choice_settings):
return evaluate_expression_list(expressions, locals_d=constants)


@sim.injectable()
@orca.injectable()
def mode_choice_spec(configs_dir, mode_choice_coefficients):
f = os.path.join(configs_dir, 'configs', "mode_choice_work.csv")
df = asim.read_model_spec(f)
Expand All@@ -67,7 +69,7 @@ def get_segment_and_unstack(spec, segment):
return spec[segment].unstack().fillna(0)


@sim.model()
@orca.step()
def mode_choice_simulate(tours_merged,
mode_choice_spec,
mode_choice_settings,
Expand DownExpand Up@@ -100,4 +102,4 @@ def mode_choice_simulate(tours_merged,
locals_d=locals_d)

print "Choices:\n", choices.value_counts()
sim.add_column("tours", "mode", choices)
orca.add_column("tours", "mode", choices)
13 changes: 7 additions & 6 deletions activitysim/defaults/models/non_mandatory_scheduling.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
import os

import orca
import pandas as pd
import urbansim.sim.simulation as sim

from activitysim import activitysim as asim
from .util.vectorize_tour_scheduling import vectorize_tour_scheduling

Expand All@@ -11,14 +13,14 @@
"""


@sim.table()
@orca.table()
def tdd_non_mandatory_spec(configs_dir):
f = os.path.join(configs_dir, 'configs',
'tour_departure_and_duration_nonmandatory.csv')
return asim.read_model_spec(f).fillna(0)


@sim.model()
@orca.step()
def non_mandatory_scheduling(set_random_seed,
non_mandatory_tours_merged,
tdd_alts,
Expand All@@ -35,6 +37,5 @@ def non_mandatory_scheduling(set_random_seed,

print "Choices:\n", choices.describe()

sim.add_column("non_mandatory_tours",
"tour_departure_and_duration",
choices)
orca.add_column(
"non_mandatory_tours", "tour_departure_and_duration", choices)
Loading