diff --git a/activitysim/__init__.py b/activitysim/__init__.py index 2d1ec5800..ae6984b5e 100644 --- a/activitysim/__init__.py +++ b/activitysim/__init__.py @@ -1,5 +1,6 @@ # ActivitySim # See full license in LICENSE.txt. -__version__ = '0.9.9.1' + +__version__ = '1.0' __doc__ = 'Activity-Based Travel Modeling' diff --git a/activitysim/abm/misc.py b/activitysim/abm/misc.py index b9d0cfe65..994346dfc 100644 --- a/activitysim/abm/misc.py +++ b/activitysim/abm/misc.py @@ -79,7 +79,9 @@ def trace_od(settings): @inject.injectable(cache=True) def chunk_size(settings): - return int(settings.get('chunk_size', 0) or 0) + _chunk_size = int(settings.get('chunk_size', 0) or 0) + + return _chunk_size @inject.injectable(cache=True) diff --git a/activitysim/abm/models/accessibility.py b/activitysim/abm/models/accessibility.py index b7fbe2602..16d0e8559 100644 --- a/activitysim/abm/models/accessibility.py +++ b/activitysim/abm/models/accessibility.py @@ -103,44 +103,6 @@ def compute_accessibilities_for_zones( return(accessibility_df) -def accessibility_calc_row_size(accessibility_df, land_use_df, assignment_spec, network_los, trace_label): - """ - rows_per_chunk calculator for accessibility - """ - - sizer = chunk.RowSizeEstimator(trace_label) - - # if there are skims, and zone_system is THREE_ZONE, and there are any - # then we want to estimate the per-row overhead tvpb skims - # (do this first to facilitate tracing of rowsize estimation below) - if network_los.zone_system == los.THREE_ZONE: - # DISABLE_TVPB_OVERHEAD - logger.debug("disable calc_row_size for THREE_ZONE with tap skims") - return 0 - - land_use_rows = len(land_use_df.index) - land_use_columns = len(land_use_df.columns) - od_columns = 2 - - # assignment spec has one row per value to assign - # count number of unique persistent assign_variables targets simultaneously resident during spec eval - # (since dict overwrites recurring targets, only count unique targets) - def is_persistent(target): - return not (assign.is_throwaway(target) or assign.is_temp_scalar(target)) - num_spec_values = len([target for target in assignment_spec.target.unique() if is_persistent(target)]) - - sizer.add_elements(land_use_rows * od_columns, 'od_df') - - # each od_df joins to all land_use zones - sizer.add_elements(land_use_rows * land_use_columns, 'land_use_choosers') - - # and then we assign_variables to joined land_use from assignment_spec - sizer.add_elements(land_use_rows * num_spec_values, 'spec_values') - - row_size = sizer.get_hwm() - return row_size - - @inject.step() def compute_accessibility(land_use, accessibility, network_los, chunk_size, trace_od): @@ -178,14 +140,10 @@ def compute_accessibility(land_use, accessibility, network_los, chunk_size, trac logger.info(f"Running {trace_label} with {len(accessibility_df.index)} orig zones {len(land_use_df)} dest zones") - row_size = \ - chunk_size and accessibility_calc_row_size(accessibility_df, land_use_df, - assignment_spec, network_los, trace_label) - accessibilities_list = [] for i, chooser_chunk, chunk_trace_label in \ - chunk.adaptive_chunked_choosers(accessibility_df, chunk_size, row_size, trace_label): + chunk.adaptive_chunked_choosers(accessibility_df, chunk_size, trace_label): accessibilities = \ compute_accessibilities_for_zones(chooser_chunk, land_use_df, assignment_spec, diff --git a/activitysim/abm/models/atwork_subtour_mode_choice.py b/activitysim/abm/models/atwork_subtour_mode_choice.py index a17ab1b99..b9e7d0c44 100644 --- a/activitysim/abm/models/atwork_subtour_mode_choice.py +++ b/activitysim/abm/models/atwork_subtour_mode_choice.py @@ -17,7 +17,6 @@ from .util.mode import run_tour_mode_choice_simulate from .util import estimation -from activitysim.core.mem import force_garbage_collect from activitysim.core.util import assign_in_place logger = logging.getLogger(__name__) @@ -171,5 +170,3 @@ def atwork_subtour_mode_choice( label=tracing.extend_trace_label(trace_label, mode_column_name), slicer='tour_id', index_label='tour_id') - - force_garbage_collect() diff --git a/activitysim/abm/models/auto_ownership.py b/activitysim/abm/models/auto_ownership.py index 014f410fb..12f8fbd2b 100644 --- a/activitysim/abm/models/auto_ownership.py +++ b/activitysim/abm/models/auto_ownership.py @@ -46,6 +46,8 @@ def auto_ownership_simulate(households, estimator.write_coefficients(coefficients_df, model_settings) estimator.write_choosers(choosers) + log_alt_losers = config.setting('log_alt_losers', False) + choices = simulate.simple_simulate( choosers=choosers, spec=model_spec, @@ -54,6 +56,7 @@ def auto_ownership_simulate(households, chunk_size=chunk_size, trace_label=trace_label, trace_choice_name='auto_ownership', + log_alt_losers=log_alt_losers, estimator=estimator) if estimator: diff --git a/activitysim/abm/models/initialize.py b/activitysim/abm/models/initialize.py index 7d567ec60..d72a88f9d 100644 --- a/activitysim/abm/models/initialize.py +++ b/activitysim/abm/models/initialize.py @@ -10,6 +10,7 @@ from activitysim.core import inject from activitysim.core import pipeline from activitysim.core import expressions +from activitysim.core import chunk from activitysim.core import mem from activitysim.core.steps.output import write_data_dictionary @@ -39,6 +40,10 @@ def annotate_tables(model_settings, trace_label): + trace_label = tracing.extend_trace_label(trace_label, 'annotate_tables') + + chunk.log_rss(trace_label) + annotate_tables = model_settings.get('annotate_tables', []) if not annotate_tables: @@ -53,7 +58,10 @@ def annotate_tables(model_settings, trace_label): tablename = table_info['tablename'] + chunk.log_rss(f"{trace_label}.pre-get_table.{tablename}") + df = inject.get_table(tablename).to_frame() + chunk.log_df(trace_label, tablename, df) # - rename columns column_map = table_info.get('column_map', None) @@ -75,23 +83,29 @@ def annotate_tables(model_settings, trace_label): model_settings=annotate, trace_label=trace_label) - # fixme - narrow? + chunk.log_df(trace_label, tablename, df) # - write table to pipeline pipeline.replace_table(tablename, df) + del df + chunk.log_df(trace_label, tablename, None) + @inject.step() def initialize_landuse(): trace_label = 'initialize_landuse' - model_settings = config.read_model_settings('initialize_landuse.yaml', mandatory=True) + with chunk.chunk_log(trace_label, base=True): + + model_settings = config.read_model_settings('initialize_landuse.yaml', mandatory=True) - annotate_tables(model_settings, trace_label) + annotate_tables(model_settings, trace_label) - # instantiate accessibility (must be checkpointed to be be used to slice accessibility) - accessibility = pipeline.get_table('accessibility') + # instantiate accessibility (must be checkpointed to be be used to slice accessibility) + accessibility = pipeline.get_table('accessibility') + chunk.log_df(trace_label, "accessibility", accessibility) @inject.step() @@ -99,18 +113,36 @@ def initialize_households(): trace_label = 'initialize_households' - model_settings = config.read_model_settings('initialize_households.yaml', mandatory=True) - annotate_tables(model_settings, trace_label) + with chunk.chunk_log(trace_label, base=True): - # - initialize shadow_pricing size tables after annotating household and person tables - # since these are scaled to model size, they have to be created while single-process - shadow_pricing.add_size_tables() - mem.trace_memory_info(f"initialize_households after shadow_pricing.add_size_tables") + chunk.log_rss(f"{trace_label}.inside-yield") - # - preload person_windows - t0 = tracing.print_elapsed_time() - inject.get_table('person_windows').to_frame() - t0 = tracing.print_elapsed_time("preload person_windows", t0, debug=True) + households = inject.get_table('households').to_frame() + assert not households._is_view + chunk.log_df(trace_label, "households", households) + del households + chunk.log_df(trace_label, "households", None) + + persons = inject.get_table('persons').to_frame() + assert not persons._is_view + chunk.log_df(trace_label, "persons", persons) + del persons + chunk.log_df(trace_label, "persons", None) + + model_settings = config.read_model_settings('initialize_households.yaml', mandatory=True) + annotate_tables(model_settings, trace_label) + + # - initialize shadow_pricing size tables after annotating household and person tables + # since these are scaled to model size, they have to be created while single-process + # this can now be called as a stand alone model step instead, add_size_tables + add_size_tables = model_settings.get('add_size_tables', True) + if add_size_tables: + # warnings.warn(f"Calling add_size_tables from initialize will be removed in the future.", FutureWarning) + shadow_pricing.add_size_tables() + + # - preload person_windows + person_windows = inject.get_table('person_windows').to_frame() + chunk.log_df(trace_label, "person_windows", person_windows) @inject.injectable(cache=True) diff --git a/activitysim/abm/models/initialize_los.py b/activitysim/abm/models/initialize_los.py index 8d2158c32..aaae57443 100644 --- a/activitysim/abm/models/initialize_los.py +++ b/activitysim/abm/models/initialize_los.py @@ -112,47 +112,6 @@ def initialize_los(network_los): np.copyto(data, np.nan) -def initialize_tvpb_calc_row_size(choosers, network_los, trace_label): - """ - rows_per_chunk calculator for trip_purpose - """ - - sizer = chunk.RowSizeEstimator(trace_label) - - model_settings = \ - network_los.setting(f'TVPB_SETTINGS.tour_mode_choice.tap_tap_settings') - attributes_as_columns = \ - network_los.setting('TVPB_SETTINGS.tour_mode_choice.tap_tap_settings.attributes_as_columns', []) - - # expression_values for each spec row - sizer.add_elements(len(choosers.columns), 'choosers') - - # expression_values for each spec row - sizer.add_elements(len(attributes_as_columns), 'attributes_as_columns') - - preprocessor_settings = model_settings.get('PREPROCESSOR') - if preprocessor_settings: - - preprocessor_spec_name = preprocessor_settings.get('SPEC', None) - - if not preprocessor_spec_name.endswith(".csv"): - preprocessor_spec_name = f'{preprocessor_spec_name}.csv' - expressions_spec = assign.read_assignment_spec(config.config_file_path(preprocessor_spec_name)) - - sizer.add_elements(expressions_spec.shape[0], 'preprocessor') - - # expression_values for each spec row - spec = simulate.read_model_spec(file_name=model_settings['SPEC']) - sizer.add_elements(spec.shape[0], 'expression_values') - - # expression_values for each spec row - sizer.add_elements(spec.shape[1], 'utilities') - - row_size = sizer.get_hwm() - - return row_size - - def compute_utilities_for_atttribute_tuple(network_los, scalar_attributes, data, chunk_size, trace_label): # scalar_attributes is a dict of attribute name/value pairs for this combination @@ -175,19 +134,25 @@ def compute_utilities_for_atttribute_tuple(network_los, scalar_attributes, data, # get od skim_offset dataframe with uid index corresponding to scalar_attributes choosers_df = uid_calculator.get_od_dataframe(scalar_attributes) - row_size = chunk_size and initialize_tvpb_calc_row_size(choosers_df, network_los, trace_label) + # choosers_df is pretty big and was custom made for compute_utilities but we don't need to chunk_log it + # since it is created outside of adaptive_chunked_choosers and so will show up in baseline + assert not chunk.chunk_logging() # otherwise we should chunk_log this + + chunk_tag = 'initialize_tvpb' # all attribute_combinations can use same cached data for row_size calc + for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(choosers_df, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers(choosers_df, chunk_size, trace_label, chunk_tag=chunk_tag): # we should count choosers_df as chunk overhead since its pretty big and was custom made for compute_utilities - # (call log_df from inside yield loop so it is visible to adaptive_chunked_choosers chunk_log) - chunk.log_df(trace_label, 'choosers_df', choosers_df) + assert chooser_chunk._is_view # otherwise copying it is wasteful + chooser_chunk = chooser_chunk.copy() + chunk.log_df(trace_label, 'attribute_chooser_chunk', chooser_chunk) # add any attribute columns specified as column attributes in settings (the rest will be scalars in locals_dict) for attribute_name in attributes_as_columns: chooser_chunk[attribute_name] = scalar_attributes[attribute_name] - chunk.log_df(trace_label, 'chooser_chunk', chooser_chunk) + chunk.log_df(trace_label, 'attribute_chooser_chunk', chooser_chunk) utilities_df = \ pathbuilder.compute_utilities(network_los, @@ -204,6 +169,9 @@ def compute_utilities_for_atttribute_tuple(network_los, scalar_attributes, data, data[chooser_chunk.index.values, :] = utilities_df.values + del chooser_chunk + chunk.log_df(trace_label, 'attribute_chooser_chunk', None) + logger.debug(f"{trace_label} updated utilities") diff --git a/activitysim/abm/models/initialize_tours.py b/activitysim/abm/models/initialize_tours.py index 576cd85ee..af354a690 100644 --- a/activitysim/abm/models/initialize_tours.py +++ b/activitysim/abm/models/initialize_tours.py @@ -104,8 +104,8 @@ def initialize_tours(network_los, households, persons, trace_hh_id): tracing.register_traceable_table('tours', tours) - print(f"{len(tours.household_id.unique())} unique household_ids in tours") - print(f"{len(households.index.unique())} unique household_ids in households") + logger.debug(f"{len(tours.household_id.unique())} unique household_ids in tours") + logger.debug(f"{len(households.index.unique())} unique household_ids in households") assert not tours.index.duplicated().any() tours_without_persons = ~tours.person_id.isin(persons.index) diff --git a/activitysim/abm/models/joint_tour_participation.py b/activitysim/abm/models/joint_tour_participation.py index 91fb56320..c69b5093c 100644 --- a/activitysim/abm/models/joint_tour_participation.py +++ b/activitysim/abm/models/joint_tour_participation.py @@ -195,8 +195,8 @@ def participants_chooser(probs, choosers, spec, trace_label): probs = probs[~satisfied] candidates = candidates[~satisfied] - logger.info('%s iteration %s : %s joint tours satisfied %s remaining' % - (trace_label, iter, num_tours_satisfied_this_iter, num_tours_remaining,)) + logger.debug(f"{trace_label} iteration {iter} : " + f"{num_tours_satisfied_this_iter} joint tours satisfied {num_tours_remaining} remaining") choices = pd.concat(choices_list) rands = pd.concat(rands_list).reindex(choosers.index) diff --git a/activitysim/abm/models/location_choice.py b/activitysim/abm/models/location_choice.py index 9d2c31649..5b3b7d1e4 100644 --- a/activitysim/abm/models/location_choice.py +++ b/activitysim/abm/models/location_choice.py @@ -108,7 +108,8 @@ def _location_sample( estimator, model_settings, alt_dest_col_name, - chunk_size, trace_label): + chunk_size, chunk_tag, + trace_label): """ select a sample of alternative locations. @@ -146,15 +147,20 @@ def _location_sample( spec = simulate.spec_for_segment(model_settings, spec_id='SAMPLE_SPEC', segment_name=segment_name, estimator=estimator) + # here since presumably we want this when called for either sample or presample + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample( choosers, alternatives, + spec=spec, sample_size=sample_size, alt_col_name=alt_dest_col_name, - spec=spec, + log_alt_losers=log_alt_losers, skims=skims, locals_d=locals_d, chunk_size=chunk_size, + chunk_tag=chunk_tag, trace_label=trace_label) return choices @@ -167,7 +173,8 @@ def location_sample( dest_size_terms, estimator, model_settings, - chunk_size, trace_label): + chunk_size, chunk_tag, + trace_label): # FIXME - MEMORY HACK - only include columns actually used in spec chooser_columns = model_settings['SIMULATE_CHOOSER_COLUMNS'] @@ -190,7 +197,7 @@ def location_sample( estimator, model_settings, alt_dest_col_name, - chunk_size, + chunk_size, chunk_tag, trace_label) return choices @@ -256,7 +263,8 @@ def location_presample( dest_size_terms, estimator, model_settings, - chunk_size, trace_label): + chunk_size, chunk_tag, + trace_label): trace_label = tracing.extend_trace_label(trace_label, 'presample') @@ -293,7 +301,7 @@ def location_presample( estimator, model_settings, DEST_TAZ, - chunk_size, + chunk_size, chunk_tag, trace_label) # print(f"taz_sample\n{taz_sample}") @@ -320,7 +328,8 @@ def run_location_sample( dest_size_terms, estimator, model_settings, - chunk_size, trace_label): + chunk_size, chunk_tag, + trace_label): """ select a sample of alternative locations. @@ -361,7 +370,9 @@ def run_location_sample( dest_size_terms, estimator, model_settings, - chunk_size, trace_label) + chunk_size, + chunk_tag=f'{chunk_tag}.presample', + trace_label=trace_label) else: @@ -372,7 +383,9 @@ def run_location_sample( dest_size_terms, estimator, model_settings, - chunk_size, trace_label) + chunk_size, + chunk_tag=f'{chunk_tag}.sample', + trace_label=trace_label) return choices @@ -383,7 +396,8 @@ def run_location_logsums( network_los, location_sample_df, model_settings, - chunk_size, trace_hh_id, trace_label): + chunk_size, chunk_tag, + trace_label): """ add logsum column to existing location_sample table @@ -427,6 +441,7 @@ def run_location_logsums( logsum_settings, model_settings, network_los, chunk_size, + chunk_tag, trace_label) # "add_column series should have an index matching the table to which it is being added" @@ -447,7 +462,8 @@ def run_location_simulate( want_logsums, estimator, model_settings, - chunk_size, trace_label): + chunk_size, chunk_tag, + trace_label): """ run location model on location_sample annotated with mode_choice logsum to select a dest zone from sample alternatives @@ -498,15 +514,18 @@ def run_location_simulate( spec = simulate.spec_for_segment(model_settings, spec_id='SPEC', segment_name=segment_name, estimator=estimator) + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample_simulate( choosers, alternatives, spec=spec, choice_column=alt_dest_col_name, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, skims=skims, locals_d=locals_d, - chunk_size=chunk_size, + chunk_size=chunk_size, chunk_tag=chunk_tag, trace_label=trace_label, trace_choice_name=model_settings['DEST_CHOICE_COLUMN_NAME'], estimator=estimator) @@ -529,7 +548,8 @@ def run_location_choice( want_sample_table, estimator, model_settings, - chunk_size, trace_hh_id, trace_label + chunk_size, chunk_tag, + trace_hh_id, trace_label ): """ Run the three-part location choice algorithm to generate a location choice for each chooser @@ -591,7 +611,8 @@ def run_location_choice( estimator, model_settings, chunk_size, - tracing.extend_trace_label(trace_label, 'sample.%s' % segment_name)) + chunk_tag, # run_location_sample will add appropriate suffix for sample or presample + trace_label=tracing.extend_trace_label(trace_label, 'sample.%s' % segment_name)) # - location_logsums location_sample_df = \ @@ -601,9 +622,8 @@ def run_location_choice( network_los, location_sample_df, model_settings, - chunk_size, - trace_hh_id, - tracing.extend_trace_label(trace_label, 'logsums.%s' % segment_name)) + chunk_size, chunk_tag=f'{chunk_tag}.logsums', + trace_label=tracing.extend_trace_label(trace_label, 'logsums.%s' % segment_name)) # - location_simulate choices_df = \ @@ -616,8 +636,8 @@ def run_location_choice( want_logsums, estimator, model_settings, - chunk_size, - tracing.extend_trace_label(trace_label, 'simulate.%s' % segment_name)) + chunk_size, chunk_tag=f'{chunk_tag}.simulate', + trace_label=tracing.extend_trace_label(trace_label, 'simulate.%s' % segment_name)) if estimator: if trace_hh_id: @@ -665,10 +685,9 @@ def run_location_choice( location_sample_df.set_index(model_settings['ALT_DEST_COL_NAME'], append=True, inplace=True) sample_list.append(location_sample_df) - - # FIXME - want to do this here? - del location_sample_df - mem.force_garbage_collect() + else: + # del this so we dont hold active reference to it while run_location_sample is creating its replacement + del location_sample_df if len(choices_list) > 0: choices_df = pd.concat(choices_list) @@ -718,6 +737,8 @@ def iterate_location_choice( adds annotations to persons table """ + chunk_tag = trace_label + # boolean to filter out persons not needing location modeling (e.g. is_worker, is_student) chooser_filter_column = model_settings['CHOOSER_FILTER_COLUMN_NAME'] @@ -758,7 +779,7 @@ def iterate_location_choice( want_sample_table=want_sample_table, estimator=estimator, model_settings=model_settings, - chunk_size=chunk_size, + chunk_size=chunk_size, chunk_tag=chunk_tag, trace_hh_id=trace_hh_id, trace_label=tracing.extend_trace_label(trace_label, 'i%s' % iteration)) diff --git a/activitysim/abm/models/non_mandatory_tour_frequency.py b/activitysim/abm/models/non_mandatory_tour_frequency.py index 64cc3fc68..814bec97e 100644 --- a/activitysim/abm/models/non_mandatory_tour_frequency.py +++ b/activitysim/abm/models/non_mandatory_tour_frequency.py @@ -15,8 +15,6 @@ from activitysim.core import logit from activitysim.core import expressions -from activitysim.core.mem import force_garbage_collect - from .util import estimation from .util.overlap import person_max_window @@ -222,10 +220,13 @@ def non_mandatory_tour_frequency(persons, persons_merged, estimator.set_chooser_id(chooser_segment.index.name) + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_simulate( chooser_segment, alternatives, spec=segment_spec, + log_alt_losers=log_alt_losers, locals_d=constants, chunk_size=chunk_size, trace_label='non_mandatory_tour_frequency.%s' % segment_name, @@ -240,9 +241,6 @@ def non_mandatory_tour_frequency(persons, persons_merged, choices_list.append(choices) - # FIXME - force garbage collection? - force_garbage_collect() - del alternatives['tot_tours'] # del tot_tours column we added above # The choice value 'non_mandatory_tour_frequency' assigned by interaction_simulate diff --git a/activitysim/abm/models/parking_location_choice.py b/activitysim/abm/models/parking_location_choice.py index 42bc8bb14..5c13969ee 100644 --- a/activitysim/abm/models/parking_location_choice.py +++ b/activitysim/abm/models/parking_location_choice.py @@ -10,10 +10,10 @@ from activitysim.core import pipeline from activitysim.core import simulate from activitysim.core import tracing +from activitysim.core import logit from activitysim.core import expressions from activitysim.core.interaction_sample_simulate import interaction_sample_simulate -from activitysim.core.logit import interaction_dataset from activitysim.core.util import assign_in_place from activitysim.core.tracing import print_elapsed_time @@ -149,7 +149,7 @@ def choose_parking_location( t0 = print_elapsed_time() alt_dest_col_name = model_settings['ALT_DEST_COL_NAME'] - destination_sample = interaction_dataset(trips, alternatives, alt_index_id=alt_dest_col_name) + destination_sample = logit.interaction_dataset(trips, alternatives, alt_index_id=alt_dest_col_name) destination_sample.index = np.repeat(trips.index.values, len(alternatives)) destination_sample.index.name = trips.index.name destination_sample = destination_sample[[alt_dest_col_name]].copy() diff --git a/activitysim/abm/models/tour_mode_choice.py b/activitysim/abm/models/tour_mode_choice.py index a8da4a423..48dc7ef33 100644 --- a/activitysim/abm/models/tour_mode_choice.py +++ b/activitysim/abm/models/tour_mode_choice.py @@ -9,8 +9,7 @@ from activitysim.core import config from activitysim.core import inject from activitysim.core import pipeline -from activitysim.core import simulate -from activitysim.core.mem import force_garbage_collect + from activitysim.core.util import assign_in_place from activitysim.core import los @@ -155,9 +154,6 @@ def tour_mode_choice_simulate(tours, persons_merged, choices_list.append(choices_df) - # FIXME - force garbage collection - force_garbage_collect() - choices_df = pd.concat(choices_list) # add cached tvpb_logsum tap choices for modes specified in tvpb_mode_path_types diff --git a/activitysim/abm/models/trip_departure_choice.py b/activitysim/abm/models/trip_departure_choice.py index 3fe50fb99..80eb9b912 100644 --- a/activitysim/abm/models/trip_departure_choice.py +++ b/activitysim/abm/models/trip_departure_choice.py @@ -13,7 +13,7 @@ from activitysim.core import tracing from activitysim.abm.models.util.trip import get_time_windows -from activitysim.core.interaction_sample_simulate import eval_interaction_utilities +from activitysim.core import interaction_simulate from activitysim.core.simulate import set_skim_wrapper_targets from activitysim.core.util import reindex @@ -47,19 +47,18 @@ def get_tour_legs(trips): tour_legs = tour_legs.set_index(TOUR_LEG_ID) return tour_legs - -def trip_departure_rpc(chunk_size, choosers, trace_label): - - # NOTE we chunk chunk_id - num_choosers = choosers['chunk_id'].max() + 1 - - chooser_row_size = choosers.shape[1] + 1 - - # scale row_size by average number of chooser rows per chunk_id - rows_per_chunk_id = choosers.shape[0] / num_choosers - row_size = (rows_per_chunk_id * chooser_row_size) - - return chunk.rows_per_chunk(chunk_size, row_size, num_choosers, trace_label) +# def trip_departure_rpc(chunk_size, choosers, trace_label): +# +# # NOTE we chunk chunk_id +# num_choosers = choosers['chunk_id'].max() + 1 +# +# chooser_row_size = choosers.shape[1] + 1 +# +# # scale row_size by average number of chooser rows per chunk_id +# rows_per_chunk_id = choosers.shape[0] / num_choosers +# row_size = (rows_per_chunk_id * chooser_row_size) +# +# return chunk.rows_per_chunk(chunk_size, row_size, num_choosers, trace_label) def generate_alternatives(trips, alternative_col_name): @@ -133,7 +132,7 @@ def build_patterns(trips, time_windows): patterns = patterns[~patterns[STOP_TIME_DURATION].isnull()].copy() patterns[TRIP_NUM] = patterns[TRIP_NUM] + 1 - patterns[STOP_TIME_DURATION] = patterns[STOP_TIME_DURATION].astype(np.int) + patterns[STOP_TIME_DURATION] = patterns[STOP_TIME_DURATION].astype(int) patterns = pd.merge(patterns, trips.reset_index()[[TOUR_ID, TRIP_ID, TRIP_NUM, OUTBOUND]], on=[TOUR_ID, TRIP_NUM]) @@ -155,22 +154,6 @@ def get_spec_for_segment(omnibus_spec, segment): return spec -def trip_departure_calc_row_size(choosers, trace_label): - """ - rows_per_chunk calculator for trip_scheduler - """ - - sizer = chunk.RowSizeEstimator(trace_label) - - chooser_row_size = len(choosers.columns) - spec_columns = 3 - - sizer.add_elements(chooser_row_size + spec_columns, 'choosers') - - row_size = sizer.get_hwm() - return row_size - - def choose_tour_leg_pattern(trip_segment, patterns, spec, trace_label='trace_label'): @@ -207,7 +190,8 @@ def choose_tour_leg_pattern(trip_segment, trace_rows = trace_ids = None interaction_utilities, trace_eval_results \ - = eval_interaction_utilities(spec, interaction_df, None, trace_label, trace_rows, None) + = interaction_simulate.eval_interaction_utilities(spec, interaction_df, None, trace_label, trace_rows, + estimator=None) interaction_utilities = pd.concat([interaction_df[STOP_TIME_DURATION], interaction_utilities], axis=1) chunk.log_df(trace_label, 'interaction_utilities', interaction_utilities) @@ -370,12 +354,10 @@ def apply_stage_two_model(omnibus_spec, trips, chunk_size, trace_label): # Get the potential time windows time_windows = get_time_windows(side_trips[TRIP_DURATION].max(), side_trips[TRIP_COUNT].max() - 1) - row_size = chunk_size and trip_departure_calc_row_size(trips, trace_label) - trip_list = [] for i, chooser_chunk, chunk_trace_label in \ - chunk.adaptive_chunked_choosers_by_chunk_id(side_trips, chunk_size, row_size, trace_label): + chunk.adaptive_chunked_choosers_by_chunk_id(side_trips, chunk_size, trace_label): for is_outbound, trip_segment in chooser_chunk.groupby(OUTBOUND): direction = OUTBOUND if is_outbound else 'inbound' diff --git a/activitysim/abm/models/trip_destination.py b/activitysim/abm/models/trip_destination.py index b87262955..30a2521f6 100644 --- a/activitysim/abm/models/trip_destination.py +++ b/activitysim/abm/models/trip_destination.py @@ -56,6 +56,7 @@ def _destination_sample( alt_dest_col_name, estimator, chunk_size, + chunk_tag, trace_label): """ @@ -94,17 +95,21 @@ def _destination_sample( }) locals_dict.update(skims) + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample( choosers=trips, alternatives=alternatives, sample_size=sample_size, alt_col_name=alt_dest_col_name, + log_alt_losers=log_alt_losers, allow_zero_probs=True, spec=spec, skims=skims, locals_d=locals_dict, - chunk_size=chunk_size, - trace_label=trace_label) + chunk_size=chunk_size, chunk_tag=chunk_tag, + trace_label=trace_label + ) return choices @@ -120,6 +125,8 @@ def destination_sample( chunk_size, trace_label): + chunk_tag = 'trip_destination.sample' + skims = skim_hotel.sample_skims(presample=False) alt_dest_col_name = model_settings['ALT_DEST_COL_NAME'] @@ -133,7 +140,8 @@ def destination_sample( alt_dest_col_name, estimator, chunk_size, - trace_label) + chunk_tag=chunk_tag, + trace_label=trace_label) return choices @@ -356,8 +364,7 @@ def destination_presample( trace_label): trace_label = tracing.extend_trace_label(trace_label, 'presample') - - logger.info(f"{trace_label} destination_presample") + chunk_tag = 'trip_destination.presample' # distinguish from trip_destination.sample alt_dest_col_name = model_settings['ALT_DEST_COL_NAME'] maz_taz = network_los.maz_taz_df[['MAZ', 'TAZ']].set_index('MAZ').TAZ @@ -387,7 +394,8 @@ def destination_presample( alt_dest_col_name, estimator, chunk_size, - trace_label) + chunk_tag=chunk_tag, + trace_label=trace_label) # choose a MAZ for each DEST_TAZ choice, choice probability based on MAZ size_term fraction of TAZ total maz_sample = choose_MAZ_for_TAZ(taz_sample, size_term_matrix, trips, network_los, alt_dest_col_name, trace_label) @@ -423,7 +431,7 @@ def trip_destination_sample( pick_count : int number of duplicate picks for chooser, alt """ - trace_label = tracing.extend_trace_label(trace_label, 'trip_destination_sample') + trace_label = tracing.extend_trace_label(trace_label, 'sample') assert len(trips) > 0 assert len(alternatives) > 0 @@ -474,7 +482,8 @@ def compute_ood_logsums( od_skims, locals_dict, chunk_size, - trace_label): + trace_label, + chunk_tag): """ Compute one (of two) out-of-direction logsums for destination alternatives @@ -495,7 +504,8 @@ def compute_ood_logsums( skims=od_skims, locals_d=locals_dict, chunk_size=chunk_size, - trace_label=trace_label) + trace_label=trace_label, + chunk_tag=chunk_tag) assert logsums.index.equals(choosers.index) @@ -526,6 +536,9 @@ def compute_logsums( trace_label = tracing.extend_trace_label(trace_label, 'compute_logsums') logger.info("Running %s with %d samples", trace_label, destination_sample.shape[0]) + # chunk usage is uniform so better to combine + chunk_tag = 'trip_destination.compute_logsums' + # FIXME should pass this in? network_los = inject.get_injectable('network_los') @@ -588,7 +601,8 @@ def compute_logsums( od_skims, locals_dict, chunk_size, - trace_label=tracing.extend_trace_label(trace_label, 'od')) + trace_label=tracing.extend_trace_label(trace_label, 'od'), + chunk_tag=chunk_tag) # - dp_logsums dp_skims = { @@ -611,7 +625,8 @@ def compute_logsums( dp_skims, locals_dict, chunk_size, - trace_label=tracing.extend_trace_label(trace_label, 'dp')) + trace_label=tracing.extend_trace_label(trace_label, 'dp'), + chunk_tag=chunk_tag) return destination_sample @@ -637,6 +652,7 @@ def trip_destination_simulate( destination alt chosen """ trace_label = tracing.extend_trace_label(trace_label, 'trip_dest_simulate') + chunk_tag = 'trip_destination.simulate' spec = simulate.spec_for_segment(model_settings, spec_id='DESTINATION_SPEC', segment_name=primary_purpose, estimator=estimator) @@ -656,16 +672,19 @@ def trip_destination_simulate( }) locals_dict.update(skims) + log_alt_losers = config.setting('log_alt_losers', False) + destinations = interaction_sample_simulate( choosers=trips, alternatives=destination_sample, spec=spec, choice_column=alt_dest_col_name, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, allow_zero_probs=True, zero_prob_choice_val=NO_DESTINATION, skims=skims, locals_d=locals_dict, - chunk_size=chunk_size, + chunk_size=chunk_size, chunk_tag=chunk_tag, trace_label=trace_label, trace_choice_name='trip_dest', estimator=estimator) diff --git a/activitysim/abm/models/trip_matrices.py b/activitysim/abm/models/trip_matrices.py index 085f920f3..2df091c01 100644 --- a/activitysim/abm/models/trip_matrices.py +++ b/activitysim/abm/models/trip_matrices.py @@ -238,7 +238,7 @@ def write_matrices(aggregate_trips, zone_index, orig_index, dest_index, model_se data = np.zeros((len(zone_index), len(zone_index))) data[orig_index, dest_index] = aggregate_trips[col] - logger.info('writing %s sum %0.2f' % (table_name, aggregate_trips[col].sum())) + logger.debug('writing %s sum %0.2f' % (table_name, aggregate_trips[col].sum())) file[table_name] = data # write to file # include the index-to-zone map in the file diff --git a/activitysim/abm/models/trip_mode_choice.py b/activitysim/abm/models/trip_mode_choice.py index da487c2c8..af009b979 100644 --- a/activitysim/abm/models/trip_mode_choice.py +++ b/activitysim/abm/models/trip_mode_choice.py @@ -13,8 +13,6 @@ from activitysim.core import pipeline from activitysim.core import expressions -from activitysim.core.mem import force_garbage_collect - from activitysim.core import assign from activitysim.core import los @@ -160,7 +158,7 @@ def trip_mode_choice( chunk_size=chunk_size, mode_column_name=mode_column_name, logsum_column_name=logsum_column_name, - trace_label=trace_label, + trace_label=segment_trace_label, trace_choice_name='trip_mode_choice', estimator=estimator) @@ -182,9 +180,6 @@ def trip_mode_choice( choices_list.append(choices) - # FIXME - force garbage collection - force_garbage_collect() - choices_df = pd.concat(choices_list) # add cached tvpb_logsum tap choices for modes specified in tvpb_mode_path_types diff --git a/activitysim/abm/models/trip_purpose.py b/activitysim/abm/models/trip_purpose.py index b5cf17e19..78e3a2b87 100644 --- a/activitysim/abm/models/trip_purpose.py +++ b/activitysim/abm/models/trip_purpose.py @@ -40,22 +40,6 @@ def map_coefficients(spec, coefficients): return spec -def trip_purpose_calc_row_size(choosers, spec, trace_label): - """ - rows_per_chunk calculator for trip_purpose - """ - - sizer = chunk.RowSizeEstimator(trace_label) - - chooser_row_size = len(choosers.columns) - spec_columns = spec.shape[1] - len(PROBS_JOIN_COLUMNS) - - sizer.add_elements(chooser_row_size + spec_columns, 'choosers') - - row_size = sizer.get_hwm() - return row_size - - def choose_intermediate_trip_purpose(trips, probs_spec, estimator, trace_hh_id, trace_label): """ chose purpose for intermediate trips based on probs_spec @@ -148,6 +132,9 @@ def run_trip_purpose( purpose: pandas.Series of purpose (str) indexed by trip_id """ + # uniform across trip_purpose + chunk_tag = 'trip_purpose' + model_settings_file_name = 'trip_purpose.yaml' model_settings = config.read_model_settings(model_settings_file_name) @@ -191,10 +178,8 @@ def run_trip_purpose( locals_dict=locals_dict, trace_label=trace_label) - row_size = chunk_size and trip_purpose_calc_row_size(trips_df, probs_spec, trace_label) - for i, trips_chunk, chunk_trace_label in \ - chunk.adaptive_chunked_choosers(trips_df, chunk_size, row_size, trace_label): + chunk.adaptive_chunked_choosers(trips_df, chunk_size, chunk_tag, trace_label): choices = choose_intermediate_trip_purpose( trips_chunk, @@ -205,6 +190,8 @@ def run_trip_purpose( result_list.append(choices) + chunk.log_df(trace_label, f'result_list', result_list) + if len(result_list) > 1: choices = pd.concat(result_list) diff --git a/activitysim/abm/models/trip_scheduling.py b/activitysim/abm/models/trip_scheduling.py index 66f3c55dd..ab63fa4e4 100644 --- a/activitysim/abm/models/trip_scheduling.py +++ b/activitysim/abm/models/trip_scheduling.py @@ -279,7 +279,7 @@ def schedule_trips_in_leg( trips, probs_spec, model_settings, - last_iteration, + is_last_iteration, trace_hh_id, trace_label): """ @@ -289,7 +289,7 @@ def schedule_trips_in_leg( trips probs_spec depart_alt_base - last_iteration + is_last_iteration trace_hh_id trace_label @@ -319,56 +319,60 @@ def schedule_trips_in_leg( result_list.append(choices) trips = trips[~no_scheduling] - # add next_trip_id temp column (temp as trips is now a copy, as result of slicing) - trips = trips.sort_index() - trips['next_trip_id'] = np.roll(trips.index, -1 if outbound else 1) - is_final = (trips.trip_num == trips.trip_count) if outbound else (trips.trip_num == 1) - trips.next_trip_id = trips.next_trip_id.where(~is_final, NO_TRIP_ID) - - # iterate over outbound trips in ascending trip_num order, skipping the initial trip - # iterate over inbound trips in descending trip_num order, skipping the finial trip - first_trip_in_leg = True - for i in range(trips.trip_num.min(), trips.trip_num.max() + 1): - - if outbound: - nth_trips = trips[trips.trip_num == i] - else: - nth_trips = trips[trips.trip_num == trips.trip_count - i] - - nth_trace_label = tracing.extend_trace_label(trace_label, 'num_%s' % i) - - with chunk.chunk_log(nth_trace_label): - choices = schedule_nth_trips( - nth_trips, - probs_spec, - model_settings, - first_trip_in_leg=first_trip_in_leg, - report_failed_trips=last_iteration, - trace_hh_id=trace_hh_id, - trace_label=nth_trace_label) - - # if outbound, this trip's depart constrains next trip's earliest depart option - # if inbound, we are handling in reverse order, so it constrains latest depart instead - ADJUST_NEXT_DEPART_COL = 'earliest' if outbound else 'latest' - - # most initial departure (when no choice was made because all probs were zero) - if last_iteration and (failfix == FAILFIX_CHOOSE_MOST_INITIAL): - choices = choices.reindex(nth_trips.index) - logger.warning("%s coercing %s depart choices to most initial" % - (nth_trace_label, choices.isna().sum())) - choices = choices.fillna(trips[ADJUST_NEXT_DEPART_COL]) - - # adjust allowed depart range of next trip - has_next_trip = (nth_trips.next_trip_id != NO_TRIP_ID) - if has_next_trip.any(): - next_trip_ids = nth_trips.next_trip_id[has_next_trip] - # patch choice any trips with next_trips that weren't scheduled - trips.loc[next_trip_ids, ADJUST_NEXT_DEPART_COL] = \ - choices.reindex(next_trip_ids.index).fillna(trips[ADJUST_NEXT_DEPART_COL]).values - - result_list.append(choices) - - first_trip_in_leg = False + with chunk.chunk_log(trace_label): + + # add next_trip_id temp column (temp as trips is now a copy, as result of slicing) + trips = trips.sort_index() + trips['next_trip_id'] = np.roll(trips.index, -1 if outbound else 1) + is_final = (trips.trip_num == trips.trip_count) if outbound else (trips.trip_num == 1) + trips.next_trip_id = trips.next_trip_id.where(~is_final, NO_TRIP_ID) + + # iterate over outbound trips in ascending trip_num order, skipping the initial trip + # iterate over inbound trips in descending trip_num order, skipping the finial trip + first_trip_in_leg = True + for i in range(trips.trip_num.min(), trips.trip_num.max() + 1): + + if outbound: + nth_trips = trips[trips.trip_num == i] + else: + nth_trips = trips[trips.trip_num == trips.trip_count - i] + + nth_trace_label = tracing.extend_trace_label(trace_label, 'num_%s' % i) + + with chunk.chunk_log(nth_trace_label, chunk_tag=trace_label): + choices = schedule_nth_trips( + nth_trips, + probs_spec, + model_settings, + first_trip_in_leg=first_trip_in_leg, + report_failed_trips=is_last_iteration, + trace_hh_id=trace_hh_id, + trace_label=nth_trace_label) + + # if outbound, this trip's depart constrains next trip's earliest depart option + # if inbound, we are handling in reverse order, so it constrains latest depart instead + ADJUST_NEXT_DEPART_COL = 'earliest' if outbound else 'latest' + + # most initial departure (when no choice was made because all probs were zero) + if is_last_iteration and (failfix == FAILFIX_CHOOSE_MOST_INITIAL): + choices = choices.reindex(nth_trips.index) + logger.warning("%s coercing %s depart choices to most initial" % + (nth_trace_label, choices.isna().sum())) + choices = choices.fillna(trips[ADJUST_NEXT_DEPART_COL]) + + # adjust allowed depart range of next trip + has_next_trip = (nth_trips.next_trip_id != NO_TRIP_ID) + if has_next_trip.any(): + next_trip_ids = nth_trips.next_trip_id[has_next_trip] + # patch choice any trips with next_trips that weren't scheduled + trips.loc[next_trip_ids, ADJUST_NEXT_DEPART_COL] = \ + choices.reindex(next_trip_ids.index).fillna(trips[ADJUST_NEXT_DEPART_COL]).values + + result_list.append(choices) + + chunk.log_df(trace_label, f'result_list', result_list) + + first_trip_in_leg = False if len(result_list) > 1: choices = pd.concat(result_list) @@ -376,60 +380,18 @@ def schedule_trips_in_leg( return choices -def trip_scheduling_calc_row_size(trips, spec, trace_label): - - sizer = chunk.RowSizeEstimator(trace_label) - - # NOTE we chunk chunk_id - # scale row_size by average number of chooser rows per chunk_id - num_choosers = trips['chunk_id'].max() + 1 - rows_per_chunk_id = len(trips) / num_choosers - - # only non-initial trips require scheduling, segment handing first such trip in tour will use most space - outbound_chooser = (trips.trip_num == 2) & trips.outbound & (trips.primary_purpose != 'atwork') - inbound_chooser = (trips.trip_num == trips.trip_count-1) & ~trips.outbound & (trips.primary_purpose != 'atwork') - - # furthermore, inbound and outbound are scheduled independently - if outbound_chooser.sum() > inbound_chooser.sum(): - is_chooser = outbound_chooser - logger.debug(f"{trace_label} {is_chooser.sum()} outbound_choosers of {len(trips)} require scheduling") - else: - is_chooser = inbound_chooser - logger.debug(f"{trace_label} {is_chooser.sum()} inbound_choosers of {len(trips)} require scheduling") - - chooser_fraction = is_chooser.sum()/len(trips) - logger.debug(f"{trace_label} chooser_fraction {chooser_fraction *100}%") - - chooser_row_size = len(trips.columns) + len(spec.columns) - len(PROBS_JOIN_COLUMNS) - sizer.add_elements(chooser_fraction * chooser_row_size, 'choosers') - - # might be clipped to fewer but this is worst case - chooser_probs_row_size = len(spec.columns) - len(PROBS_JOIN_COLUMNS) - sizer.add_elements(chooser_fraction * chooser_probs_row_size, 'chooser_probs') - - sizer.add_elements(chooser_fraction, 'choices') - sizer.add_elements(chooser_fraction, 'rands') - sizer.add_elements(chooser_fraction, 'failed') - - row_size = sizer.get_hwm() - row_size = row_size * rows_per_chunk_id - - return row_size - - def run_trip_scheduling( trips, tours, probs_spec, model_settings, estimator, - last_iteration, + is_last_iteration, chunk_size, + chunk_tag, trace_hh_id, trace_label): - row_size = chunk_size and trip_scheduling_calc_row_size(trips, probs_spec, trace_label) - # only non-initial trips require scheduling, segment handing first such trip in tour will use most space # is_outbound_chooser = (trips.trip_num > 1) & trips.outbound & (trips.primary_purpose != 'atwork') # is_inbound_chooser = (trips.trip_num < trips.trip_count) & ~trips.outbound & (trips.primary_purpose != 'atwork') @@ -437,35 +399,39 @@ def run_trip_scheduling( result_list = [] for i, trips_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers_by_chunk_id(trips, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers_by_chunk_id(trips, chunk_size, trace_label, chunk_tag): if trips_chunk.outbound.any(): + leg_chunk = trips_chunk[trips_chunk.outbound] leg_trace_label = tracing.extend_trace_label(chunk_trace_label, 'outbound') - with chunk.chunk_log(leg_trace_label): - choices = \ - schedule_trips_in_leg( - outbound=True, - trips=trips_chunk[trips_chunk.outbound], - probs_spec=probs_spec, - model_settings=model_settings, - last_iteration=last_iteration, - trace_hh_id=trace_hh_id, - trace_label=leg_trace_label) - result_list.append(choices) + choices = \ + schedule_trips_in_leg( + outbound=True, + trips=leg_chunk, + probs_spec=probs_spec, + model_settings=model_settings, + is_last_iteration=is_last_iteration, + trace_hh_id=trace_hh_id, + trace_label=leg_trace_label) + result_list.append(choices) + + chunk.log_df(trace_label, f'result_list', result_list) if (~trips_chunk.outbound).any(): + leg_chunk = trips_chunk[~trips_chunk.outbound] leg_trace_label = tracing.extend_trace_label(chunk_trace_label, 'inbound') - with chunk.chunk_log(leg_trace_label): - choices = \ - schedule_trips_in_leg( - outbound=False, - trips=trips_chunk[~trips_chunk.outbound], - probs_spec=probs_spec, - model_settings=model_settings, - last_iteration=last_iteration, - trace_hh_id=trace_hh_id, - trace_label=leg_trace_label) - result_list.append(choices) + choices = \ + schedule_trips_in_leg( + outbound=False, + trips=leg_chunk, + probs_spec=probs_spec, + model_settings=model_settings, + is_last_iteration=is_last_iteration, + trace_hh_id=trace_hh_id, + trace_label=leg_trace_label) + result_list.append(choices) + + chunk.log_df(trace_label, f'result_list', result_list) choices = pd.concat(result_list) @@ -564,11 +530,15 @@ def trip_scheduling( while (i < max_iterations) and not trips_df.empty: i += 1 - last_iteration = (i == max_iterations) + is_last_iteration = (i == max_iterations) trace_label_i = tracing.extend_trace_label(trace_label, "i%s" % i) logger.info("%s scheduling %s trips", trace_label_i, trips_df.shape[0]) + # first iteration gets its own chunk_tag and all subsequent iterations are aggregated + # subsequent iterations on failed trips have somewhat different overhead profile than initial batch + chunk_tag = "trip_scheduling_1" if i == 1 else "trip_scheduling_n" + choices = \ run_trip_scheduling( trips_df, @@ -576,16 +546,17 @@ def trip_scheduling( probs_spec, model_settings, estimator=estimator, - last_iteration=last_iteration, + is_last_iteration=is_last_iteration, trace_hh_id=trace_hh_id, chunk_size=chunk_size, + chunk_tag=chunk_tag, trace_label=trace_label_i) # boolean series of trips whose individual trip scheduling failed failed = choices.reindex(trips_df.index).isnull() logger.info("%s %s failed", trace_label_i, failed.sum()) - if not last_iteration: + if not is_last_iteration: # boolean series of trips whose leg scheduling failed failed_cohorts = failed_trip_cohorts(trips_df, failed) trips_df = trips_df[failed_cohorts] diff --git a/activitysim/abm/models/trip_scheduling_choice.py b/activitysim/abm/models/trip_scheduling_choice.py index c13c45ba2..c950b0726 100644 --- a/activitysim/abm/models/trip_scheduling_choice.py +++ b/activitysim/abm/models/trip_scheduling_choice.py @@ -13,8 +13,6 @@ from activitysim.abm.models.util.trip import generate_alternative_sizes, get_time_windows from activitysim.core.interaction_sample_simulate import _interaction_sample_simulate -from activitysim.core.mem import force_garbage_collect - logger = logging.getLogger(__name__) @@ -145,22 +143,6 @@ def stop_two_way_only_patterns(tours, travel_duration_col=TOUR_DURATION_COLUMN): return patterns -def trip_schedule_calc_row_size(choosers, trace_label): - """ - rows_per_chunk calculator for trip_scheduler - """ - - sizer = chunk.RowSizeEstimator(trace_label) - - chooser_row_size = len(choosers.columns) - spec_columns = 3 - - sizer.add_elements(chooser_row_size + spec_columns, 'choosers') - - row_size = sizer.get_hwm() - return row_size - - def get_pattern_index_and_arrays(tour_indexes, durations, one_way=True): """ A helper method to quickly calculate all of the potential time windows @@ -253,11 +235,10 @@ def run_trip_scheduling_choice(spec, tours, skims, locals_dict, if len(indirect_tours) > 0: - row_size = chunk_size and trip_schedule_calc_row_size(indirect_tours, trace_label) # Iterate through the chunks result_list = [] for i, choosers, chunk_trace_label in \ - chunk.adaptive_chunked_choosers(indirect_tours, chunk_size, row_size, trace_label): + chunk.adaptive_chunked_choosers(indirect_tours, chunk_size, trace_label): # Sort the choosers and get the schedule alternatives choosers = choosers.sort_index() @@ -274,6 +255,7 @@ def run_trip_scheduling_choice(spec, tours, skims, locals_dict, spec=spec, choice_column=SCHEDULE_ID, allow_zero_probs=True, zero_prob_choice_val=-999, + log_alt_losers=False, want_logsums=False, skims=skims, locals_d=locals_dict, @@ -288,7 +270,7 @@ def run_trip_scheduling_choice(spec, tours, skims, locals_dict, result_list.append(choices) - force_garbage_collect() + chunk.log_df(trace_label, f'result_list', result_list) # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 1bb3fcd86..569e8e5f0 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -48,7 +48,7 @@ def canonical_tours(): # FIXME we pathalogically know what the possible tour_types and their max tour_nums are # FIXME instead, should get flavors from alts tables (but we would have to know their names...) - # alts = orca.get_table('non_mandatory_tour_frequency_alts').local + # alts = pipeline.get_table('non_mandatory_tour_frequency_alts') # non_mandatory_tour_flavors = {c : alts[c].max() for c in alts.columns} # - non_mandatory_channels diff --git a/activitysim/abm/models/util/cdap.py b/activitysim/abm/models/util/cdap.py index c130242d8..e6a1e40fc 100644 --- a/activitysim/abm/models/util/cdap.py +++ b/activitysim/abm/models/util/cdap.py @@ -253,7 +253,7 @@ def get_cached_spec(hhsize): spec = inject.get_injectable(spec_name, None) if spec is not None: - logger.info("build_cdap_spec returning cached injectable spec %s", spec_name) + logger.debug("build_cdap_spec returning cached injectable spec %s", spec_name) return spec # this is problematic for multiprocessing and since we delete csv files in output_dir @@ -876,30 +876,6 @@ def _run_cdap( return result -def cdap_calc_row_size(choosers, cdap_indiv_spec, trace_label): - - sizer = chunk.RowSizeEstimator(trace_label) - - # NOTE we chunk chunk_id - num_choosers = choosers['chunk_id'].max() + 1 - rows_per_chunk_id = len(choosers) / num_choosers - - chooser_row_size = len(choosers.columns) - - sizer.add_elements(chooser_row_size, 'persons') - sizer.add_elements(len(cdap_indiv_spec), 'indiv_utils') - sizer.add_elements(1, 'hh_activity_choices') - sizer.add_elements(1, 'cdap_rank') - sizer.add_elements(1, 'cdap_activity') - - row_size = sizer.get_hwm() - - # scale row_size by average number of chooser rows per chunk_id - row_size = row_size * rows_per_chunk_id - - return row_size - - def run_cdap( persons, person_type_map, @@ -946,12 +922,10 @@ def run_cdap( trace_label = tracing.extend_trace_label(trace_label, 'cdap') - row_size = chunk_size and cdap_calc_row_size(persons, cdap_indiv_spec, trace_label) - result_list = [] # segment by person type and pick the right spec for each person type for i, persons_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers_by_chunk_id(persons, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers_by_chunk_id(persons, chunk_size, trace_label): cdap_results = \ _run_cdap(persons_chunk, @@ -964,6 +938,8 @@ def run_cdap( result_list.append(cdap_results) + chunk.log_df(trace_label, f'result_list', result_list) + # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: # http://pandas.pydata.org/pandas-docs/stable/io.html#id2 diff --git a/activitysim/abm/models/util/logsums.py b/activitysim/abm/models/util/logsums.py index 7d49248f7..1441d73be 100644 --- a/activitysim/abm/models/util/logsums.py +++ b/activitysim/abm/models/util/logsums.py @@ -35,7 +35,9 @@ def compute_logsums(choosers, tour_purpose, logsum_settings, model_settings, network_los, - chunk_size, trace_label): + chunk_size, + chunk_tag, + trace_label): """ Parameters @@ -150,6 +152,7 @@ def compute_logsums(choosers, skims=skims, locals_d=locals_dict, chunk_size=chunk_size, + chunk_tag=chunk_tag, trace_label=trace_label) return logsums diff --git a/activitysim/abm/models/util/test/test_cdap.py b/activitysim/abm/models/util/test/test_cdap.py index 4f90973bf..9056264b1 100644 --- a/activitysim/abm/models/util/test/test_cdap.py +++ b/activitysim/abm/models/util/test/test_cdap.py @@ -13,6 +13,7 @@ from activitysim.core import simulate from activitysim.core import inject from activitysim.core import config +from activitysim.core import chunk @pytest.fixture(scope='module') @@ -48,6 +49,8 @@ def configs_dir(): def setup_function(): configs_dir = os.path.join(os.path.dirname(__file__), 'configs') inject.add_injectable("configs_dir", configs_dir) + output_dir = os.path.join(os.path.dirname(__file__), 'output') + inject.add_injectable("output_dir", output_dir) def test_bad_coefficients(): @@ -66,7 +69,8 @@ def test_assign_cdap_rank(people, model_settings): person_type_map = model_settings.get('PERSON_TYPE_MAP', {}) - cdap.assign_cdap_rank(people, person_type_map) + with chunk.chunk_log('test_assign_cdap_rank', base=True): + cdap.assign_cdap_rank(people, person_type_map) expected = pd.Series( [1, 1, 1, 2, 2, 1, 3, 1, 2, 1, 3, 2, 1, 3, 2, 4, 1, 3, 4, 2], @@ -81,8 +85,10 @@ def test_individual_utilities(people, model_settings): cdap_indiv_and_hhsize1 = simulate.read_model_spec(file_name='cdap_indiv_and_hhsize1.csv') person_type_map = model_settings.get('PERSON_TYPE_MAP', {}) - cdap.assign_cdap_rank(people, person_type_map) - individual_utils = cdap.individual_utilities(people, cdap_indiv_and_hhsize1, locals_d=None) + + with chunk.chunk_log('test_individual_utilities', base=True): + cdap.assign_cdap_rank(people, person_type_map) + individual_utils = cdap.individual_utilities(people, cdap_indiv_and_hhsize1, locals_d=None) individual_utils = individual_utils[['M', 'N', 'H']] @@ -122,16 +128,25 @@ def test_build_cdap_spec_hhsize2(people, model_settings): interaction_coefficients = cdap.preprocess_interaction_coefficients(interaction_coefficients) person_type_map = model_settings.get('PERSON_TYPE_MAP', {}) - cdap.assign_cdap_rank(people, person_type_map) - indiv_utils = cdap.individual_utilities(people, cdap_indiv_and_hhsize1, locals_d=None) - choosers = cdap.hh_choosers(indiv_utils, hhsize=hhsize) + with chunk.chunk_log('test_build_cdap_spec_hhsize2', base=True): + cdap.assign_cdap_rank(people, person_type_map) + indiv_utils = cdap.individual_utilities(people, cdap_indiv_and_hhsize1, locals_d=None) + + choosers = cdap.hh_choosers(indiv_utils, hhsize=hhsize) + + spec = cdap.build_cdap_spec(interaction_coefficients, hhsize=hhsize, cache=False) + + # pandas.dot depends on column names of expression_values matching spec index values + # expressions should have been uniquified when spec was read + assert spec.index.is_unique - spec = cdap.build_cdap_spec(interaction_coefficients, hhsize=hhsize, cache=False) + vars = simulate.eval_variables(spec.index, choosers) + assert (spec.index.values == vars.columns.values).all() - vars = simulate.eval_variables(spec.index, choosers) + # spec = spec.astype(np.float64) - utils = simulate.compute_utilities(vars, spec) + utils = vars.dot(spec) expected = pd.DataFrame([ [0, 3, 0, 3, 7, 3, 0, 3, 0], # household 3 diff --git a/activitysim/abm/models/util/test/test_vectorize_tour_scheduling.py b/activitysim/abm/models/util/test/test_vectorize_tour_scheduling.py index 2e301f12e..3e9b61b89 100644 --- a/activitysim/abm/models/util/test/test_vectorize_tour_scheduling.py +++ b/activitysim/abm/models/util/test/test_vectorize_tour_scheduling.py @@ -14,6 +14,16 @@ vectorize_tour_scheduling +def teardown_function(func): + inject.clear_cache() + inject.reinject_decorated_tables() + + +def setup_function(): + output_dir = os.path.join(os.path.dirname(__file__), 'output') + inject.add_injectable("output_dir", output_dir) + + def test_vts(): inject.add_injectable("settings", {}) diff --git a/activitysim/abm/models/util/tour_destination.py b/activitysim/abm/models/util/tour_destination.py index 20add343f..7482aeb6d 100644 --- a/activitysim/abm/models/util/tour_destination.py +++ b/activitysim/abm/models/util/tour_destination.py @@ -17,9 +17,6 @@ from activitysim.core.interaction_sample_simulate import interaction_sample_simulate from activitysim.core.interaction_sample import interaction_sample -from activitysim.core.mem import force_garbage_collect - - from . import logsums as logsum from activitysim.abm.tables.size_terms import tour_destination_size_terms @@ -79,6 +76,7 @@ def _destination_sample( model_settings, alt_dest_col_name, chunk_size, + chunk_tag, trace_label): model_spec = simulate.spec_for_segment(model_settings, spec_id='SAMPLE_SPEC', @@ -99,15 +97,19 @@ def _destination_sample( if constants is not None: locals_d.update(constants) + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample( choosers, alternatives=destination_size_terms, sample_size=sample_size, alt_col_name=alt_dest_col_name, + log_alt_losers=log_alt_losers, spec=model_spec, skims=skims, locals_d=locals_d, chunk_size=chunk_size, + chunk_tag=chunk_tag, trace_label=trace_label) # remember person_id in chosen alts so we can merge with persons in subsequent steps @@ -126,6 +128,8 @@ def destination_sample( estimator, chunk_size, trace_label): + chunk_tag = 'tour_destination.sample' + # create wrapper with keys for this lookup # the skims will be available under the name "skims" for any @ expressions skim_origin_col_name = model_settings['CHOOSER_ORIG_COL_NAME'] @@ -148,8 +152,8 @@ def destination_sample( estimator, model_settings, alt_dest_col_name, - chunk_size, - trace_label) + chunk_size, chunk_tag=chunk_tag, + trace_label=trace_label) return choices @@ -177,6 +181,7 @@ def aggregate_size_terms(dest_size_terms, network_los): # aggregate to TAZ TAZ_size_terms = MAZ_size_terms.groupby(DEST_TAZ).agg({'size_term': 'sum'}) + TAZ_size_terms[DEST_TAZ] = TAZ_size_terms.index assert not TAZ_size_terms['size_term'].isna().any() # size_term @@ -391,6 +396,7 @@ def destination_presample( chunk_size, trace_label): trace_label = tracing.extend_trace_label(trace_label, 'presample') + chunk_tag = 'tour_destination.presample' logger.info(f"{trace_label} location_presample") @@ -418,8 +424,8 @@ def destination_presample( estimator, model_settings, DEST_TAZ, - chunk_size, - trace_label) + chunk_size, chunk_tag=chunk_tag, + trace_label=trace_label) # choose a MAZ for each DEST_TAZ choice, choice probability based on MAZ size_term fraction of TAZ total maz_choices = choose_MAZ_for_TAZ(taz_sample, MAZ_size_terms, trace_label) @@ -519,6 +525,8 @@ def run_destination_logsums( logsum_settings = config.read_model_settings(model_settings['LOGSUM_SETTINGS']) + chunk_tag = 'tour_destination.logsums' + # FIXME - MEMORY HACK - only include columns actually used in spec persons_merged = logsum.filter_chooser_columns(persons_merged, logsum_settings, model_settings) @@ -540,6 +548,7 @@ def run_destination_logsums( logsum_settings, model_settings, network_los, chunk_size, + chunk_tag, trace_label) destination_sample['mode_choice_logsum'] = logsums @@ -562,6 +571,7 @@ def run_destination_simulate( run destination_simulate on tour_destination_sample annotated with mode_choice logsum to select a destination from sample alternatives """ + chunk_tag = 'tour_destination.simulate' model_spec = simulate.spec_for_segment(model_settings, spec_id='SPEC', segment_name=spec_segment_name, estimator=estimator) @@ -608,15 +618,18 @@ def run_destination_simulate( tracing.dump_df(DUMP, choosers, trace_label, 'choosers') + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample_simulate( choosers, destination_sample, spec=model_spec, choice_column=alt_dest_col_name, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, skims=skims, locals_d=locals_d, - chunk_size=chunk_size, + chunk_size=chunk_size, chunk_tag=chunk_tag, trace_label=trace_label, trace_choice_name='destination', estimator=estimator) @@ -715,10 +728,9 @@ def run_tour_destination( # FIXME - sample_table location_sample_df.set_index(model_settings['ALT_DEST_COL_NAME'], append=True, inplace=True) sample_list.append(location_sample_df) - - # FIXME - want to do this here? - del location_sample_df - force_garbage_collect() + else: + # del this so we dont hold active reference to it while run_location_sample is creating its replacement + del location_sample_df if len(choices_list) > 0: choices_df = pd.concat(choices_list) diff --git a/activitysim/abm/models/util/trip.py b/activitysim/abm/models/util/trip.py index 6c8cd30ab..5021bd531 100644 --- a/activitysim/abm/models/util/trip.py +++ b/activitysim/abm/models/util/trip.py @@ -95,7 +95,7 @@ def np_shift(xs, n, fill_zero=True): shift_array = np.concatenate((np.full(n, np.nan), xs[:-n])) else: shift_array = np.concatenate((xs[-n:], np.full(-n, np.nan))) - return np.nan_to_num(shift_array, np.nan).astype(np.int) if fill_zero else shift_array + return np.nan_to_num(shift_array, np.nan).astype(int) if fill_zero else shift_array levels = np.empty([max_trips, max_duration + max_trips]) levels[0] = np.arange(1, max_duration + max_trips + 1) diff --git a/activitysim/abm/models/util/vectorize_tour_scheduling.py b/activitysim/abm/models/util/vectorize_tour_scheduling.py index 358ec60ee..358850750 100644 --- a/activitysim/abm/models/util/vectorize_tour_scheduling.py +++ b/activitysim/abm/models/util/vectorize_tour_scheduling.py @@ -96,56 +96,57 @@ def _compute_logsums(alt_tdd, tours_merged, tour_purpose, model_settings, networ trace_label = tracing.extend_trace_label(trace_label, 'logsums') - logsum_settings = config.read_model_settings(model_settings['LOGSUM_SETTINGS']) + with chunk.chunk_log(trace_label): + logsum_settings = config.read_model_settings(model_settings['LOGSUM_SETTINGS']) - choosers = alt_tdd.join(tours_merged, how='left', rsuffix='_chooser') - logger.info(f"{trace_label} compute_logsums for {choosers.shape[0]} choosers {alt_tdd.shape[0]} alts") + choosers = alt_tdd.join(tours_merged, how='left', rsuffix='_chooser') + logger.info(f"{trace_label} compute_logsums for {choosers.shape[0]} choosers {alt_tdd.shape[0]} alts") - # - locals_dict - constants = config.get_model_constants(logsum_settings) - locals_dict = {} - locals_dict.update(constants) + # - locals_dict + constants = config.get_model_constants(logsum_settings) + locals_dict = {} + locals_dict.update(constants) - if network_los.zone_system == los.THREE_ZONE: - # TVPB constants can appear in expressions - locals_dict.update(network_los.setting('TVPB_SETTINGS.tour_mode_choice.CONSTANTS')) + if network_los.zone_system == los.THREE_ZONE: + # TVPB constants can appear in expressions + locals_dict.update(network_los.setting('TVPB_SETTINGS.tour_mode_choice.CONSTANTS')) - locals_dict.update(skims) + locals_dict.update(skims) - # constrained coefficients can appear in expressions - coefficients = simulate.get_segment_coefficients(logsum_settings, tour_purpose) - locals_dict.update(coefficients) + # constrained coefficients can appear in expressions + coefficients = simulate.get_segment_coefficients(logsum_settings, tour_purpose) + locals_dict.update(coefficients) - # - run preprocessor to annotate choosers - # allow specification of alternate preprocessor for nontour choosers - preprocessor = model_settings.get('LOGSUM_PREPROCESSOR', 'preprocessor') - preprocessor_settings = logsum_settings[preprocessor] + # - run preprocessor to annotate choosers + # allow specification of alternate preprocessor for nontour choosers + preprocessor = model_settings.get('LOGSUM_PREPROCESSOR', 'preprocessor') + preprocessor_settings = logsum_settings[preprocessor] - if preprocessor_settings: + if preprocessor_settings: - simulate.set_skim_wrapper_targets(choosers, skims) + simulate.set_skim_wrapper_targets(choosers, skims) - expressions.assign_columns( - df=choosers, - model_settings=preprocessor_settings, - locals_dict=locals_dict, - trace_label=trace_label) + expressions.assign_columns( + df=choosers, + model_settings=preprocessor_settings, + locals_dict=locals_dict, + trace_label=trace_label) - # - compute logsums - logsum_spec = simulate.read_model_spec(file_name=logsum_settings['SPEC']) - logsum_spec = simulate.eval_coefficients(logsum_spec, coefficients, estimator=None) - - nest_spec = config.get_logit_model_settings(logsum_settings) - nest_spec = simulate.eval_nest_coefficients(nest_spec, coefficients, trace_label) - - logsums = simulate.simple_simulate_logsums( - choosers, - logsum_spec, - nest_spec, - skims=skims, - locals_d=locals_dict, - chunk_size=0, - trace_label=trace_label) + # - compute logsums + logsum_spec = simulate.read_model_spec(file_name=logsum_settings['SPEC']) + logsum_spec = simulate.eval_coefficients(logsum_spec, coefficients, estimator=None) + + nest_spec = config.get_logit_model_settings(logsum_settings) + nest_spec = simulate.eval_nest_coefficients(nest_spec, coefficients, trace_label) + + logsums = simulate.simple_simulate_logsums( + choosers, + logsum_spec, + nest_spec, + skims=skims, + locals_d=locals_dict, + chunk_size=0, + trace_label=trace_label) return logsums @@ -155,73 +156,83 @@ def dedupe_alt_tdd(alt_tdd, tour_purpose, trace_label): tdd_segments = inject.get_injectable('tdd_alt_segments', None) alt_tdd_periods = None - if tdd_segments is not None: + logger.info(f"tdd_alt_segments specified for representative logsums") + + with chunk.chunk_log(tracing.extend_trace_label(trace_label, 'dedupe_alt_tdd')): - dedupe_columns = ['out_period', 'in_period'] + if tdd_segments is not None: - # tdd_alt_segments is optionally segmented by tour purpose - if 'tour_purpose' in tdd_segments: + dedupe_columns = ['out_period', 'in_period'] - is_tdd_for_tour_purpose = (tdd_segments.tour_purpose == tour_purpose) - if not is_tdd_for_tour_purpose.any(): - is_tdd_for_tour_purpose = tdd_segments.tour_purpose.isnull() - assert is_tdd_for_tour_purpose.any(), \ - f"no segments found for tour purpose {tour_purpose} in tour_departure_and_duration_segments" + # tdd_alt_segments is optionally segmented by tour purpose + if 'tour_purpose' in tdd_segments: - tdd_segments = tdd_segments[is_tdd_for_tour_purpose].drop(columns=['tour_purpose']) - assert len(tdd_segments) > 0, f"tour_purpose '{tour_purpose}' not in tdd_alt_segments" + is_tdd_for_tour_purpose = (tdd_segments.tour_purpose == tour_purpose) + if not is_tdd_for_tour_purpose.any(): + is_tdd_for_tour_purpose = tdd_segments.tour_purpose.isnull() + assert is_tdd_for_tour_purpose.any(), \ + f"no segments found for tour purpose {tour_purpose} in tour_departure_and_duration_segments" - # left join representative start on out_period - alt_tdd_periods = \ - pd.merge(alt_tdd[['out_period', 'in_period']].reset_index(), - tdd_segments[['time_period', 'start']].rename(columns={'time_period': 'out_period'}), - how='left', on='out_period') + tdd_segments = tdd_segments[is_tdd_for_tour_purpose].drop(columns=['tour_purpose']) + assert len(tdd_segments) > 0, f"tour_purpose '{tour_purpose}' not in tdd_alt_segments" - # left join representative end on in_period - alt_tdd_periods = \ - pd.merge(alt_tdd_periods, - tdd_segments[['time_period', 'end']].rename(columns={'time_period': 'in_period'}), - how='left', on=['in_period']) + # left join representative start on out_period + alt_tdd_periods = \ + pd.merge(alt_tdd[['out_period', 'in_period']].reset_index(), + tdd_segments[['time_period', 'start']].rename(columns={'time_period': 'out_period'}), + how='left', on='out_period') + chunk.log_df(trace_label, "alt_tdd_periods", alt_tdd_periods) - if tdd_segments.start.isnull().any(): - missing_periods = tdd_segments.out_period[tdd_segments.start.isnull()].unique() - logger.warning(f"missing out_periods in tdd_alt_segments: {missing_periods}") + # left join representative end on in_period + alt_tdd_periods = \ + pd.merge(alt_tdd_periods, + tdd_segments[['time_period', 'end']].rename(columns={'time_period': 'in_period'}), + how='left', on=['in_period']) + chunk.log_df(trace_label, "alt_tdd_periods", alt_tdd_periods) - if tdd_segments.end.isnull().any(): - missing_periods = tdd_segments.in_period[tdd_segments.end.isnull()].unique() - logger.warning(f"missing in_periods in tdd_alt_segments: {missing_periods}") + if tdd_segments.start.isnull().any(): + missing_periods = tdd_segments.out_period[tdd_segments.start.isnull()].unique() + logger.warning(f"missing out_periods in tdd_alt_segments: {missing_periods}") - assert not tdd_segments.start.isnull().any() - assert not tdd_segments.end.isnull().any() + if tdd_segments.end.isnull().any(): + missing_periods = tdd_segments.in_period[tdd_segments.end.isnull()].unique() + logger.warning(f"missing in_periods in tdd_alt_segments: {missing_periods}") - # drop duplicates - alt_tdd_periods = alt_tdd_periods.drop_duplicates().set_index(alt_tdd.index.name) + assert not tdd_segments.start.isnull().any() + assert not tdd_segments.end.isnull().any() - # representative duration - alt_tdd_periods['duration'] = alt_tdd_periods['end'] - alt_tdd_periods['start'] + # drop duplicates + alt_tdd_periods = alt_tdd_periods.drop_duplicates().set_index(alt_tdd.index.name) + chunk.log_df(trace_label, "alt_tdd_periods", alt_tdd_periods) - logger.debug(f"{trace_label} " - f"dedupe_alt_tdd.tdd_alt_segments reduced number of rows by " - f"{round(100 * (len(alt_tdd) - len(alt_tdd_periods)) / len(alt_tdd), 2)}% " - f"from {len(alt_tdd)} to {len(alt_tdd_periods)}") + # representative duration + alt_tdd_periods['duration'] = alt_tdd_periods['end'] - alt_tdd_periods['start'] + chunk.log_df(trace_label, "alt_tdd_periods", alt_tdd_periods) - # if there is no tdd_alt_segments file, we can at least dedupe on 'out_period', 'in_period', 'duration' - if alt_tdd_periods is None: + logger.debug(f"{trace_label} " + f"dedupe_alt_tdd.tdd_alt_segments reduced number of rows by " + f"{round(100 * (len(alt_tdd) - len(alt_tdd_periods)) / len(alt_tdd), 2)}% " + f"from {len(alt_tdd)} to {len(alt_tdd_periods)}") - # FIXME This won't work if they reference start or end in logsum calculations - # for MTC only duration is used (to calculate all_day parking cost) - dedupe_columns = ['out_period', 'in_period', 'duration'] + # if there is no tdd_alt_segments file, we can at least dedupe on 'out_period', 'in_period', 'duration' + if alt_tdd_periods is None: - logger.warning(f"No tdd_alt_segments so fallback to deduping tdd_alts by time_period and duration") + # FIXME This won't work if they reference start or end in logsum calculations + # for MTC only duration is used (to calculate all_day parking cost) + dedupe_columns = ['out_period', 'in_period', 'duration'] - # - get list of unique (tour_id, out_period, in_period, duration) in alt_tdd_periods - # we can cut the number of alts roughly in half (for mtctm1) by conflating duplicates - alt_tdd_periods = alt_tdd[dedupe_columns].reset_index().drop_duplicates().set_index(alt_tdd.index.name) + logger.warning(f"No tdd_alt_segments for representative logsums so fallback to " + f"deduping tdd_alts by time_period and duration") - logger.debug(f"{trace_label} " - f"dedupe_alt_tdd.drop_duplicates reduced number of rows by " - f"{round(100 * (len(alt_tdd) - len(alt_tdd_periods)) / len(alt_tdd), 2)}% " - f"from {len(alt_tdd)} to {len(alt_tdd_periods)}") + # - get list of unique (tour_id, out_period, in_period, duration) in alt_tdd_periods + # we can cut the number of alts roughly in half (for mtctm1) by conflating duplicates + alt_tdd_periods = alt_tdd[dedupe_columns].reset_index().drop_duplicates().set_index(alt_tdd.index.name) + chunk.log_df(trace_label, "alt_tdd_periods", alt_tdd_periods) + + logger.debug(f"{trace_label} " + f"dedupe_alt_tdd.drop_duplicates reduced number of rows by " + f"{round(100 * (len(alt_tdd) - len(alt_tdd_periods)) / len(alt_tdd), 2)}% " + f"from {len(alt_tdd)} to {len(alt_tdd_periods)}") return alt_tdd_periods, dedupe_columns @@ -249,45 +260,58 @@ def compute_logsums(alt_tdd, tours_merged, tour_purpose, model_settings, skims, alt_tdd['in_period'] = network_los.skim_time_period_label(alt_tdd['end']) alt_tdd['duration'] = alt_tdd['end'] - alt_tdd['start'] - if USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS: - # compute logsums for all the tour alt_tdds (inefficient) - logsums = _compute_logsums(alt_tdd, tours_merged, tour_purpose, model_settings, network_los, skims, trace_label) - return logsums - - index_name = alt_tdd.index.name - deduped_alt_tdds, redupe_columns = dedupe_alt_tdd(alt_tdd, tour_purpose, trace_label) - - logger.info(f"{trace_label} compute_logsums " - f"deduped_alt_tdds reduced number of rows by " - f"{round(100 * (len(alt_tdd) - len(deduped_alt_tdds)) / len(alt_tdd), 2)}% " - f"from {len(alt_tdd)} to {len(deduped_alt_tdds)} compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS") - - t0 = tracing.print_elapsed_time() - - # - compute logsums for the alt_tdd_periods - deduped_alt_tdds['logsums'] = \ - _compute_logsums(deduped_alt_tdds, tours_merged, tour_purpose, model_settings, network_los, skims, trace_label) - - # tracing.log_runtime(model_name=trace_label, start_time=t0) - - # redupe - join the alt_tdd_period logsums to alt_tdd to get logsums for alt_tdd - logsums = pd.merge( - alt_tdd.reset_index(), - deduped_alt_tdds.reset_index(), - on=[index_name] + redupe_columns, - how='left' - ).set_index(index_name).logsums - - # this is really expensive - TRACE = False - if TRACE: - trace_logsums_df = logsums.to_frame('representative_logsum') - trace_logsums_df['brute_force_logsum'] = \ - _compute_logsums(alt_tdd, tours_merged, tour_purpose, model_settings, network_los, skims, trace_label) - tracing.trace_df(trace_logsums_df, - label=tracing.extend_trace_label(trace_label, 'representative_logsums'), - slicer='NONE', transpose=False) + # outside chunk_log context because we extend log_df call for alt_tdd made by our only caller _schedule_tours + chunk.log_df(trace_label, "alt_tdd", alt_tdd) + + with chunk.chunk_log(trace_label): + if USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS: + # compute logsums for all the tour alt_tdds (inefficient) + logsums = _compute_logsums(alt_tdd, tours_merged, tour_purpose, + model_settings, network_los, skims, trace_label) + return logsums + + index_name = alt_tdd.index.name + deduped_alt_tdds, redupe_columns = dedupe_alt_tdd(alt_tdd, tour_purpose, trace_label) + chunk.log_df(trace_label, "deduped_alt_tdds", deduped_alt_tdds) + + logger.info(f"{trace_label} compute_logsums " + f"deduped_alt_tdds reduced number of rows by " + f"{round(100 * (len(alt_tdd) - len(deduped_alt_tdds)) / len(alt_tdd), 2)}% " + f"from {len(alt_tdd)} to {len(deduped_alt_tdds)} compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS") + + t0 = tracing.print_elapsed_time() + + # - compute logsums for the alt_tdd_periods + deduped_alt_tdds['logsums'] = \ + _compute_logsums(deduped_alt_tdds, tours_merged, tour_purpose, + model_settings, network_los, skims, trace_label) + + # tracing.log_runtime(model_name=trace_label, start_time=t0) + + # redupe - join the alt_tdd_period logsums to alt_tdd to get logsums for alt_tdd + logsums = pd.merge( + alt_tdd.reset_index(), + deduped_alt_tdds.reset_index(), + on=[index_name] + redupe_columns, + how='left' + ).set_index(index_name).logsums + chunk.log_df(trace_label, "logsums", logsums) + + del deduped_alt_tdds + chunk.log_df(trace_label, "deduped_alt_tdds", None) + + # this is really expensive + TRACE = False + if TRACE: + trace_logsums_df = logsums.to_frame('representative_logsum') + trace_logsums_df['brute_force_logsum'] = \ + _compute_logsums(alt_tdd, tours_merged, tour_purpose, model_settings, network_los, skims, trace_label) + tracing.trace_df(trace_logsums_df, + label=tracing.extend_trace_label(trace_label, 'representative_logsums'), + slicer='NONE', transpose=False) + + # leave it to our caller to pick up logsums with call to chunk.log_df return logsums @@ -359,28 +383,37 @@ def tdd_interaction_dataset(tours, alts, timetable, choice_column, window_id_col """ - alts_ids = np.tile(alts.index, len(tours.index)) - tour_ids = np.repeat(tours.index, len(alts.index)) - window_row_ids = np.repeat(tours[window_id_col], len(alts.index)) + trace_label = tracing.extend_trace_label(trace_label, 'tdd_interaction_dataset') + + with chunk.chunk_log(trace_label): + alts_ids = np.tile(alts.index, len(tours.index)) + chunk.log_df(trace_label, 'alts_ids', alts_ids) + + tour_ids = np.repeat(tours.index, len(alts.index)) + window_row_ids = np.repeat(tours[window_id_col], len(alts.index)) + + alt_tdd = alts.take(alts_ids) - alt_tdd = alts.take(alts_ids) + alt_tdd.index = tour_ids + alt_tdd[window_id_col] = window_row_ids - alt_tdd.index = tour_ids - alt_tdd[window_id_col] = window_row_ids + # add tdd alternative id + # by convention, the choice column is the first column in the interaction dataset + alt_tdd.insert(loc=0, column=choice_column, value=alts_ids) - # add tdd alternative id - # by convention, the choice column is the first column in the interaction dataset - alt_tdd.insert(loc=0, column=choice_column, value=alts_ids) + # slice out all non-available tours + available = timetable.tour_available(alt_tdd[window_id_col], alt_tdd[choice_column]) + logger.debug(f"tdd_interaction_dataset keeping {available.sum()} of ({len(available)}) available alt_tdds") + assert available.any() - # slice out all non-available tours - available = timetable.tour_available(alt_tdd[window_id_col], alt_tdd[choice_column]) - logger.debug(f"tdd_interaction_dataset keeping {available.sum()} of ({len(available)}) available alt_tdds") - assert available.any() + chunk.log_df(trace_label, 'alt_tdd', alt_tdd) # catch this before we slice on available - alt_tdd = alt_tdd[available] + alt_tdd = alt_tdd[available] - # FIXME - don't need this any more after slicing - del alt_tdd[window_id_col] + chunk.log_df(trace_label, 'alt_tdd', alt_tdd) + + # FIXME - don't need this any more after slicing + del alt_tdd[window_id_col] return alt_tdd @@ -510,23 +543,23 @@ def _schedule_tours( # dataframe columns start, end , duration, person_id, tdd # indexed (not unique) on tour_id choice_column = TDD_CHOICE_COLUMN - alt_tdd = tdd_interaction_dataset(tours, alts, timetable, choice_column, window_id_col, - tour_trace_label) + alt_tdd = tdd_interaction_dataset(tours, alts, timetable, choice_column, window_id_col, tour_trace_label) # print(f"tours {tours.shape} alts {alts.shape}") chunk.log_df(tour_trace_label, "alt_tdd", alt_tdd) # - add logsums if logsum_tour_purpose: - logsums = \ - compute_logsums(alt_tdd, tours, logsum_tour_purpose, model_settings, skims, tour_trace_label) + logsums = compute_logsums(alt_tdd, tours, logsum_tour_purpose, model_settings, skims, tour_trace_label) else: logsums = 0 alt_tdd['mode_choice_logsum'] = logsums + del logsums + chunk.log_df(tour_trace_label, "alt_tdd", alt_tdd) + # - merge in previous tour columns # adds start_previous and end_previous, joins on index - tours = \ - tours.join(get_previous_tour_by_tourid(tours[tour_owner_id_col], previous_tour, alts)) + tours = tours.join(get_previous_tour_by_tourid(tours[tour_owner_id_col], previous_tour, alts)) chunk.log_df(tour_trace_label, "tours", tours) # - make choices @@ -555,16 +588,20 @@ def _schedule_tours( estimator.set_alt_id(choice_column) estimator.write_interaction_sample_alternatives(alt_tdd) + log_alt_losers = config.setting('log_alt_losers', False) + choices = interaction_sample_simulate( tours, alt_tdd, spec, choice_column=choice_column, + log_alt_losers=log_alt_losers, locals_d=locals_d, chunk_size=0, trace_label=tour_trace_label, estimator=estimator ) + chunk.log_df(tour_trace_label, 'choices', choices) # - update previous_tour and timetable parameters @@ -577,77 +614,6 @@ def _schedule_tours( return choices -def tour_scheduling_calc_row_size(tours, persons_merged, alternatives, skims, spec, model_settings, trace_label): - - # this will not be consistent across mandatory tours (highest), non_mandatory tours, and atwork subtours (lowest) - TIMETABLE_AVAILABILITY_REDUCTION_FACTOR = 1 - # this appears to be more stable - LOGSUM_DUPLICATE_REDUCTION_FACTOR = 0.5 - - sizer = chunk.RowSizeEstimator(trace_label) - - # chooser is tours merged with persons_merged - chooser_row_size = len(tours.columns) + len(persons_merged.columns) - - # e.g. start, end, duration, - alt_row_size = alternatives.shape[1] + 1 - - # non-available alternatives will be sliced out so this is a over-estimate - # for atwork subtours this may be a gross over-estimate, but that is presumably ok since we are adaptive - sample_size = len(alternatives) * TIMETABLE_AVAILABILITY_REDUCTION_FACTOR - - sizer.add_elements(chooser_row_size, 'tours') # tours_merged with persons - - # alt_tdd tdd_interaction_dataset is cross join of choosers with alternatives - sizer.add_elements((chooser_row_size + alt_row_size) * sample_size, 'interaction_df') - - # eval_interaction_utilities is parsimonious and doesn't create a separate column for each partial utility - sizer.add_elements(sample_size, 'interaction_utilities') # <- this is probably always the HWM - sizer.drop_elements('interaction_df') - - sizer.drop_elements('interaction_utilities') - - sizer.add_elements(alt_row_size, 'utilities_df') - sizer.add_elements(alt_row_size, 'probs') - - if 'LOGSUM_SETTINGS' in model_settings: - - logsum_settings = config.read_model_settings(model_settings['LOGSUM_SETTINGS']) - logsum_spec = simulate.read_model_spec(file_name=logsum_settings['SPEC']) - logsum_nest_spec = config.get_logit_model_settings(logsum_settings) - - if logsum_nest_spec is None: - # expression_values for each spec row - # utilities and probs for each alt - logsum_columns = logsum_spec.shape[0] + (2 * logsum_spec.shape[1]) - else: - # expression_values for each spec row - # raw_utilities and base_probabilities) for each alt - # nested_exp_utilities, nested_probabilities for each nest - # less 1 as nested_probabilities lacks root - nest_count = logit.count_nests(logsum_nest_spec) - logsum_columns = logsum_spec.shape[0] + (2 * logsum_spec.shape[1]) + (2 * nest_count) - 1 - - if USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS: - sizer.add_elements(logsum_columns * sample_size, 'logsum_columns') - else: - # if USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS is false compute_logsums prunes alt_tdd - # to only compute logsums for unique (tour_id, out_period, in_period, duration) in alt_tdd - # which cuts the number of alts by roughly 50% (44% for 100 hh mtctm1 test dataset) - # grep the log for USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS to check actual % savings - duplicate_sample_reduction = 0.5 - sizer.add_elements(logsum_columns * sample_size * LOGSUM_DUPLICATE_REDUCTION_FACTOR, 'logsum_columns') - - row_size = sizer.get_hwm() - - if simulate.tvpb_skims(skims): - # DISABLE_TVPB_OVERHEAD - logger.debug("disable calc_row_size for THREE_ZONE with tap skims") - return 0 - - return row_size - - def schedule_tours( tours, persons_merged, alts, spec, logsum_tour_purpose, @@ -655,7 +621,7 @@ def schedule_tours( timetable, timetable_window_id_col, previous_tour, tour_owner_id_col, estimator, - chunk_size, tour_trace_label): + chunk_size, tour_trace_label, tour_chunk_tag): """ chunking wrapper for _schedule_tours @@ -684,12 +650,9 @@ def schedule_tours( else: skims = None - row_size = chunk_size and \ - tour_scheduling_calc_row_size(tours, persons_merged, alts, skims, spec, model_settings, tour_trace_label) - result_list = [] for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(tours, chunk_size, row_size, tour_trace_label): + in chunk.adaptive_chunked_choosers(tours, chunk_size, tour_trace_label, tour_chunk_tag): choices = _schedule_tours(chooser_chunk, persons_merged, alts, spec, logsum_tour_purpose, @@ -701,7 +664,7 @@ def schedule_tours( result_list.append(choices) - mem.force_garbage_collect() + chunk.log_df(tour_trace_label, f'result_list', result_list) # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: @@ -786,13 +749,15 @@ def vectorize_tour_scheduling(tours, persons_merged, alts, timetable, for tour_num, nth_tours in tours.groupby('tour_num', sort=True): - tour_trace_label = tracing.extend_trace_label(trace_label, 'tour_%s' % (tour_num,)) + tour_trace_label = tracing.extend_trace_label(trace_label, f'tour_{tour_num}') + tour_chunk_tag = tracing.extend_trace_label(trace_label, f"tour_{1 if tour_num == 1 else 'n'}") if tour_segment_col is not None: for tour_segment_name, tour_segment_info in tour_segments.items(): segment_trace_label = tracing.extend_trace_label(tour_trace_label, tour_segment_name) + segment_chunk_tag = tracing.extend_trace_label(tour_chunk_tag, tour_segment_name) # assume segmentation of spec and coefficients are aligned spec_segment_name = tour_segment_info.get('spec_segment_name') @@ -819,7 +784,7 @@ def vectorize_tour_scheduling(tours, persons_merged, alts, timetable, tour_owner_id_col=tour_owner_id_col, estimator=tour_segment_info.get('estimator'), chunk_size=chunk_size, - tour_trace_label=segment_trace_label) + tour_trace_label=segment_trace_label, tour_chunk_tag=segment_chunk_tag) choice_list.append(choices) @@ -842,7 +807,7 @@ def vectorize_tour_scheduling(tours, persons_merged, alts, timetable, tour_owner_id_col=tour_owner_id_col, estimator=tour_segments.get('estimator'), chunk_size=chunk_size, - tour_trace_label=tour_trace_label) + tour_trace_label=tour_trace_label, tour_chunk_tag=tour_chunk_tag) choice_list.append(choices) @@ -927,7 +892,8 @@ def vectorize_subtour_scheduling(parent_tours, subtours, persons_merged, alts, s for tour_num, nth_tours in subtours.groupby('tour_num', sort=True): - tour_trace_label = tracing.extend_trace_label(trace_label, 'tour_%s' % (tour_num,)) + tour_trace_label = tracing.extend_trace_label(trace_label, f'tour_{tour_num}') + tour_chunk_tag = tracing.extend_trace_label(trace_label, f"tour_{1 if tour_num == 1 else 'n'}") # no more than one tour per timetable window per call to schedule_tours assert not nth_tours.parent_tour_id.duplicated().any() @@ -940,7 +906,7 @@ def vectorize_subtour_scheduling(parent_tours, subtours, persons_merged, alts, s timetable, timetable_window_id_col, previous_tour_by_parent_tour_id, tour_owner_id_col, estimator, - chunk_size, tour_trace_label) + chunk_size, tour_trace_label, tour_chunk_tag) choice_list.append(choices) @@ -1039,7 +1005,8 @@ def vectorize_joint_tour_scheduling( for tour_num, nth_tours in joint_tours.groupby('tour_num', sort=True): - tour_trace_label = tracing.extend_trace_label(trace_label, 'tour_%s' % (tour_num,)) + tour_trace_label = tracing.extend_trace_label(trace_label, f'tour_{tour_num}') + tour_chunk_tag = tracing.extend_trace_label(trace_label, f"tour_{1 if tour_num == 1 else 'n'}") # no more than one tour per household per call to schedule_tours assert not nth_tours.household_id.duplicated().any() @@ -1060,7 +1027,7 @@ def vectorize_joint_tour_scheduling( timetable, timetable_window_id_col, previous_tour_by_householdid, tour_owner_id_col, estimator, - chunk_size, tour_trace_label) + chunk_size, tour_trace_label, tour_chunk_tag) # - update timetables of all joint tour participants persons_timetable.assign( diff --git a/activitysim/abm/tables/accessibility.py b/activitysim/abm/tables/accessibility.py index 5284ed988..5be410f1f 100644 --- a/activitysim/abm/tables/accessibility.py +++ b/activitysim/abm/tables/accessibility.py @@ -27,7 +27,7 @@ def accessibility(land_use): if accessibility_df is None: accessibility_df = pd.DataFrame(index=land_use.index) - logger.info("created placeholder accessibility table %s" % (accessibility_df.shape,)) + logger.debug("created placeholder accessibility table %s" % (accessibility_df.shape,)) else: assert accessibility_df.sort_index().index.equals(land_use.to_frame().sort_index().index), \ f"loaded accessibility table index does not match index of land_use table" diff --git a/activitysim/abm/tables/persons.py b/activitysim/abm/tables/persons.py index a1930e461..6eb1683e7 100644 --- a/activitysim/abm/tables/persons.py +++ b/activitysim/abm/tables/persons.py @@ -41,8 +41,8 @@ def persons(households, trace_hh_id): if trace_hh_id: tracing.trace_df(df, "raw.persons", warn_if_empty=True) - print(f"{len(df.household_id.unique())} unique household_ids in persons") - print(f"{len(households.index.unique())} unique household_ids in households") + logger.debug(f"{len(df.household_id.unique())} unique household_ids in persons") + logger.debug(f"{len(households.index.unique())} unique household_ids in households") assert not households.index.duplicated().any() assert not df.index.duplicated().any() diff --git a/activitysim/abm/tables/shadow_pricing.py b/activitysim/abm/tables/shadow_pricing.py index 81b5e7761..91845d8da 100644 --- a/activitysim/abm/tables/shadow_pricing.py +++ b/activitysim/abm/tables/shadow_pricing.py @@ -711,6 +711,7 @@ def load_shadow_price_calculator(model_settings): return spc +@inject.step() def add_size_tables(): """ inject tour_destination_size_terms tables for each model_selector (e.g. school, workplace) diff --git a/activitysim/abm/tables/skims.py b/activitysim/abm/tables/skims.py index 0b622ab85..bdcaf7f3d 100644 --- a/activitysim/abm/tables/skims.py +++ b/activitysim/abm/tables/skims.py @@ -48,7 +48,10 @@ def log_settings(): return [ 'households_sample_size', 'chunk_size', + 'chunk_method', + 'chunk_training_mode', 'multiprocess', 'num_processes', 'resume_after', + 'trace_hh_id', ] diff --git a/activitysim/cli/run.py b/activitysim/cli/run.py index f1241e1bf..272a8d61f 100644 --- a/activitysim/cli/run.py +++ b/activitysim/cli/run.py @@ -6,10 +6,13 @@ import argparse import warnings +import numpy as np + from activitysim.core import inject from activitysim.core import tracing from activitysim.core import config from activitysim.core import pipeline +from activitysim.core import mem from activitysim.core import chunk logger = logging.getLogger(__name__) @@ -197,15 +200,40 @@ def run(args): for k in log_settings: logger.info('SETTING %s: %s' % (k, config.setting(k))) + # OMP_NUM_THREADS: openmp + # OPENBLAS_NUM_THREADS: openblas + # MKL_NUM_THREADS: mkl + for env in ['MKL_NUM_THREADS', 'OMP_NUM_THREADS', 'OPENBLAS_NUM_THREADS']: + logger.info(f"ENV {env}: {os.getenv(env)}") + + np_info_keys = [ + 'atlas_blas_info', + 'atlas_blas_threads_info', + 'atlas_info', + 'atlas_threads_info', + 'blas_info', + 'blas_mkl_info', + 'blas_opt_info', + 'lapack_info', + 'lapack_mkl_info', + 'lapack_opt_info', + 'mkl_info'] + + for cfg_key in np_info_keys: + info = np.__config__.get_info(cfg_key) + if info: + for info_key in ['libraries']: + if info_key in info: + logger.info(f"NUMPY {cfg_key} {info_key}: {info[info_key]}") + t0 = tracing.print_elapsed_time() if config.setting('multiprocess', False): logger.info('run multiprocess simulation') from activitysim.core import mp_tasks - run_list = mp_tasks.get_run_list() injectables = {k: inject.get_injectable(k) for k in INJECTABLES} - mp_tasks.run_multiprocess(run_list, injectables) + mp_tasks.run_multiprocess(injectables) assert not pipeline.is_open() @@ -222,7 +250,10 @@ def run(args): else: pipeline.close_pipeline() - chunk.log_write_hwm() + mem.log_global_hwm() # main process + + chunk.consolidate_logs() + mem.consolidate_logs() tracing.print_elapsed_time('all models', t0) diff --git a/activitysim/core/chunk.py b/activitysim/core/chunk.py index 28e6b0c10..252b780e1 100644 --- a/activitysim/core/chunk.py +++ b/activitysim/core/chunk.py @@ -1,440 +1,951 @@ # ActivitySim # See full license in LICENSE.txt. -from builtins import input -import math +import datetime +import glob import logging -from collections import OrderedDict +import math +import multiprocessing +import os +import threading from contextlib import contextmanager import numpy as np import pandas as pd -from . import util +from . import config from . import mem from . import tracing +from . import util +from .util import GB logger = logging.getLogger(__name__) -# dict of table_dicts keyed by trace_label -# table_dicts are dicts tuples of {table_name: (elements, bytes, mem), ...} -CHUNK_LOG = OrderedDict() +# +# CHUNK_METHODS and METRICS +# + +RSS = 'rss' +USS = 'uss' +BYTES = 'bytes' +HYBRID_RSS = 'hybrid_rss' +HYBRID_USS = 'hybrid_uss' -# array of chunk_size active CHUNK_LOG -CHUNK_SIZE = [] +METRICS = [RSS, USS, BYTES] +CHUNK_METHODS = [RSS, USS, BYTES, HYBRID_RSS, HYBRID_USS] -HWM = [{}] +USS_CHUNK_METHODS = [USS, HYBRID_USS, BYTES] +DEFAULT_CHUNK_METHOD = HYBRID_USS -INITIAL_ROWS_PER_CHUNK = 10 -MAX_ROWSIZE_ERROR = 0.5 # estimated_row_size percentage error warning threshold -INTERACTIVE_TRACE_CHUNKING = False -INTERACTIVE_TRACE_CHUNK_WARNING = False +""" -CHUNK_RSS = False -BYTES_PER_ELEMENT = 8 +The chunk_cache table is a record of the memory usage and observed row_size required for chunking the various models. +The row size differs depending on whether memory usage is calculated by rss, uss, or explicitly allocated bytes. +We record all three during training so the mode can be changed without necessitating retraining. -# chunk size being a bit opaque, it may be helpful to know the chunk size of a small sample run to titrate chunk_size -CHUNK_HISTORY = True # always log chunk history even if chunk_size == 0 +tag, num_rows, rss, uss, bytes, uss_row_size, hybrid_uss_row_size, bytes_row_size +atwork_subtour_frequency.simple, 3498, 86016, 81920, 811536, 24, 232, 232 +atwork_subtour_mode_choice.simple, 704, 20480, 20480, 1796608, 30, 2552, 2552 +atwork_subtour_scheduling.tour_1, 701, 24576, 24576, 45294082, 36, 64614, 64614 +atwork_subtour_scheduling.tour_n, 3, 20480, 20480, 97734, 6827, 32578, 32578 +auto_ownership_simulate.simulate, 5000, 77824, 24576, 1400000, 5, 280, 280 +MODE_RETRAIN + rebuild chunk_cache table and save/replace in output/cache/chunk_cache.csv + preforms a complete rebuild of chunk_cache table by doing adaptive chunking starting with based on default initial + settings (DEFAULT_INITIAL_ROWS_PER_CHUNK) and observing rss, uss, and allocated bytes to compute rows_size. + This will run somewhat slower than the other modes because of overhead of small first chunk, and possible + instability in the second chunk due to inaccuracies caused by small initial chunk_size sample -def GB(bytes): - # symbols = ('', 'K', 'M', 'G', 'T') - symbols = ('', ' KB', ' MB', ' GB', ' TB') - fmt = "%.1f%s" - for i, s in enumerate(symbols): - units = 1 << i * 10 - if bytes < units * 1024: - return fmt % (bytes / units, s) +MODE_ADAPTIVE + Use the existing chunk_cache to determine the sizing for the first chunk for each model, but also use the + observed row_size to adjust the estimated row_size for subsequent chunks. At the end of hte run, writes the + updated chunk_cache to the output directory, but doesn't overwrite the 'official' cache file. If the user wishes + they can replace the chunk_cache with the updated versions but this is not done automatically as it is not clear + this would be the desired behavior. (Might become clearer over time as this is exercised further.) +MODE_PRODUCTION + Since overhead changes we don't necessarily want the same number of rows per chunk every time + but we do use the row_size from cache which we trust is stable + (the whole point of MODE_PRODUCTION is to avoid the cost of observing overhead) + which is stored in self.initial_row_size because initial_rows_per_chunk used it for the first chunk +""" -def commas(x): - x = int(x) - if x < 10000: - return str(x) - result = '' - while x >= 1000: - x, r = divmod(x, 1000) - result = ",%03d%s" % (r, result) - return "%d%s" % (x, result) +MODE_RETRAIN = 'training' +MODE_ADAPTIVE = 'adaptive' +MODE_PRODUCTION = 'production' +TRAINING_MODES = [MODE_RETRAIN, MODE_ADAPTIVE, MODE_PRODUCTION] +# +# low level +# +ENABLE_MEMORY_MONITOR = True +MEM_MONITOR_TICK = 1 # in seconds -class RowSizeEstimator(object): - """ - Utility for estimating row_size - """ - def __init__(self, trace_label): - self.row_size = 0 - self.hwm = 0 # element count at high water mark - self.hwm_tag = None # tag that drove hwm (with ref count) - self.trace_label = trace_label - self.elements = {} - self.tag_count = {} +LOG_SUBCHUNK_HISTORY = False # only useful for debugging +WRITE_SUBCHUNK_HISTORY = False # only useful for debugging - def add_elements(self, elements, tag): - self.elements[tag] = elements - self.tag_count[tag] = self.tag_count.setdefault(tag, 0) + 1 # number of times tag has been seen - self.row_size += elements - logger.debug(f"{self.trace_label} #chunk_calc {tag} {elements} ({self.row_size})") - input("add_elements>") if INTERACTIVE_TRACE_CHUNKING else None +DEFAULT_INITIAL_ROWS_PER_CHUNK = 100 # fallback for default_initial_rows_per_chunk setting - if self.row_size > self.hwm: - self.hwm = self.row_size - # tag that drove hwm (with ref count) - self.hwm_tag = f'{tag}_{self.tag_count[tag]}' if self.tag_count[tag] > 1 else tag - def drop_elements(self, tag): - self.row_size -= self.elements[tag] - self.elements[tag] = 0 - logger.debug(f"{self.trace_label} #chunk_calc {tag} ({self.row_size})") +# +# cache and history files +# - def get_hwm(self): - logger.debug(f"{self.trace_label} #chunk_calc hwm {self.hwm} after {self.hwm_tag}") - input("get_hwm>") if INTERACTIVE_TRACE_CHUNKING else None - return self.hwm +CACHE_FILE_NAME = 'chunk_cache.csv' +LOG_FILE_NAME = 'chunk_history.csv' +OMNIBUS_LOG_FILE_NAME = f"omnibus_{LOG_FILE_NAME}" +C_CHUNK_TAG = 'tag' +C_DEPTH = 'depth' +C_NUM_ROWS = 'num_rows' +C_TIME = 'time' -def get_high_water_mark(tag='elements'): +# columns to write to LOG_FILE +CUM_OVERHEAD_COLUMNS = [f'cum_overhead_{m}' for m in METRICS] +CHUNK_HISTORY_COLUMNS = [C_TIME, C_CHUNK_TAG] + CUM_OVERHEAD_COLUMNS + \ + [C_NUM_ROWS, 'row_size', 'chunk_size', C_DEPTH, 'process', 'chunk'] - # should always have at least the base chunker - assert len(HWM) > 0 +CHUNK_CACHE_COLUMNS = [C_CHUNK_TAG, C_NUM_ROWS] + METRICS - hwm = HWM[-1] +# +# globals +# - # hwm might be empty if there were no calls to log_df - mark = hwm.get(tag).get('mark') if hwm else 0 +SETTINGS = {} +CHUNK_LEDGERS = [] +CHUNK_SIZERS = [] - return mark +ledger_lock = threading.Lock() -@contextmanager -def chunk_log(trace_label, chunk_size=0): - log_open(trace_label, chunk_size) - try: - yield - finally: - log_close(trace_label) +def chunk_method(): + method = SETTINGS.get('chunk_method') + if method is None: + method = SETTINGS.setdefault('chunk_method', config.setting('chunk_method', DEFAULT_CHUNK_METHOD)) + assert method in CHUNK_METHODS, \ + f"chunk_method setting '{method}' not recognized. Should be one of: {CHUNK_METHODS}" + return method -def log_open(trace_label, chunk_size=0): +def chunk_metric(): + return SETTINGS.setdefault('chunk_metric', USS if chunk_method() in USS_CHUNK_METHODS else 'rss') - # nested chunkers should be unchunked - if len(CHUNK_LOG) > 0: - assert chunk_size == 0 - assert trace_label not in CHUNK_LOG - CHUNK_LOG[trace_label] = OrderedDict() - CHUNK_SIZE.append(chunk_size) +def chunk_training_mode(): + training_mode = \ + SETTINGS.setdefault('chunk_training_mode', config.setting('chunk_training_mode', MODE_ADAPTIVE)) + assert training_mode in TRAINING_MODES, f"chunk_training_mode '{training_mode} not one of: {TRAINING_MODES}" + return training_mode - HWM.append({}) +def chunk_logging(): + return len(CHUNK_LEDGERS) > 0 -def log_close(trace_label): - # they should be closing the last log opened (LIFO) - assert CHUNK_LOG and next(reversed(CHUNK_LOG)) == trace_label +def default_initial_rows_per_chunk(): + return SETTINGS.setdefault('default_initial_rows_per_chunk', + config.setting('default_initial_rows_per_chunk', DEFAULT_INITIAL_ROWS_PER_CHUNK)) - # if we are closing base level chunker - if len(CHUNK_LOG) == 1: - log_write_hwm() - label, _ = CHUNK_LOG.popitem(last=True) - assert label == trace_label - CHUNK_SIZE.pop() - HWM.pop() +def min_available_chunk_ratio(): + return SETTINGS.setdefault('min_available_chunk_ratio', + config.setting('min_available_chunk_ratio', 0)) -def log_df(trace_label, table_name, df): +def keep_chunk_logs(): + # if we are overwriting MEM_LOG_FILE then presumably we want to delete any subprocess files + default = (LOG_FILE_NAME == OMNIBUS_LOG_FILE_NAME) + + return SETTINGS.setdefault('keep_chunk_logs', config.setting('keep_chunk_logs', default)) + + +def trace_label_for_chunk(trace_label, chunk_size, i): + # add chunk_num to trace_label + # if chunk_size > 0: + # trace_label = tracing.extend_trace_label(trace_label, f'chunk_{i}') + return trace_label + + +def get_base_chunk_size(): + assert len(CHUNK_SIZERS) > 0 + return CHUNK_SIZERS[0].chunk_size + + +def overhead_for_chunk_method(overhead, method=None): """ + + return appropriate overhead for row_size calculation based on current chunk_method + + * by ChunkSizer.adaptive_rows_per_chunk to determine observed_row_size based on cum_overhead and cum_rows + * by ChunkSizer.initial_rows_per_chunk to determine initial row_size using cached_history and current chunk_method + * by consolidate_logs to add informational row_size column to cache file based on chunk_method for training run + Parameters ---------- - trace_label : - serves as a label for this nesting level of logging - table_name : str - name to use logging df, and which will be used in any subsequent calls reporting activity on the table - df: numpy.ndarray, pandas.Series, pandas.DataFrame, or None - table to log (or None if df was deleted) + overhead: dict keyed by metric or DataFrame with columns + + Returns + ------- + chunk_method overhead (possibly hybrid, depending on chunk_method) """ - def size_it(df): - if isinstance(df, pd.Series): - elements = util.iprod(df.shape) - bytes = 0 if not elements else df.memory_usage(index=True) - elif isinstance(df, pd.DataFrame): - elements = util.iprod(df.shape) - bytes = 0 if not elements else df.memory_usage(index=True).sum() - elif isinstance(df, np.ndarray): - elements = util.iprod(df.shape) - bytes = df.nbytes - else: - logger.error(f"size_it unknown type: {type(df)}") - assert False - return elements, bytes - - if df is None: - # FIXME force_garbage_collect on delete? - mem.force_garbage_collect() - - try: - cur_chunker = next(reversed(CHUNK_LOG)) - except StopIteration: - logger.warning(f"log_df called without current chunker. Did you forget to call log_open?") - return + def hybrid(xss, bytes): + + # this avoids pessimistic underchunking on second chunk without pre-existing cache + # but it tends to overshoot on a trained runs + # hybrid_overhead = np.maximum(bytes, (xss + bytes) / 2) + + # this approach avoids problems with pure uss, especially with small chunk sizes (e.g. initial training chunks) + # as numpy may recycle cached blocks and show no increase in uss even though data was allocated and logged + hybrid_overhead = np.maximum(bytes, xss) - if df is None: - # remove table from log - CHUNK_LOG.get(cur_chunker).pop(table_name) - op = 'del' - logger.debug(f"log_df {table_name} " - f"elements: {0} : {trace_label}") + return hybrid_overhead + + method = method or chunk_method() + + if method == HYBRID_RSS: + oh = hybrid(overhead[RSS], overhead[BYTES]) + elif method == HYBRID_USS: + oh = hybrid(overhead[USS], overhead[BYTES]) else: + # otherwise method name is same as metric name + oh = overhead[method] + + return oh + + +def consolidate_logs(): + + glob_file_name = config.log_file_path(f"*{LOG_FILE_NAME}", prefix=False) + glob_files = glob.glob(glob_file_name) + + if not glob_files: + return + + assert chunk_training_mode() != MODE_PRODUCTION, \ + f"shouldn't be any chunk log files when chunk_training_mode is {MODE_PRODUCTION}" + + # + # OMNIBUS_LOG_FILE + # + + logger.debug(f"chunk.consolidate_logs reading glob {glob_file_name}") + omnibus_df = pd.concat((pd.read_csv(f, comment='#') for f in glob_files)) + + omnibus_df = omnibus_df.sort_values(by=C_TIME) + + # shouldn't have different depths for the same chunk_tag + multi_depth_chunk_tag = omnibus_df[[C_CHUNK_TAG, C_DEPTH]] + multi_depth_chunk_tag = multi_depth_chunk_tag[~multi_depth_chunk_tag.duplicated()][[C_CHUNK_TAG]] + multi_depth_chunk_tag = multi_depth_chunk_tag[multi_depth_chunk_tag[C_CHUNK_TAG].duplicated()] + assert len(multi_depth_chunk_tag) == 0,\ + f"consolidate_logs multi_depth_chunk_tags \n{multi_depth_chunk_tag.values}" + + if not keep_chunk_logs(): + util.delete_files(glob_files, 'chunk.consolidate_logs') + + log_output_path = config.log_file_path(OMNIBUS_LOG_FILE_NAME, prefix=False) + logger.debug(f"chunk.consolidate_logs writing omnibus log to {log_output_path}") + omnibus_df.to_csv(log_output_path, mode='w', index=False) + + # + # CACHE_FILE + # + + # write cached chunk_history file for use on subsequent runs, optimized for use by ChunkHistorian + # Essentially a pandas DataFrame keyed by chunk_tag with columns num_rows, rss, uss, bytes + + omnibus_df = omnibus_df[omnibus_df[C_DEPTH] == 1] + zero_rows = omnibus_df[C_NUM_ROWS] <= 0 + if zero_rows.any(): + # this should only happen when chunk_log() instantiates the base ChunkSizer. + # Since chunk_log is not chunked (chunk_size is always 0) there is no need for its history record in the cache + logger.debug(f"consolidate_logs dropping {zero_rows.sum()} rows where {C_NUM_ROWS} == 0") + omnibus_df = omnibus_df[omnibus_df[C_NUM_ROWS] > 0] + + omnibus_df = omnibus_df[[C_CHUNK_TAG, C_NUM_ROWS] + CUM_OVERHEAD_COLUMNS] + + # aggregate by chunk_tag + omnibus_df = omnibus_df.groupby(C_CHUNK_TAG).sum().reset_index(drop=False) + + # rename cum_overhead_xxx to xxx + omnibus_df = omnibus_df.rename(columns={f"cum_overhead_{m}": m for m in METRICS}) + + # compute row_size + num_rows = omnibus_df[C_NUM_ROWS] + for m in USS_CHUNK_METHODS: + omnibus_df[f'{m}_row_size'] = np.ceil(overhead_for_chunk_method(omnibus_df, m) / num_rows).astype(int) + + omnibus_df = omnibus_df.sort_values(by=C_CHUNK_TAG) + + log_dir_output_path = config.log_file_path(CACHE_FILE_NAME, prefix=False) + logger.debug(f"chunk.consolidate_logs writing omnibus chunk cache to {log_dir_output_path}") + omnibus_df.to_csv(log_dir_output_path, mode='w', index=False) + + if (chunk_training_mode() == MODE_RETRAIN) or not _HISTORIAN.have_cached_history: + + if config.setting('resume_after'): + # FIXME + logger.warning(f"Not updating chunk_log cache directory because resume_after") + else: + cache_dir_output_path = os.path.join(config.get_cache_dir(), CACHE_FILE_NAME) + logger.debug(f"chunk.consolidate_logs writing chunk cache to {cache_dir_output_path}") + omnibus_df.to_csv(cache_dir_output_path, mode='w', index=False) + + +class ChunkHistorian(object): + """ + Utility for estimating row_size + """ + def __init__(self): + + self.chunk_log_path = None + self.have_cached_history = None + self.cached_history_df = None - op = 'add' + def load_cached_history(self): - if isinstance(df, (pd.Series, pd.DataFrame, np.ndarray)): + if chunk_training_mode() == MODE_RETRAIN: + # don't need cached history if retraining + return + + if self.have_cached_history is not None: + # already loaded, nothing to do + return + + chunk_cache_path = os.path.join(config.get_cache_dir(), CACHE_FILE_NAME) + + logger.debug(f"ChunkHistorian load_cached_history chunk_cache_path {chunk_cache_path}") + + if os.path.exists(chunk_cache_path): + logger.debug(f"ChunkHistorian load_cached_history reading cached chunk history from {CACHE_FILE_NAME}") + df = pd.read_csv(chunk_cache_path, comment='#') + + self.cached_history_df = df + + for c in CHUNK_CACHE_COLUMNS: + assert c in df, f"Expected column '{c}' not in chunk_cache: {chunk_cache_path}" + + self.have_cached_history = True + else: + self.have_cached_history = False + + if chunk_training_mode() == MODE_PRODUCTION: + # raise RuntimeError(f"chunk_training_mode is {MODE_PRODUCTION} but no chunk_cache: {chunk_cache_path}") + + SETTINGS['chunk_training_mode'] = MODE_RETRAIN + logger.warning(f"chunk_training_mode is {MODE_PRODUCTION} but no chunk_cache: {chunk_cache_path}") + logger.warning(f"chunk_training_mode falling back to {chunk_training_mode()}") + + def cached_history_for_chunk_tag(self, chunk_tag): + + history = {} + self.load_cached_history() + + if self.have_cached_history: + + try: + df = self.cached_history_df[self.cached_history_df[C_CHUNK_TAG] == chunk_tag] + if len(df) > 0: + + if len(df) > 1: + # don't expect this, but not fatal + logger.warning(f"ChunkHistorian aggregating {len(df)} multiple rows for {chunk_tag}") + + # history for this chunk_tag as dict column sums ('num_rows' and cum_overhead for each metric) + # {'num_rows: , 'rss': , 'uss': , 'bytes': } + history = df.sum().to_dict() + + except Exception as e: + logger.warning(f"ChunkHistorian Error loading cached history for {chunk_tag}") + raise e + + return history + + def cached_row_size(self, chunk_tag): + + row_size = 0 + + cached_history = self.cached_history_for_chunk_tag(chunk_tag) + if cached_history: + cum_overhead = {m: cached_history[m] for m in METRICS} + num_rows = cached_history[C_NUM_ROWS] + + # initial_row_size based on cum_overhead and rows_processed from chunk_cache + row_size = math.ceil(overhead_for_chunk_method(cum_overhead) / num_rows) + + return row_size + + def write_history(self, history, chunk_tag): + + assert chunk_training_mode() != MODE_PRODUCTION + + history_df = pd.DataFrame.from_dict(history) + + # just want the last, most up to date row + history_df = history_df.tail(1) + + history_df[C_CHUNK_TAG] = chunk_tag + history_df['process'] = multiprocessing.current_process().name + + history_df = history_df[CHUNK_HISTORY_COLUMNS] + + if self.chunk_log_path is None: + self.chunk_log_path = config.log_file_path(LOG_FILE_NAME) + + tracing.write_df_csv(history_df, self.chunk_log_path, index_label=None, + columns=None, column_labels=None, transpose=False) + + +_HISTORIAN = ChunkHistorian() + + +class ChunkLedger(object): + """ + """ + def __init__(self, trace_label, chunk_size, baseline_rss, baseline_uss, headroom): + self.trace_label = trace_label + self.chunk_size = chunk_size + self.headroom = headroom + self.base_chunk_size = get_base_chunk_size() + + self.tables = {} + self.hwm_bytes = {'value': 0, 'info': f'{trace_label}.init'} + self.hwm_rss = {'value': baseline_rss, 'info': f'{trace_label}.init'} + self.hwm_uss = {'value': baseline_uss, 'info': f'{trace_label}.init'} + self.total_bytes = 0 + + def audit(self, msg, bytes=0, rss=0, uss=0, from_rss_monitor=False): + + assert chunk_training_mode() != MODE_PRODUCTION + + MAX_OVERDRAFT = 0.2 + + if not self.base_chunk_size: + return + + mem_panic_threshold = self.base_chunk_size * (1 + MAX_OVERDRAFT) + bytes_panic_threshold = self.headroom + (self.base_chunk_size * MAX_OVERDRAFT) + + if bytes > bytes_panic_threshold: + logger.warning(f"out_of_chunk_memory: " + f"bytes: {bytes} headroom: {self.headroom} chunk_size: {self.base_chunk_size} {msg}") + + if chunk_metric() == RSS and rss > mem_panic_threshold: + rss, _ = mem.get_rss(force_garbage_collect=True, uss=False) + if rss > mem_panic_threshold: + logger.warning(f"out_of_chunk_memory: " + f"rss: {rss} chunk_size: {self.base_chunk_size} {msg}") + + if chunk_metric() == USS and uss > mem_panic_threshold: + _, uss = mem.get_rss(force_garbage_collect=True, uss=True) + if uss > mem_panic_threshold: + logger.warning(f"out_of_chunk_memory: " + f"uss: {uss} chunk_size: {self.base_chunk_size} {msg}") + + def close(self): + logger.debug(f"ChunkLedger.close trace_label: {self.trace_label}") + logger.debug(f"ChunkLedger.close hwm_bytes: {self.hwm_bytes.get('value', 0)} {self.hwm_bytes['info']}") + logger.debug(f"ChunkLedger.close hwm_rss {self.hwm_rss['value']} {self.hwm_rss['info']}") + logger.debug(f"ChunkLedger.close hwm_uss {self.hwm_uss['value']} {self.hwm_uss['info']}") + + def log_df(self, table_name, df): + + def size_it(df): + if isinstance(df, pd.Series): + elements = util.iprod(df.shape) + bytes = 0 if not elements else df.memory_usage(index=True) + elif isinstance(df, pd.DataFrame): + elements = util.iprod(df.shape) + bytes = 0 if not elements else df.memory_usage(index=True).sum() + elif isinstance(df, np.ndarray): + elements = util.iprod(df.shape) + bytes = df.nbytes + elif isinstance(df, list): + # dict of series, dataframe, or ndarray (e.g. assign assign_variables target and temp dicts) + elements = 0 + bytes = 0 + for v in df: + e, b = size_it(v) + elements += e + bytes += b + elif isinstance(df, dict): + # dict of series, dataframe, or ndarray (e.g. assign assign_variables target and temp dicts) + elements = 0 + bytes = 0 + for k, v in df.items(): + e, b = size_it(v) + elements += e + bytes += b + else: + logger.error(f"size_it unknown type: {type(df)}") + assert False + return elements, bytes + + assert chunk_training_mode() != MODE_PRODUCTION + + if df is None: + elements, bytes = (0, 0) + delta_bytes = bytes - self.tables.get(table_name, 0) + self.tables[table_name] = bytes + else: elements, bytes = size_it(df) - shape = df.shape + delta_bytes = bytes - self.tables.get(table_name, 0) + self.tables[table_name] = bytes + + # shape is informational and only used for logging + if df is None: + shape = None + elif isinstance(df, list): + shape = f"list({[x.shape for x in df]})" elif isinstance(df, dict): - # dict of series, dataframe, or ndarray (e.g. assign assign_variables target and temp dicts) - elements = 0 - bytes = 0 - for k, s in df.items(): - e, b = size_it(s) - elements += e - bytes += b - n = len(df.keys()) - # shape is informational and only used for logging so no big deal if all elements are not same length - # though they ordinarily will be for in assign_variables, unless expresssion file is being awfully clever - shape = (n, elements/n if n else 0) + shape = f"dict({[v.shape for v in df.values()]})" else: - logger.error("log_df %s unknown type: %s" % (table_name, type(df))) - assert False + shape = df.shape - CHUNK_LOG.get(cur_chunker)[table_name] = (elements, bytes) + logger.debug(f"log_df delta_bytes: {util.INT(delta_bytes).rjust(12)} {table_name} {shape} {self.trace_label}") - # log this df - logger.debug(f"log_df {table_name} " - f"elements: {commas(elements)} " - f"bytes: {GB(bytes)} " - f"shape: {shape} : {trace_label}") + # update current total_bytes count + self.total_bytes = sum(self.tables.values()) - hwm_trace_label = "%s.%s.%s" % (trace_label, op, table_name) - mem.trace_memory_info(hwm_trace_label) + def check_local_hwm(self, hwm_trace_label, rss, uss, total_bytes): - total_elements, total_bytes = _chunk_totals() # new chunk totals - cur_rss = mem.get_rss() + assert chunk_training_mode() != MODE_PRODUCTION - # - check high_water_marks - info = f"elements: {commas(total_elements)} " \ - f"bytes: {GB(total_bytes)} " \ - f"rss: {GB(cur_rss)} " \ - f"chunk_size: {commas(CHUNK_SIZE[0])}" + from_rss_monitor = total_bytes is None - if INTERACTIVE_TRACE_CHUNKING: - print(f"table_name {table_name} {df.shape if df is not None else 0}") - print(f"table_name {table_name} {info}") - input("log_df>") + info = f"rss: {GB(rss)} " \ + f"uss: {GB(uss)} " \ + f"base_chunk_size: {GB(self.base_chunk_size)} " \ + f"op: {hwm_trace_label}" - check_for_hwm('elements', total_elements, info, hwm_trace_label) - check_for_hwm('bytes', total_bytes, info, hwm_trace_label) - check_for_hwm('rss', cur_rss, info, hwm_trace_label) + if total_bytes: + info = f"bytes: {GB(total_bytes)} " + info + if total_bytes > self.hwm_bytes['value']: + # total_bytes high water mark + self.hwm_bytes['value'] = total_bytes + self.hwm_bytes['info'] = info + self.audit(hwm_trace_label, bytes=total_bytes) -def _chunk_totals(): + if rss > self.hwm_rss['value']: + # rss high water mark + self.hwm_rss['value'] = rss + self.hwm_rss['info'] = info + self.audit(hwm_trace_label, rss=rss, from_rss_monitor=from_rss_monitor) - total_elements = 0 - total_bytes = 0 - for label in CHUNK_LOG: - tables = CHUNK_LOG[label] - for table_name in tables: - elements, bytes = tables[table_name] - total_elements += elements - total_bytes += bytes + if uss > self.hwm_uss['value']: + # uss high water mark + self.hwm_uss['value'] = uss + self.hwm_uss['info'] = info + self.audit(hwm_trace_label, uss=uss, from_rss_monitor=from_rss_monitor) - return total_elements, total_bytes + # silently registers global high water mark + mem.check_global_hwm(RSS, rss, hwm_trace_label) + mem.check_global_hwm(USS, uss, hwm_trace_label) + if total_bytes: + mem.check_global_hwm(BYTES, total_bytes, hwm_trace_label) + def get_hwm_rss(self): + with ledger_lock: + net_rss = self.hwm_rss['value'] + return net_rss -def check_for_hwm(tag, value, info, trace_label): + def get_hwm_uss(self): + with ledger_lock: + net_uss = self.hwm_uss['value'] + return net_uss - for d in HWM: + def get_hwm_bytes(self): + return self.hwm_bytes['value'] - hwm = d.setdefault(tag, {}) - if value > hwm.get('mark', 0): - hwm['mark'] = value - hwm['info'] = info - hwm['trace_label'] = trace_label +def log_rss(trace_label, force=False): + assert len(CHUNK_LEDGERS) > 0, f"log_rss called without current chunker." -def log_write_hwm(): + hwm_trace_label = f"{trace_label}.log_rss" - d = HWM[0] - for tag in d: - hwm = d[tag] - logger.debug("#chunk_hwm high_water_mark %s: %s (%s) in %s" % - (tag, hwm['mark'], hwm['info'], hwm['trace_label']), ) + if chunk_training_mode() == MODE_PRODUCTION: + trace_ticks = 0 if force else mem.MEM_TRACE_TICK_LEN + mem.trace_memory_info(hwm_trace_label, trace_ticks=trace_ticks) + return - # - elements shouldn't exceed chunk_size of base chunker - def check_chunk_size(hwm, chunk_size, label, max_leeway): - elements = hwm['mark'] - if chunk_size and max_leeway and elements > chunk_size * max_leeway: # too high - # FIXME check for #warning in log - there is nothing the user can do about this - logger.debug("#chunk_hwm #warning total_elements (%s) > %s (%s) %s : %s " % - (commas(elements), label, commas(chunk_size), - hwm['info'], hwm['trace_label'])) + rss, uss = mem.trace_memory_info(hwm_trace_label) - # if we are in a chunker - if len(HWM) > 1 and HWM[1]: - assert 'elements' in HWM[1] # expect an 'elements' hwm dict for base chunker - hwm = HWM[1].get('elements') - check_chunk_size(hwm, CHUNK_SIZE[0], 'chunk_size', max_leeway=1) + # check local hwm for all ledgers + with ledger_lock: + for c in CHUNK_LEDGERS: + c.check_local_hwm(hwm_trace_label, rss, uss, total_bytes=None) -def write_history(caller, history, trace_label): +def log_df(trace_label, table_name, df): - observed_size = history.observed_chunk_size.sum() - number_of_rows = history.rows_per_chunk.sum() - observed_row_size = math.ceil(observed_size / number_of_rows) # FIXME + assert len(CHUNK_LEDGERS) > 0, f"log_df called without current chunker." - num_chunks = len(history) + if chunk_training_mode() == MODE_PRODUCTION: + return - logger.info(f"#chunk_history {caller} {trace_label} " - f"number_of_rows: {number_of_rows} " - f"observed_row_size: {observed_row_size} " - f"num_chunks: {num_chunks}") + op = 'del' if df is None else 'add' + hwm_trace_label = f"{trace_label}.{op}.{table_name}" - logger.debug(f"#chunk_history {caller} {trace_label}\n{history}") + rss, uss = mem.trace_memory_info(hwm_trace_label) - initial_row_size = history.row_size.values[0] - if initial_row_size > 0: + cur_chunker = CHUNK_LEDGERS[-1] - # if they provided an initial estimated row size, then report error + # registers this df and recalc total_bytes + cur_chunker.log_df(table_name, df) - error = (initial_row_size - observed_row_size) / observed_row_size - percent_error = round(error * 100, 1) + total_bytes = sum([c.total_bytes for c in CHUNK_LEDGERS]) - logger.info(f"#chunk_history {caller} {trace_label} " - f"initial_row_size: {initial_row_size} " - f"observed_row_size: {observed_row_size} " - f"percent_error: {percent_error}%") + # check local hwm for all ledgers + with ledger_lock: + for c in CHUNK_LEDGERS: + c.check_local_hwm(hwm_trace_label, rss, uss, total_bytes) - if abs(error) > MAX_ROWSIZE_ERROR: - logger.warning(f"#chunk_history MAX_ROWSIZE_ERROR " - f"initial_row_size {initial_row_size} " - f"observed_row_size {observed_row_size} " - f"percent_error: {percent_error}% in {trace_label}") +class MemMonitor(threading.Thread): - if INTERACTIVE_TRACE_CHUNK_WARNING: - # for debugging adaptive chunking internals - print(history) - input(f"{trace_label} type any key to continue") + def __init__(self, trace_label, stop_snooping): + self.trace_label = trace_label + self.stop_snooping = stop_snooping + threading.Thread.__init__(self) + def run(self): + log_rss(self.trace_label) + while not self.stop_snooping.wait(timeout=mem.MEM_SNOOP_TICK_LEN): + log_rss(self.trace_label) -def adaptive_chunked_choosers(choosers, chunk_size, row_size, trace_label): - # generator to iterate over choosers +class ChunkSizer(object): + """ + """ + def __init__(self, chunk_tag, trace_label, num_choosers=0, chunk_size=0): - num_choosers = len(choosers.index) - assert num_choosers > 0 - assert chunk_size >= 0 - assert row_size >= 0 + self.depth = len(CHUNK_SIZERS) + 1 + self.rss, self.uss = mem.get_rss(force_garbage_collect=True, uss=True) - logger.info(f"Running adaptive_chunked_choosers with chunk_size {chunk_size} and {num_choosers} choosers") + if self.depth > 1: + # nested chunkers should be unchunked + assert chunk_size == 0 - # FIXME do we care if it is an int? - row_size = math.ceil(row_size) + # if we are in a nested call, then we must be in the scope of active Ledger + # so any rss accumulated so far should be attributed to the parent active ledger + assert len(CHUNK_SIZERS) == len(CHUNK_LEDGERS) + parent = CHUNK_SIZERS[-1] + assert parent.chunk_ledger is not None - # #CHUNK_RSS - mem.force_garbage_collect() - initial_rss = mem.get_rss() - logger.debug(f"#CHUNK_RSS initial_rss: {initial_rss}") + log_rss(trace_label) # give parent a complementary log_rss reading entering sub context - if chunk_size == 0: - assert row_size == 0 # we ignore this but make sure caller realizes that - rows_per_chunk = num_choosers - estimated_number_of_chunks = 1 - else: - assert len(HWM) == 1, f"len(HWM): {len(HWM)}" - if row_size == 0: - rows_per_chunk = min(num_choosers, INITIAL_ROWS_PER_CHUNK) # FIXME parameterize - estimated_number_of_chunks = None + self.chunk_tag = chunk_tag + self.trace_label = trace_label + self.chunk_size = chunk_size + + self.num_choosers = num_choosers + self.rows_processed = 0 + + min_chunk_ratio = min_available_chunk_ratio() + assert 0 <= min_chunk_ratio <= 1, \ + f"min_chunk_ratio setting {min_chunk_ratio} is not in range [0..1]" + self.min_chunk_size = chunk_size * min_chunk_ratio + + self.initial_row_size = 0 + self.rows_per_chunk = 0 + self.chunk_ledger = None + self.history = {} + + self.cum_rows = 0 + self.cum_overhead = {m: 0 for m in METRICS} + + # if production mode, to reduce volatility, initialize cum_overhead and cum_rows from cache + if chunk_training_mode() in [MODE_ADAPTIVE, MODE_PRODUCTION]: + cached_history = _HISTORIAN.cached_history_for_chunk_tag(self.chunk_tag) + if cached_history: + self.cum_overhead = {m: cached_history[m] for m in METRICS} + self.cum_rows = cached_history[C_NUM_ROWS] + + logger.debug(f"{self.trace_label}.ChunkSizer - cached history " + f"cum_rows: {self.cum_rows} " + f"cum_overhead: {self.cum_overhead} ") + + # add self to CHUNK_SIZERS list before setting base_chunk_size (since we might be base chunker) + CHUNK_SIZERS.append(self) + + self.base_chunk_size = CHUNK_SIZERS[0].chunk_size + + # need base_chunk_size to calc headroom + self.headroom = self.available_headroom(self.uss if chunk_metric() == USS else self.rss) + + def close(self): + + if ((self.depth == 1) or WRITE_SUBCHUNK_HISTORY) and (chunk_training_mode() != MODE_PRODUCTION): + _HISTORIAN.write_history(self.history, self.chunk_tag) + + _chunk_sizer = CHUNK_SIZERS.pop() + assert _chunk_sizer == self + + def available_headroom(self, xss): + + headroom = self.base_chunk_size - xss + + # adjust deficient headroom to min_chunk_size + if headroom < self.min_chunk_size: + + if self.base_chunk_size > 0: + logger.warning(f"Not enough memory for minimum chunk_size without exceeding specified chunk_size. " + f"available_headroom: {util.INT(headroom)} " + f"min_chunk_size: {util.INT(self.min_chunk_size)} " + f"base_chunk_size: {util.INT(self.base_chunk_size)}") + + headroom = self.min_chunk_size + + return headroom + + def initial_rows_per_chunk(self): + + # whatever the TRAINING_MODE, use cache to determine initial_row_size + # (presumably preferable to default_initial_rows_per_chunk) + self.initial_row_size = _HISTORIAN.cached_row_size(self.chunk_tag) + + if self.chunk_size == 0: + rows_per_chunk = self.num_choosers + estimated_number_of_chunks = 1 + self.initial_row_size = 0 else: - max_rows_per_chunk = np.maximum(int(chunk_size / row_size), 1) - logger.debug(f"#chunk_calc chunk: max rows_per_chunk {max_rows_per_chunk} based on row_size {row_size}") - rows_per_chunk = np.clip(int(chunk_size / row_size), 1, num_choosers) - estimated_number_of_chunks = math.ceil(num_choosers / rows_per_chunk) + # we should be a base chunker + assert len(CHUNK_LEDGERS) == 0, f"len(CHUNK_LEDGERS): {len(CHUNK_LEDGERS)}" - logger.debug(f"#chunk_calc chunk: initial rows_per_chunk {rows_per_chunk} based on row_size {row_size}") + if self.initial_row_size > 0: + max_rows_per_chunk = np.maximum(int(self.headroom / self.initial_row_size), 1) + rows_per_chunk = np.clip(max_rows_per_chunk, 1, self.num_choosers) + estimated_number_of_chunks = math.ceil(self.num_choosers / rows_per_chunk) - history = {} - i = offset = 0 - while offset < num_choosers: + logger.debug(f"{self.trace_label}.initial_rows_per_chunk - initial_row_size: {self.initial_row_size}") + else: + # if no initial_row_size from cache, fall back to default_initial_rows_per_chunk + self.initial_row_size = 0 + rows_per_chunk = min(self.num_choosers, default_initial_rows_per_chunk()) + estimated_number_of_chunks = None - assert offset + rows_per_chunk <= num_choosers + assert chunk_training_mode() != MODE_PRODUCTION + + # cum_rows is out of phase with cum_overhead + # since we won't know observed_chunk_size until AFTER yielding the chunk + self.rows_per_chunk = rows_per_chunk + self.rows_processed += rows_per_chunk + self.cum_rows += rows_per_chunk + + logger.debug(f"{self.trace_label}.initial_rows_per_chunk - " + f"rows_per_chunk: {self.rows_per_chunk} " + f"headroom: {self.headroom} " + f"initial_row_size: {self.initial_row_size} ") + + return rows_per_chunk, estimated_number_of_chunks + + def adaptive_rows_per_chunk(self, i): + # rows_processed is out of phase with cum_overhead + # overhead is the actual bytes/rss used top process chooser chunk with prev_rows_per_chunk rows + + prev_rows_per_chunk = self.rows_per_chunk + prev_rows_processed = self.rows_processed + prev_cum_rows = self.cum_rows + prev_headroom = self.headroom + + prev_rss = self.rss + prev_uss = self.uss + self.rss, self.uss = mem.get_rss(force_garbage_collect=True, uss=True) + + self.headroom = self.available_headroom(self.uss if chunk_metric() == USS else self.rss) + + rows_remaining = self.num_choosers - prev_rows_processed - chunk_trace_label = \ - tracing.extend_trace_label(trace_label, f'chunk_{i + 1}') if chunk_size > 0 else trace_label + if chunk_training_mode() == MODE_PRODUCTION: + # since overhead changes we don't necessarily want the same number of rows per chunk every time + # but we do use the row_size from cache which we trust is stable + # which is stored in self.initial_row_size because initial_rows_per_chunk used it for the first chunk + observed_row_size = self.initial_row_size + overhead = self.cum_overhead.copy() + else: + + # calculate overhead for this chunk iteration + overhead = {} + overhead[BYTES] = self.chunk_ledger.get_hwm_bytes() + overhead[RSS] = self.chunk_ledger.get_hwm_rss() - prev_rss + overhead[USS] = self.chunk_ledger.get_hwm_uss() - prev_uss + + for m in METRICS: + self.cum_overhead[m] += overhead[m] + + observed_row_size = \ + prev_cum_rows and math.ceil(overhead_for_chunk_method(self.cum_overhead) / prev_cum_rows) + + # rows_per_chunk is closest number of chooser rows to achieve chunk_size without exceeding it + if observed_row_size > 0: + self.rows_per_chunk = int(self.headroom / observed_row_size) + else: + # they don't appear to have used any memory; increase cautiously in case small sample size was to blame + self.rows_per_chunk = 2 * prev_rows_per_chunk + + self.rows_per_chunk = np.clip(self.rows_per_chunk, 1, rows_remaining) + self.rows_processed += self.rows_per_chunk + estimated_number_of_chunks = i + math.ceil(rows_remaining / self.rows_per_chunk) if rows_remaining else i + + self.history.setdefault(C_TIME, []).append(datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S.%f")) + self.history.setdefault(C_DEPTH, []).append(self.depth) + for m in METRICS: + self.history.setdefault(f'cum_overhead_{m}', []).append(self.cum_overhead[m]) + self.history.setdefault(C_NUM_ROWS, []).append(prev_cum_rows) + self.history.setdefault('chunk', []).append(i) + self.history.setdefault('chunk_size', []).append(self.chunk_size) + self.history.setdefault('row_size', []).append(observed_row_size) + + # diagnostics not reported by ChunkHistorian + + if chunk_metric() == USS: + self.history.setdefault('prev_uss', []).append(prev_uss) + self.history.setdefault('cur_uss', []).append(self.uss) + else: + self.history.setdefault('prev_rss', []).append(prev_rss) + self.history.setdefault('cur_rss', []).append(self.rss) + + self.history.setdefault('prev_headroom', []).append(prev_headroom) + self.history.setdefault('cur_headroom', []).append(self.headroom) + + for m in METRICS: + self.history.setdefault(f'overhead_{m}', []).append(overhead[m]) + + self.history.setdefault('new_rows_processed', []).append(self.rows_processed) + self.history.setdefault('new_rows_per_chunk', []).append(self.rows_per_chunk) + self.history.setdefault('estimated_num_chunks', []).append(estimated_number_of_chunks) + + history_df = pd.DataFrame.from_dict(self.history) + if LOG_SUBCHUNK_HISTORY: + logger.debug(f"ChunkSizer.adaptive_rows_per_chunk {self.chunk_tag}\n{history_df.transpose()}") + + # input() + + if chunk_training_mode() != MODE_PRODUCTION: + self.cum_rows += self.rows_per_chunk + + return self.rows_per_chunk, estimated_number_of_chunks + + @contextmanager + def ledger(self): + + mem_monitor = None + + # nested chunkers should be unchunked + if len(CHUNK_LEDGERS) > 0: + assert self.chunk_size == 0 + + with ledger_lock: + self.chunk_ledger = ChunkLedger(self.trace_label, self.chunk_size, self.rss, self.uss, self.headroom) + CHUNK_LEDGERS.append(self.chunk_ledger) + + # reality check - there should be one ledger per sizer + assert len(CHUNK_LEDGERS) == len(CHUNK_SIZERS) + + try: + # all calls to log_df within this block will be directed to top level chunk_ledger + # and passed on down the stack to the base to support hwm tallies + + # if this is a base chunk_sizer (and ledger) then start a thread to monitor rss usage + if (len(CHUNK_LEDGERS) == 1) and ENABLE_MEMORY_MONITOR: + stop_snooping = threading.Event() + mem_monitor = MemMonitor(self.trace_label, stop_snooping) + mem_monitor.start() + + log_rss(self.trace_label, force=True) # make sure we get at least one reading + yield + log_rss(self.trace_label, force=True) # make sure we get at least one reading + + finally: + + if mem_monitor is not None: + + if not mem_monitor.is_alive(): + logger.error(f"mem_monitor for {self.trace_label} died!") + bug # bug + + stop_snooping.set() + while mem_monitor.is_alive(): + logger.debug(f"{self.trace_label} waiting for mem_monitor thread to terminate") + mem_monitor.join(timeout=MEM_MONITOR_TICK) + + with ledger_lock: + self.chunk_ledger.close() + CHUNK_LEDGERS.pop() + self.chunk_ledger = None + + +@contextmanager +def chunk_log(trace_label, chunk_tag=None, base=False): - # grab the next chunk based on current rows_per_chunk - chooser_chunk = choosers.iloc[offset: offset + rows_per_chunk] + assert base == (len(CHUNK_SIZERS) == 0) - logger.info(f"Running chunk {i+1} of {estimated_number_of_chunks or '?'} " - f"with {len(chooser_chunk)} of {num_choosers} choosers") + trace_label = f"{trace_label}.chunk_log" - with chunk_log(trace_label, chunk_size): + chunk_tag = chunk_tag or trace_label + num_choosers = 0 + chunk_size = 0 - yield i+1, chooser_chunk, chunk_trace_label + chunk_sizer = ChunkSizer(chunk_tag, trace_label, num_choosers, chunk_size) - # get number of elements allocated during this chunk from the high water mark dict - observed_chunk_size = get_high_water_mark() + chunk_sizer.initial_rows_per_chunk() - # #CHUNK_RSS - observed_rss_size = (get_high_water_mark('rss') - initial_rss) - observed_rss_size = math.ceil(observed_rss_size / BYTES_PER_ELEMENT) - logger.debug(f"#CHUNK_RSS chunk {i+1} observed_chunk_size: {observed_chunk_size} " - f"observed_rss_size {observed_rss_size}") - observed_rss_size = max(observed_rss_size, 0) - if CHUNK_RSS: - observed_chunk_size = observed_rss_size + with chunk_sizer.ledger(): + + yield + + chunk_sizer.adaptive_rows_per_chunk(1) + + chunk_sizer.close() + + +def adaptive_chunked_choosers(choosers, chunk_size, trace_label, chunk_tag=None): + + # generator to iterate over choosers + + chunk_tag = chunk_tag or trace_label + + num_choosers = len(choosers.index) + assert num_choosers > 0 + assert chunk_size >= 0 + + logger.info(f"{trace_label} Running adaptive_chunked_choosers with {num_choosers} choosers") + + chunk_sizer = ChunkSizer(chunk_tag, trace_label, num_choosers, chunk_size) + + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.initial_rows_per_chunk() + + i = offset = 0 + while offset < num_choosers: i += 1 - offset += rows_per_chunk - rows_remaining = num_choosers - offset - - if CHUNK_HISTORY or chunk_size > 0: - - history.setdefault('chunk', []).append(i) - history.setdefault('row_size', []).append(row_size) - history.setdefault('rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('observed_chunk_size', []).append(observed_chunk_size) - - # revise predicted row_size based on observed_chunk_size - row_size = math.ceil(observed_chunk_size / rows_per_chunk) - - # closest number of chooser rows to achieve chunk_size without exceeding it - if row_size == 0: - # they don't appear to have used any memory; increase cautiously in case small sample size was to blame - if rows_per_chunk > INITIAL_ROWS_PER_CHUNK * 100: - rows_per_chunk = rows_remaining - else: - rows_per_chunk = 10 * rows_per_chunk - else: - rows_per_chunk = int(chunk_size / row_size) - rows_per_chunk = np.clip(rows_per_chunk, 1, rows_remaining) + assert offset + rows_per_chunk <= num_choosers + + chunk_trace_label = trace_label_for_chunk(trace_label, chunk_size, i) + + with chunk_sizer.ledger(): - estimated_number_of_chunks = i + math.ceil(rows_remaining / rows_per_chunk) if rows_remaining else i + # grab the next chunk based on current rows_per_chunk + chooser_chunk = choosers[offset: offset + rows_per_chunk] - history.setdefault('new_row_size', []).append(row_size) - history.setdefault('new_rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('estimated_number_of_chunks', []).append(estimated_number_of_chunks) + logger.info(f"Running chunk {i} of {estimated_number_of_chunks or '?'} " + f"with {len(chooser_chunk)} of {num_choosers} choosers") - if history: - history = pd.DataFrame.from_dict(history) - write_history('adaptive_chunked_choosers', history, trace_label) + yield i, chooser_chunk, chunk_trace_label + offset += rows_per_chunk -def adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, row_size, trace_label): + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.adaptive_rows_per_chunk(i) + + chunk_sizer.close() + + +def adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, trace_label, chunk_tag=None): """ generator to iterate over choosers and alternatives in chunk_size chunks @@ -468,13 +979,10 @@ def adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, row_s chunk of alternatives for chooser chunk """ - # if not choosers.index.is_monotonic_increasing: - # logger.warning('sorting choosers because not monotonic increasing') - # choosers = choosers.sort_index() + chunk_tag = chunk_tag or trace_label num_choosers = len(choosers.index) num_alternatives = len(alternatives.index) - assert num_choosers > 0 # alternatives index should match choosers (except with duplicate repeating alt rows) @@ -486,35 +994,11 @@ def adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, row_s assert 'pick_count' in alternatives.columns or choosers.index.name == alternatives.index.name assert choosers.index.name == alternatives.index.name - logger.info(f"Running adaptive_chunked_choosers_and_alts with chunk_size {chunk_size} " - f"and {num_choosers} choosers and {num_alternatives} alternatives") - - # FIXME do we care if it is an int? - row_size = math.ceil(row_size) - - # #CHUNK_RSS - mem.force_garbage_collect() - initial_rss = mem.get_rss() - logger.debug(f"#CHUNK_RSS initial_rss: {initial_rss}") - - if chunk_size == 0: - assert row_size == 0 # we ignore this but make sure caller realizes that - rows_per_chunk = num_choosers - estimated_number_of_chunks = 1 - row_size = 0 - else: - assert len(HWM) == 1 - if row_size == 0: - rows_per_chunk = min(num_choosers, INITIAL_ROWS_PER_CHUNK) # FIXME parameterize - estimated_number_of_chunks = None - else: - max_rows_per_chunk = np.maximum(int(chunk_size / row_size), 1) - logger.debug(f"#chunk_calc chunk: max rows_per_chunk {max_rows_per_chunk} based on row_size {row_size}") - - rows_per_chunk = np.clip(int(chunk_size / row_size), 1, num_choosers) - estimated_number_of_chunks = math.ceil(num_choosers / rows_per_chunk) - logger.debug(f"#chunk_calc chunk: initial rows_per_chunk {rows_per_chunk} based on row_size {row_size}") + logger.info(f"{trace_label} Running adaptive_chunked_choosers_and_alts " + f"with {num_choosers} choosers and {num_alternatives} alternatives") + chunk_sizer = ChunkSizer(chunk_tag, trace_label, num_choosers, chunk_size) + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.initial_rows_per_chunk() assert (rows_per_chunk > 0) and (rows_per_chunk <= num_choosers) # alt chunks boundaries are where index changes @@ -523,178 +1007,73 @@ def adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, row_s alt_chunk_ends = np.append([0], alt_chunk_ends) # including the first to simplify indexing alt_chunk_ends = np.append(alt_chunk_ends, [len(alternatives.index)]) # end of final chunk - history = {} i = offset = alt_offset = 0 while offset < num_choosers: - assert offset + rows_per_chunk <= num_choosers - - chunk_trace_label = tracing.extend_trace_label(trace_label, f'chunk_{i + 1}') if chunk_size > 0 else trace_label - - chooser_chunk = choosers[offset: offset + rows_per_chunk] - - alt_end = alt_chunk_ends[offset + rows_per_chunk] - alternative_chunk = alternatives[alt_offset: alt_end] + i += 1 - assert len(chooser_chunk.index) == len(np.unique(alternative_chunk.index.values)) - assert (chooser_chunk.index == np.unique(alternative_chunk.index.values)).all() + assert offset + rows_per_chunk <= num_choosers, \ + f"i {i} offset {offset} rows_per_chunk {rows_per_chunk} num_choosers {num_choosers}" - logger.info(f"Running chunk {i+1} of {estimated_number_of_chunks or '?'} " - f"with {len(chooser_chunk)} of {num_choosers} choosers") + chunk_trace_label = trace_label_for_chunk(trace_label, chunk_size, i) - with chunk_log(trace_label, chunk_size): + with chunk_sizer.ledger(): - yield i+1, chooser_chunk, alternative_chunk, chunk_trace_label + chooser_chunk = choosers[offset: offset + rows_per_chunk] - # get number of elements allocated during this chunk from the high water mark dict - observed_chunk_size = get_high_water_mark() + alt_end = alt_chunk_ends[offset + rows_per_chunk] + alternative_chunk = alternatives[alt_offset: alt_end] - # #CHUNK_RSS - observed_rss_size = (get_high_water_mark('rss') - initial_rss) - observed_rss_size = math.ceil(observed_rss_size / BYTES_PER_ELEMENT) - logger.debug(f"#CHUNK_RSS observed_chunk_size: {observed_chunk_size} observed_rss_size {observed_rss_size}") - observed_rss_size = max(observed_rss_size, 0) - if CHUNK_RSS: - observed_chunk_size = observed_rss_size + assert len(chooser_chunk.index) == len(np.unique(alternative_chunk.index.values)) + assert (chooser_chunk.index == np.unique(alternative_chunk.index.values)).all() - alt_offset = alt_end + logger.info(f"Running chunk {i} of {estimated_number_of_chunks or '?'} " + f"with {len(chooser_chunk)} of {num_choosers} choosers") - i += 1 - offset += rows_per_chunk - rows_remaining = num_choosers - offset - - if CHUNK_HISTORY or chunk_size > 0: - - history.setdefault('chunk', []).append(i) - history.setdefault('row_size', []).append(row_size) - history.setdefault('rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('observed_chunk_size', []).append(observed_chunk_size) - - # revise predicted row_size based on observed_chunk_size - row_size = math.ceil(observed_chunk_size / rows_per_chunk) - - # closest number of chooser rows to achieve chunk_size without exceeding it - if row_size == 0: - # they don't appear to have used any memory; increase cautiously in case small sample size was to blame - if rows_per_chunk > INITIAL_ROWS_PER_CHUNK * 100: - rows_per_chunk = rows_remaining - else: - rows_per_chunk = 10 * rows_per_chunk - else: - rows_per_chunk = int(chunk_size / row_size) - rows_per_chunk = np.clip(rows_per_chunk, 1, rows_remaining) + yield i, chooser_chunk, alternative_chunk, chunk_trace_label - estimated_number_of_chunks = i + math.ceil(rows_remaining / rows_per_chunk) if rows_remaining else i + offset += rows_per_chunk + alt_offset = alt_end - history.setdefault('new_row_size', []).append(row_size) - history.setdefault('new_rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('estimated_number_of_chunks', []).append(estimated_number_of_chunks) + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.adaptive_rows_per_chunk(i) - if history: - history = pd.DataFrame.from_dict(history) - write_history('adaptive_chunked_choosers_and_alts', history, trace_label) + chunk_sizer.close() -def adaptive_chunked_choosers_by_chunk_id(choosers, chunk_size, row_size, trace_label): +def adaptive_chunked_choosers_by_chunk_id(choosers, chunk_size, trace_label, chunk_tag=None): # generator to iterate over choosers in chunk_size chunks # like chunked_choosers but based on chunk_id field rather than dataframe length # (the presumption is that choosers has multiple rows with the same chunk_id that # all have to be included in the same chunk) # FIXME - we pathologically know name of chunk_id col in households table + chunk_tag = chunk_tag or trace_label + num_choosers = choosers['chunk_id'].max() + 1 assert num_choosers > 0 - # FIXME do we care if it is an int? - row_size = math.ceil(row_size) - - # #CHUNK_RSS - mem.force_garbage_collect() - initial_rss = mem.get_rss() - logger.debug(f"#CHUNK_RSS initial_rss: {initial_rss}") - - if chunk_size == 0: - assert row_size == 0 # we ignore this but make sure caller realizes that - rows_per_chunk = num_choosers - estimated_number_of_chunks = 1 - else: - assert len(HWM) == 1 + chunk_sizer = ChunkSizer(chunk_tag, trace_label, num_choosers, chunk_size) - if row_size == 0: - rows_per_chunk = min(num_choosers, INITIAL_ROWS_PER_CHUNK) # FIXME parameterize - estimated_number_of_chunks = None - logger.debug(f"#chunk_calc chunk: initial rows_per_chunk {rows_per_chunk} " - f"based on INITIAL_ROWS_PER_CHUNK {INITIAL_ROWS_PER_CHUNK}") + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.initial_rows_per_chunk() - else: - max_rpc = np.maximum(int(chunk_size / row_size), 1) - logger.debug(f"#chunk_calc chunk: max rows_per_chunk {max_rpc} based on row_size {row_size}") - - rows_per_chunk = np.clip(int(chunk_size / row_size), 1, num_choosers) - estimated_number_of_chunks = math.ceil(num_choosers / rows_per_chunk) - - logger.debug(f"#chunk_calc chunk: initial rows_per_chunk {rows_per_chunk} based on row_size {row_size}") - - history = {} i = offset = 0 while offset < num_choosers: - assert offset + rows_per_chunk <= num_choosers - - chunk_trace_label = \ - tracing.extend_trace_label(trace_label, f'chunk_{i + 1}') if chunk_size > 0 else trace_label - - chooser_chunk = choosers[choosers['chunk_id'].between(offset, offset + rows_per_chunk - 1)] - - logger.info(f"Running chunk {i+1} of {estimated_number_of_chunks or '?'} " - f"with {rows_per_chunk} of {num_choosers} choosers") - - with chunk_log(trace_label, chunk_size): - - yield i+1, chooser_chunk, chunk_trace_label - - # get number of elements allocated during this chunk from the high water mark dict - observed_chunk_size = get_high_water_mark() - - # #CHUNK_RSS - observed_rss_size = (get_high_water_mark('rss') - initial_rss) - observed_rss_size = math.ceil(observed_rss_size / BYTES_PER_ELEMENT) - logger.debug(f"#CHUNK_RSS observed_chunk_size: {observed_chunk_size} observed_rss_size {observed_rss_size}") - observed_rss_size = max(observed_rss_size, 0) - if CHUNK_RSS: - observed_chunk_size = observed_rss_size - i += 1 - offset += rows_per_chunk - rows_remaining = num_choosers - offset + assert offset + rows_per_chunk <= num_choosers - if CHUNK_HISTORY or chunk_size > 0: + chunk_trace_label = trace_label_for_chunk(trace_label, chunk_size, i) - history.setdefault('chunk', []).append(i) - history.setdefault('row_size', []).append(row_size) - history.setdefault('rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('observed_chunk_size', []).append(observed_chunk_size) + with chunk_sizer.ledger(): - # revise predicted row_size based on observed_chunk_size - row_size = math.ceil(observed_chunk_size / rows_per_chunk) + chooser_chunk = choosers[choosers['chunk_id'].between(offset, offset + rows_per_chunk - 1)] - if row_size > 0: - # closest number of chooser rows to achieve chunk_size without exceeding it - rows_per_chunk = int(chunk_size / row_size) - if row_size == 0: - # they don't appear to have used any memory; increase cautiously in case small sample size was to blame - if rows_per_chunk > INITIAL_ROWS_PER_CHUNK * 100: - rows_per_chunk = rows_remaining - else: - rows_per_chunk = 10 * rows_per_chunk + logger.info(f"{trace_label} Running chunk {i} of {estimated_number_of_chunks or '?'} " + f"with {rows_per_chunk} of {num_choosers} choosers") - rows_per_chunk = np.clip(rows_per_chunk, 1, rows_remaining) + yield i, chooser_chunk, chunk_trace_label - estimated_number_of_chunks = i + math.ceil(rows_remaining / rows_per_chunk) if rows_remaining else i + offset += rows_per_chunk - history.setdefault('new_row_size', []).append(row_size) - history.setdefault('new_rows_per_chunk', []).append(rows_per_chunk) - history.setdefault('estimated_number_of_chunks', []).append(estimated_number_of_chunks) + rows_per_chunk, estimated_number_of_chunks = chunk_sizer.adaptive_rows_per_chunk(i) - if history: - history = pd.DataFrame.from_dict(history) - write_history('adaptive_chunked_choosers_by_chunk_id', history, trace_label) + chunk_sizer.close() diff --git a/activitysim/core/config.py b/activitysim/core/config.py index 0bbbf63e5..6d3dc89b4 100644 --- a/activitysim/core/config.py +++ b/activitysim/core/config.py @@ -76,6 +76,35 @@ def settings(settings_file_name): return settings_dict +# def testing(): +# +# assert ("pytest" in sys.modules) == ("PYTEST_CURRENT_TEST" in os.environ) +# return "PYTEST_CURRENT_TEST" in os.environ + + +def get_cache_dir(): + """ + return path of cache directory in output_dir (creating it, if need be) + + cache directory is used to store + skim memmaps created by skim+dict_factories + tvpb tap_tap table cache + + Returns + ------- + str path + """ + cache_dir = setting('cache_dir', default=None) + if cache_dir is None: + cache_dir = setting('cache_dir', os.path.join(inject.get_injectable('output_dir'), 'cache')) + + if not os.path.isdir(cache_dir): + os.mkdir(cache_dir) + assert os.path.isdir(cache_dir) + + return cache_dir + + def setting(key, default=None): return inject.get_injectable('settings').get(key, default) @@ -300,7 +329,7 @@ def trace_file_path(file_name): return file_path -def log_file_path(file_name): +def log_file_path(file_name, prefix=True): output_dir = inject.get_injectable('output_dir') @@ -309,7 +338,7 @@ def log_file_path(file_name): output_dir = os.path.join(output_dir, 'log') # - check for optional process name prefix - prefix = inject.get_injectable('log_file_prefix', None) + prefix = prefix and inject.get_injectable('log_file_prefix', None) if prefix: file_name = "%s-%s" % (prefix, file_name) @@ -318,13 +347,9 @@ def log_file_path(file_name): return file_path -def open_log_file(file_name, mode, header=None): +def open_log_file(file_name, mode, header=None, prefix=False): - output_dir = inject.get_injectable('output_dir') - # - check for optional log subfolder - if os.path.exists(os.path.join(output_dir, 'log')): - output_dir = os.path.join(output_dir, 'log') - file_path = os.path.join(output_dir, file_name) + file_path = log_file_path(file_name, prefix) want_header = header and not os.path.exists(file_path) diff --git a/activitysim/core/inject.py b/activitysim/core/inject.py index cb0f6695b..e56c16e2b 100644 --- a/activitysim/core/inject.py +++ b/activitysim/core/inject.py @@ -2,7 +2,14 @@ # See full license in LICENSE.txt. import logging -from . import orca +try: + # use orca module if installed + import orca + import orca.orca as _ORCA +except ModuleNotFoundError: + # otherwise use local copy + from . import orca + from . import orca as _ORCA _DECORATED_STEPS = {} _DECORATED_TABLES = {} @@ -128,7 +135,7 @@ def get_injectable(name, default=_NO_DEFAULT): def remove_injectable(name): - orca._INJECTABLES.pop(name, None) + _ORCA._INJECTABLES.pop(name, None) def reinject_decorated_tables(): @@ -139,10 +146,10 @@ def reinject_decorated_tables(): logger.info("reinject_decorated_tables") # need to clear any non-decorated tables that were added during the previous run - orca._TABLES.clear() - orca._COLUMNS.clear() - orca._TABLE_CACHE.clear() - orca._COLUMN_CACHE.clear() + _ORCA._TABLES.clear() + _ORCA._COLUMNS.clear() + _ORCA._TABLE_CACHE.clear() + _ORCA._COLUMN_CACHE.clear() for name, func in _DECORATED_TABLES.items(): logger.debug("reinject decorated table %s" % name) @@ -182,4 +189,4 @@ def get_step_arg(arg_name, default=_NO_DEFAULT): def dump_state(): print("_DECORATED_STEPS", list(_DECORATED_STEPS.keys())) - print("orca._STEPS", list(orca._STEPS.keys())) + print("_ORCA._STEPS", list(_ORCA._STEPS.keys())) diff --git a/activitysim/core/input.py b/activitysim/core/input.py index fe4deec8c..3ae3fd806 100644 --- a/activitysim/core/input.py +++ b/activitysim/core/input.py @@ -185,7 +185,7 @@ def read_from_table_info(table_info): logger.debug('%s table columns: %s' % (tablename, df.columns.values)) logger.debug('%s table size: %s' % (tablename, util.df_size(df))) - logger.info('%s index name: %s' % (tablename, df.index.name)) + logger.debug('%s index name: %s' % (tablename, df.index.name)) return df diff --git a/activitysim/core/interaction_sample.py b/activitysim/core/interaction_sample.py index 932aabcad..5548242b5 100644 --- a/activitysim/core/interaction_sample.py +++ b/activitysim/core/interaction_sample.py @@ -8,15 +8,13 @@ import numpy as np import pandas as pd -from activitysim.core.mem import force_garbage_collect - from . import logit from . import tracing from . import chunk from .simulate import set_skim_wrapper_targets -from .interaction_simulate import eval_interaction_utilities +from . import interaction_simulate from . import pipeline logger = logging.getLogger(__name__) @@ -65,26 +63,33 @@ def make_sample_choices( probs = probs[~zero_probs] choosers = choosers[~zero_probs] - cum_probs_arr = probs.values.cumsum(axis=1) + cum_probs_array = probs.values.cumsum(axis=1) + chunk.log_df(trace_label, 'cum_probs_array', cum_probs_array) # alt probs in convenient layout to return prob of chose alternative # (same layout as cum_probs_arr) alt_probs_array = probs.values.flatten() + chunk.log_df(trace_label, 'alt_probs_array', alt_probs_array) # get sample_size rands for each chooser + rands = pipeline.get_rn_generator().random_for_df(probs, n=sample_size) + # transform as we iterate over alternatives # reshape so rands[i] is in broadcastable (2-D) shape for cum_probs_arr # i.e rands[i] is a 2-D array of one alt choice rand for each chooser - rands = pipeline.get_rn_generator().random_for_df(probs, n=sample_size) rands = rands.T.reshape(sample_size, -1, 1) + chunk.log_df(trace_label, 'rands', rands) # the alternative value chosen choices_array = np.empty([sample_size, len(choosers)]).astype(int) + # chunk log these later after we populate them... # the probability of the chosen alternative choice_probs_array = np.empty([sample_size, len(choosers)]) + # chunk log these later after we populate them... alts = np.tile(alternatives.index.values, len(choosers)) + chunk.log_df(trace_label, 'alts', alts) # FIXME - do this all at once rather than iterate? for i in range(sample_size): @@ -95,7 +100,7 @@ def make_sample_choices( r = rands[i] # position of first occurrence of positive value - positions = np.argmax(cum_probs_arr > r, axis=1) + positions = np.argmax(cum_probs_array > r, axis=1) # FIXME - leave positions as numpy array, not pandas series? # positions is series with the chosen alternative represented as a column index in probs @@ -113,6 +118,19 @@ def make_sample_choices( choices_array[i] = np.take(alts, positions + offsets) choice_probs_array[i] = np.take(alt_probs_array, positions + offsets) + del positions + del offsets + + chunk.log_df(trace_label, 'choices_array', choices_array) + chunk.log_df(trace_label, 'choice_probs_array', choice_probs_array) + + del alts + chunk.log_df(trace_label, 'alts', None) + del cum_probs_array + chunk.log_df(trace_label, 'cum_probs_array', None) + del alt_probs_array + chunk.log_df(trace_label, 'alt_probs_array', None) + # explode to one row per chooser.index, alt_zone_id choices_df = pd.DataFrame( {alt_col_name: choices_array.flatten(order='F'), @@ -121,13 +139,28 @@ def make_sample_choices( choosers.index.name: np.repeat(np.asanyarray(choosers.index), sample_size) }) + chunk.log_df(trace_label, 'choices_df', choices_df) + + del choices_array + chunk.log_df(trace_label, 'choices_array', None) + del rands + chunk.log_df(trace_label, 'rands', None) + del choice_probs_array + chunk.log_df(trace_label, 'choice_probs_array', None) + + # handing this off to caller + chunk.log_df(trace_label, 'choices_df', None) + return choices_df def _interaction_sample( choosers, alternatives, - spec, sample_size, alt_col_name, allow_zero_probs, - skims=None, locals_d=None, + spec, sample_size, alt_col_name, + allow_zero_probs=False, + log_alt_losers=False, + skims=None, + locals_d=None, trace_label=None): """ Run a MNL simulation in the situation in which alternatives must @@ -198,17 +231,20 @@ def _interaction_sample( raise RuntimeError('spec must have only one column') # if using skims, copy index into the dataframe, so it will be - # available as the "destination" for the skims dereference below + # available as the "destination" for set_skim_wrapper_targets if skims is not None and alternatives.index.name not in alternatives: alternatives = alternatives.copy() alternatives[alternatives.index.name] = alternatives.index + chooser_index_id = interaction_simulate.ALT_CHOOSER_ID if log_alt_losers else None + # - cross join choosers and alternatives (cartesian product) # for every chooser, there will be a row for each alternative # index values (non-unique) are from alternatives df alternative_count = alternatives.shape[0] interaction_df = \ - logit.interaction_dataset(choosers, alternatives, sample_size=alternative_count) + logit.interaction_dataset(choosers, alternatives, sample_size=alternative_count, + chooser_index_id=chooser_index_id) chunk.log_df(trace_label, 'interaction_df', interaction_df) @@ -234,10 +270,12 @@ def _interaction_sample( # interaction_utilities is a df with one utility column and one row per interaction_df row interaction_utilities, trace_eval_results \ - = eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows) + = interaction_simulate.eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows, + estimator=None, + log_alt_losers=log_alt_losers) chunk.log_df(trace_label, 'interaction_utilities', interaction_utilities) - # ########### HWM ############ + # ########### HWM - high water mark (point of max observed memory usage) del interaction_df chunk.log_df(trace_label, 'interaction_df', None) @@ -349,39 +387,12 @@ def _interaction_sample( return choices_df -def interaction_sample_calc_row_size(choosers, alternatives, trace_label): - - sizer = chunk.RowSizeEstimator(trace_label) - - # all columns from choosers - chooser_row_size = len(choosers.columns) - sample_size = len(alternatives) - - # interaction_df has one column per alternative plus a skim column - alt_row_size = len(alternatives.columns) + 1 - sizer.add_elements((chooser_row_size + alt_row_size) * sample_size, 'interaction_df') - - # interaction_utilities - sizer.add_elements(sample_size, 'interaction_utilities') - sizer.drop_elements('interaction_df') - - # show is over once we delete interaction_df - - sizer.add_elements(chooser_row_size, 'utilities') - sizer.drop_elements('interaction_utilities') - - sizer.add_elements(chooser_row_size, 'probs') - sizer.drop_elements('utilities') - - row_size = sizer.get_hwm() - - return row_size - - def interaction_sample( choosers, alternatives, spec, sample_size, - alt_col_name, allow_zero_probs=False, - skims=None, locals_d=None, chunk_size=0, + alt_col_name, + allow_zero_probs=False, + log_alt_losers=False, + skims=None, locals_d=None, chunk_size=0, chunk_tag=None, trace_label=None): """ @@ -441,6 +452,7 @@ def interaction_sample( """ trace_label = tracing.extend_trace_label(trace_label, 'interaction_sample') + chunk_tag = chunk_tag or trace_label # we return alternatives ordered in (index, alt_col_name) # if choosers index is not ordered, it is probably a mistake, since the alts wont line up @@ -450,22 +462,25 @@ def interaction_sample( # FIXME - legacy logic - not sure this is needed or even correct? sample_size = min(sample_size, len(alternatives.index)) - row_size = chunk_size and interaction_sample_calc_row_size(choosers, alternatives, trace_label) - result_list = [] for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(choosers, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers(choosers, chunk_size, trace_label, chunk_tag): choices = _interaction_sample(chooser_chunk, alternatives, - spec, sample_size, alt_col_name, allow_zero_probs, - skims, locals_d, - chunk_trace_label) + spec=spec, + sample_size=sample_size, + alt_col_name=alt_col_name, + allow_zero_probs=allow_zero_probs, + log_alt_losers=log_alt_losers, + skims=skims, + locals_d=locals_d, + trace_label=chunk_trace_label) if choices.shape[0] > 0: # might not be any if allow_zero_probs result_list.append(choices) - force_garbage_collect() + chunk.log_df(trace_label, f'result_list', result_list) # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: diff --git a/activitysim/core/interaction_sample_simulate.py b/activitysim/core/interaction_sample_simulate.py index 64f20355c..9f7a275ba 100644 --- a/activitysim/core/interaction_sample_simulate.py +++ b/activitysim/core/interaction_sample_simulate.py @@ -10,8 +10,7 @@ from . import chunk from .simulate import set_skim_wrapper_targets -from activitysim.core.mem import force_garbage_collect -from .interaction_simulate import eval_interaction_utilities +from . import interaction_simulate logger = logging.getLogger(__name__) @@ -19,7 +18,7 @@ def _interaction_sample_simulate( choosers, alternatives, spec, choice_column, - allow_zero_probs, zero_prob_choice_val, + allow_zero_probs, zero_prob_choice_val, log_alt_losers, want_logsums, skims, locals_d, trace_label, trace_choice_name, @@ -118,6 +117,11 @@ def _interaction_sample_simulate( interaction_df = alternatives.join(choosers, how='left', rsuffix='_chooser') + if log_alt_losers: + # logit.interaction_dataset adds ALT_CHOOSER_ID column if log_alt_losers is True + # to enable detection of zero_prob-driving utils (e.g. -999 for all alts in a chooser) + interaction_df[interaction_simulate.ALT_CHOOSER_ID] = interaction_df.index.values + chunk.log_df(trace_label, 'interaction_df', interaction_df) if have_trace_targets: @@ -138,7 +142,8 @@ def _interaction_sample_simulate( # utilities has utility value for element in the cross product of choosers and alternatives # interaction_utilities is a df with one utility column and one row per row in alternative interaction_utilities, trace_eval_results \ - = eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows, estimator) + = interaction_simulate.eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows, + estimator=estimator, log_alt_losers=log_alt_losers) chunk.log_df(trace_label, 'interaction_utilities', interaction_utilities) del interaction_df @@ -207,7 +212,7 @@ def _interaction_sample_simulate( chunk.log_df(trace_label, 'probs', probs) if want_logsums: - logsums = logit.utils_to_logsums(utilities_df) + logsums = logit.utils_to_logsums(utilities_df, allow_zero_probs=allow_zero_probs) chunk.log_df(trace_label, 'logsums', logsums) del utilities_df @@ -267,36 +272,20 @@ def _interaction_sample_simulate( choices = choices.to_frame('choice') choices['logsum'] = logsums - return choices - - -def interaction_sample_simulate_calc_row_size(choosers, alt_sample, spec, trace_label): - - # It is hard to estimate the size of the utilities_df since it conflates duplicate picks. - # Currently we ignore it, but maybe we should chunk based on worst case? - - sizer = chunk.RowSizeEstimator(trace_label) - - num_choosers = len(choosers.index) - chooser_row_size = len(choosers.columns) - - # one column per alternative plus skims, interaction_utilities, probs - alt_row_size = alt_sample.shape[1] + 3 - # average sample size - sample_size = alt_sample.shape[0] / float(num_choosers) + chunk.log_df(trace_label, 'choices', choices) - # interaction_df - sizer.add_elements((chooser_row_size + alt_row_size) * sample_size, 'interaction_df') + # handing this off to our caller + chunk.log_df(trace_label, 'choices', None) - row_size = sizer.get_hwm() - return row_size + return choices def interaction_sample_simulate( choosers, alternatives, spec, choice_column, allow_zero_probs=False, zero_prob_choice_val=None, + log_alt_losers=False, want_logsums=False, - skims=None, locals_d=None, chunk_size=0, + skims=None, locals_d=None, chunk_size=0, chunk_tag=None, trace_label=None, trace_choice_name=None, estimator=None): @@ -356,24 +345,23 @@ def interaction_sample_simulate( """ trace_label = tracing.extend_trace_label(trace_label, 'interaction_sample_simulate') - - row_size = chunk_size and interaction_sample_simulate_calc_row_size(choosers, alternatives, spec, trace_label) + chunk_tag = chunk_tag or trace_label result_list = [] for i, chooser_chunk, alternative_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers_and_alts(choosers, alternatives, - chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers_and_alts(choosers, alternatives, chunk_size, trace_label, chunk_tag): choices = _interaction_sample_simulate( chooser_chunk, alternative_chunk, spec, choice_column, - allow_zero_probs, zero_prob_choice_val, want_logsums, + allow_zero_probs, zero_prob_choice_val, log_alt_losers, + want_logsums, skims, locals_d, chunk_trace_label, trace_choice_name, estimator) result_list.append(choices) - force_garbage_collect() + chunk.log_df(trace_label, f'result_list', result_list) # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: diff --git a/activitysim/core/interaction_simulate.py b/activitysim/core/interaction_simulate.py index daaa92401..292c9ccae 100644 --- a/activitysim/core/interaction_simulate.py +++ b/activitysim/core/interaction_simulate.py @@ -11,25 +11,24 @@ from . import logit from . import tracing from . import config -from .simulate import set_skim_wrapper_targets +from . import simulate from . import chunk from . import simulate -from activitysim.core.mem import force_garbage_collect - - logger = logging.getLogger(__name__) DUMP = False +ALT_CHOOSER_ID = '_chooser_id' -def eval_interaction_utilities(spec, df, locals_d, trace_label, trace_rows, estimator=None): + +def eval_interaction_utilities(spec, df, locals_d, trace_label, trace_rows, estimator=None, log_alt_losers=False): """ Compute the utilities for a single-alternative spec evaluated in the context of df We could compute the utilities for interaction datasets just as we do for simple_simulate - specs with multiple alternative columns byt calling eval_variables and then computing the + specs with multiple alternative columns by calling eval_variables and then computing the utilities by matrix-multiplication of eval results with the utility coefficients in the spec alternative columns. @@ -66,138 +65,172 @@ def eval_interaction_utilities(spec, df, locals_d, trace_label, trace_rows, esti trace_label = tracing.extend_trace_label(trace_label, "eval_interaction_utils") logger.info("Running eval_interaction_utilities on %s rows" % df.shape[0]) - assert(len(spec.columns) == 1) + with chunk.chunk_log(trace_label): - # avoid altering caller's passed-in locals_d parameter (they may be looping) - locals_d = locals_d.copy() if locals_d is not None else {} - locals_d.update(locals()) + assert(len(spec.columns) == 1) - def to_series(x): - if np.isscalar(x): - return pd.Series([x] * len(df), index=df.index) - if isinstance(x, np.ndarray): - return pd.Series(x, index=df.index) - return x + # avoid altering caller's passed-in locals_d parameter (they may be looping) + locals_d = locals_d.copy() if locals_d is not None else {} - if trace_rows is not None and trace_rows.any(): - # # convert to numpy array so we can slice ndarrays as well as series - # trace_rows = np.asanyarray(trace_rows) - assert type(trace_rows) == np.ndarray - trace_eval_results = OrderedDict() - else: - trace_eval_results = None - - check_for_variability = config.setting('check_for_variability') - - # need to be able to identify which variables causes an error, which keeps - # this from being expressed more parsimoniously - - utilities = pd.DataFrame({'utility': 0.0}, index=df.index) - no_variability = has_missing_vals = 0 - - if estimator: - # ensure alt_id from interaction_dataset is available in expression_values_df for - # estimator.write_interaction_expression_values and eventual omnibus table assembly - alt_id = estimator.get_alt_id() - assert alt_id in df.columns - expression_values_df = df[[alt_id]] - - # FIXME estimation_requires_chooser_id_in_df_column - # estimation requires that chooser_id is either in index or a column of interaction_dataset - # so it can be reformatted (melted) and indexed by chooser_id and alt_id - # we assume caller has this under control if index is named - if df.index.name is None: - chooser_id = estimator.get_chooser_id() - assert chooser_id in df.columns, \ - "Expected to find choose_id column '%s' in interaction dataset" % (chooser_id, ) - assert df.index.name is None - expression_values_df[chooser_id] = df[chooser_id] - - if isinstance(spec.index, pd.MultiIndex): - exprs = spec.index.get_level_values(simulate.SPEC_EXPRESSION_NAME) - labels = spec.index.get_level_values(simulate.SPEC_LABEL_NAME) - else: - exprs = spec.index - labels = spec.index + # add df for startswith('@') eval expressions + locals_d['df'] = df - for expr, label, coefficient in zip(exprs, labels, spec.iloc[:, 0]): - try: + def to_series(x): + if np.isscalar(x): + return pd.Series([x] * len(df), index=df.index) + if isinstance(x, np.ndarray): + return pd.Series(x, index=df.index) + return x - # - allow temps of form _od_DIST@od_skim['DIST'] - if expr.startswith('_'): + if trace_rows is not None and trace_rows.any(): + # # convert to numpy array so we can slice ndarrays as well as series + # trace_rows = np.asanyarray(trace_rows) + assert type(trace_rows) == np.ndarray + trace_eval_results = OrderedDict() + else: + trace_eval_results = None - target = expr[:expr.index('@')] - rhs = expr[expr.index('@') + 1:] - v = to_series(eval(rhs, globals(), locals_d)) + check_for_variability = config.setting('check_for_variability') - # update locals to allows us to ref previously assigned targets - locals_d[target] = v + # need to be able to identify which variables causes an error, which keeps + # this from being expressed more parsimoniously - if trace_eval_results is not None: - trace_eval_results[expr] = v[trace_rows] + utilities = pd.DataFrame({'utility': 0.0}, index=df.index) + + chunk.log_df(trace_label, 'eval.utilities', utilities) + + no_variability = has_missing_vals = 0 + + if estimator: + # ensure alt_id from interaction_dataset is available in expression_values_df for + # estimator.write_interaction_expression_values and eventual omnibus table assembly + alt_id = estimator.get_alt_id() + assert alt_id in df.columns + expression_values_df = df[[alt_id]] + + # FIXME estimation_requires_chooser_id_in_df_column + # estimation requires that chooser_id is either in index or a column of interaction_dataset + # so it can be reformatted (melted) and indexed by chooser_id and alt_id + # we assume caller has this under control if index is named + # bug - location choice has df index_name zone_id but should be person_id???? + if df.index.name is None: + chooser_id = estimator.get_chooser_id() + assert chooser_id in df.columns, \ + "Expected to find choose_id column '%s' in interaction dataset" % (chooser_id, ) + assert df.index.name is None + expression_values_df[chooser_id] = df[chooser_id] + + if isinstance(spec.index, pd.MultiIndex): + exprs = spec.index.get_level_values(simulate.SPEC_EXPRESSION_NAME) + labels = spec.index.get_level_values(simulate.SPEC_LABEL_NAME) + else: + exprs = spec.index + labels = spec.index + + for expr, label, coefficient in zip(exprs, labels, spec.iloc[:, 0]): + try: + + # - allow temps of form _od_DIST@od_skim['DIST'] + if expr.startswith('_'): + + target = expr[:expr.index('@')] + rhs = expr[expr.index('@') + 1:] + v = to_series(eval(rhs, globals(), locals_d)) + + # update locals to allows us to ref previously assigned targets + locals_d[target] = v + chunk.log_df(trace_label, target, v) # track temps stored in locals + + if trace_eval_results is not None: + trace_eval_results[expr] = v[trace_rows] + + # don't add temps to utility sums + # they have a non-zero dummy coefficient to avoid being removed from spec as NOPs + continue + + if expr.startswith('@'): + v = to_series(eval(expr[1:], globals(), locals_d)) + else: + v = df.eval(expr) + + if check_for_variability and v.std() == 0: + logger.info("%s: no variability (%s) in: %s" % (trace_label, v.iloc[0], expr)) + no_variability += 1 + + # FIXME - how likely is this to happen? Not sure it is really a problem? + if check_for_variability and np.count_nonzero(v.isnull().values) > 0: + logger.info("%s: missing values in: %s" % (trace_label, expr)) + has_missing_vals += 1 - # don't add temps to utility sums - # they have a non-zero dummy coefficient to avoid being removed from spec as NOPs - continue + if estimator: + # in case we modified expression_values_df index + expression_values_df.insert(loc=len(expression_values_df.columns), column=label, + value=v.values if isinstance(v, pd.Series) else v) - if expr.startswith('@'): - v = to_series(eval(expr[1:], globals(), locals_d)) - else: - v = df.eval(expr) + utility = (v * coefficient).astype('float') - if check_for_variability and v.std() == 0: - logger.info("%s: no variability (%s) in: %s" % (trace_label, v.iloc[0], expr)) - no_variability += 1 + if log_alt_losers: - # FIXME - how likely is this to happen? Not sure it is really a problem? - if check_for_variability and np.count_nonzero(v.isnull().values) > 0: - logger.info("%s: missing values in: %s" % (trace_label, expr)) - has_missing_vals += 1 + assert ALT_CHOOSER_ID in df + max_utils_by_chooser = utility.groupby(df[ALT_CHOOSER_ID]).max() - if estimator: - # in case we modified expression_values_df index - v = v.values if isinstance(v, pd.Series) else v - expression_values_df.insert(loc=len(expression_values_df.columns), column=label, - value=v.values if isinstance(v, pd.Series) else v) + if (max_utils_by_chooser < simulate.ALT_LOSER_UTIL).any(): - utilities.utility += (v * coefficient).astype('float') + losers = max_utils_by_chooser[max_utils_by_chooser < simulate.ALT_LOSER_UTIL] + logger.warning(f"{trace_label} - {len(losers)} choosers of {len(max_utils_by_chooser)} " + f"with prohibitive utilities for all alternatives for expression: {expr}") - if trace_eval_results is not None: + # loser_df = df[df[ALT_CHOOSER_ID].isin(losers.index)] + # print(f"\nloser_df\n{loser_df}\n") + # print(f"\nloser_max_utils_by_chooser\n{losers}\n") + # bug - # expressions should have been uniquified when spec was read - # (though we could do it here if need be...) - # expr = assign.uniquify_key(trace_eval_results, expr, template="{} # ({})") - assert expr not in trace_eval_results + del max_utils_by_chooser - trace_eval_results[expr] = v[trace_rows] - k = 'partial utility (coefficient = %s) for %s' % (coefficient, expr) - trace_eval_results[k] = v[trace_rows] * coefficient + utilities.utility += utility - except Exception as err: - logger.exception(f"{trace_label} - {type(err).__name__} ({str(err)}) evaluating: {str(expr)}") - raise err + if trace_eval_results is not None: + + # expressions should have been uniquified when spec was read + # (though we could do it here if need be...) + # expr = assign.uniquify_key(trace_eval_results, expr, template="{} # ({})") + assert expr not in trace_eval_results + + trace_eval_results[expr] = v[trace_rows] + k = 'partial utility (coefficient = %s) for %s' % (coefficient, expr) + trace_eval_results[k] = v[trace_rows] * coefficient + + del v + # chunk.log_df(trace_label, 'v', None) + + except Exception as err: + logger.exception(f"{trace_label} - {type(err).__name__} ({str(err)}) evaluating: {str(expr)}") + raise err - # mem.trace_memory_info("eval_interaction_utilities: %s" % expr) + if estimator: + estimator.log("eval_interaction_utilities write_interaction_expression_values %s" % trace_label) + estimator.write_interaction_expression_values(expression_values_df) + del expression_values_df - if estimator: - estimator.log("eval_interaction_utilities write_interaction_expression_values %s" % trace_label) - estimator.write_interaction_expression_values(expression_values_df) - del expression_values_df + if no_variability > 0: + logger.warning("%s: %s columns have no variability" % (trace_label, no_variability)) - if no_variability > 0: - logger.warning("%s: %s columns have no variability" % (trace_label, no_variability)) + if has_missing_vals > 0: + logger.warning("%s: %s columns have missing values" % (trace_label, has_missing_vals)) - if has_missing_vals > 0: - logger.warning("%s: %s columns have missing values" % (trace_label, has_missing_vals)) + if trace_eval_results is not None: + trace_eval_results['total utility'] = utilities.utility[trace_rows] - if trace_eval_results is not None: - trace_eval_results['total utility'] = utilities.utility[trace_rows] + trace_eval_results = pd.DataFrame.from_dict(trace_eval_results) + trace_eval_results.index = df[trace_rows].index - trace_eval_results = pd.DataFrame.from_dict(trace_eval_results) - trace_eval_results.index = df[trace_rows].index + # add df columns to trace_results + trace_eval_results = pd.concat([df[trace_rows], trace_eval_results], axis=1) + chunk.log_df(trace_label, 'eval.trace_eval_results', trace_eval_results) - # add df columns to trace_results - trace_eval_results = pd.concat([df[trace_rows], trace_eval_results], axis=1) + chunk.log_df(trace_label, 'v', None) + chunk.log_df(trace_label, 'eval.utilities', None) # out of out hands... + chunk.log_df(trace_label, 'eval.trace_eval_results', None) return utilities, trace_eval_results @@ -206,6 +239,7 @@ def _interaction_simulate( choosers, alternatives, spec, skims=None, locals_d=None, sample_size=None, trace_label=None, trace_choice_name=None, + log_alt_losers=False, estimator=None): """ Run a MNL simulation in the situation in which alternatives must @@ -283,11 +317,14 @@ def _interaction_simulate( # for every chooser, there will be a row for each alternative # index values (non-unique) are from alternatives df alt_index_id = estimator.get_alt_id() if estimator else None - interaction_df = logit.interaction_dataset(choosers, alternatives, sample_size, alt_index_id) + chooser_index_id = ALT_CHOOSER_ID if log_alt_losers else None + + interaction_df = logit.interaction_dataset(choosers, alternatives, sample_size, + alt_index_id=alt_index_id, chooser_index_id=chooser_index_id) chunk.log_df(trace_label, 'interaction_df', interaction_df) if skims is not None: - set_skim_wrapper_targets(interaction_df, skims) + simulate.set_skim_wrapper_targets(interaction_df, skims) # evaluate expressions from the spec multiply by coefficients and sum # spec is df with one row per spec expression and one col with utility coefficient @@ -305,7 +342,9 @@ def _interaction_simulate( trace_rows = trace_ids = None interaction_utilities, trace_eval_results \ - = eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows, estimator) + = eval_interaction_utilities(spec, interaction_df, locals_d, trace_label, trace_rows, + estimator=estimator, + log_alt_losers=log_alt_losers) chunk.log_df(trace_label, 'interaction_utilities', interaction_utilities) # print(f"interaction_df {interaction_df.shape}") @@ -376,44 +415,9 @@ def _interaction_simulate( return choices -def interaction_simulate_calc_row_size(choosers, alternatives, sample_size, skims, trace_label): - - sizer = chunk.RowSizeEstimator(trace_label) - - sample_size = sample_size or len(alternatives) - chooser_row_size = len(choosers.columns) - # alternative columns plus join column and (possibly) skim destination - alt_row_size = alternatives.shape[1] + 1 + int(skims is not None) - if skims is not None: - alt_row_size += 1 - - logger.debug(f"{trace_label} #chunk_calc chooser_row_size {chooser_row_size}") - logger.debug(f"{trace_label} #chunk_calc alt_row_size {alt_row_size}") - logger.debug(f"{trace_label} #chunk_calc sample_size {sample_size}") - - # interaction_df - sizer.add_elements((chooser_row_size + alt_row_size) * sample_size, 'interaction_df') - - # interaction_df is almost certainly the HWM - if so, no need to worry about the crumbs... - - # interaction_utilities utilities probs - sizer.add_elements(0, 'interaction_utilities') - sizer.add_elements(0, 'utilities') - sizer.add_elements(0, 'probs') - - sizer.drop_elements('utilities') - - sizer.add_elements(0, 'positions') - sizer.add_elements(0, 'rands') - sizer.add_elements(0, 'choices') - - row_size = sizer.get_hwm() - - return row_size - - def interaction_simulate( choosers, alternatives, spec, + log_alt_losers=False, skims=None, locals_d=None, sample_size=None, chunk_size=0, trace_label=None, trace_choice_name=None, estimator=None): @@ -471,22 +475,22 @@ def interaction_simulate( assert len(choosers) > 0 - row_size = chunk_size and \ - interaction_simulate_calc_row_size(choosers, alternatives, sample_size, skims, trace_label) - result_list = [] for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(choosers, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers(choosers, chunk_size, trace_label): choices = _interaction_simulate(chooser_chunk, alternatives, spec, - skims, locals_d, sample_size, - chunk_trace_label, - trace_choice_name, - estimator) + skims=skims, + locals_d=locals_d, + sample_size=sample_size, + trace_label=chunk_trace_label, + trace_choice_name=trace_choice_name, + log_alt_losers=log_alt_losers, + estimator=estimator) result_list.append(choices) - force_garbage_collect() + chunk.log_df(trace_label, f'result_list', result_list) # FIXME: this will require 2X RAM # if necessary, could append to hdf5 store on disk: diff --git a/activitysim/core/logit.py b/activitysim/core/logit.py index a94cdead5..b3dace2e0 100644 --- a/activitysim/core/logit.py +++ b/activitysim/core/logit.py @@ -9,6 +9,7 @@ from . import tracing from . import pipeline +from . import config logger = logging.getLogger(__name__) @@ -69,7 +70,7 @@ def report_bad_choices(bad_row_map, df, trace_label, msg, trace_choosers=None, r raise RuntimeError(msg_with_count) -def utils_to_logsums(utils, exponentiated=False): +def utils_to_logsums(utils, exponentiated=False, allow_zero_probs=False): """ Convert a table of utilities to logsum series. @@ -98,7 +99,9 @@ def utils_to_logsums(utils, exponentiated=False): utils_arr = np.where(utils_arr == EXP_UTIL_MIN, 0.0, utils_arr) - logsums = np.log(utils_arr.sum(axis=1)) + with np.errstate(divide='ignore' if allow_zero_probs else 'warn'): + logsums = np.log(utils_arr.sum(axis=1)) + logsums = pd.Series(logsums, index=utils.index) return logsums @@ -238,7 +241,7 @@ def make_choices(probs, trace_label=None, trace_choosers=None, allow_bad_probs=F return choices, rands -def interaction_dataset(choosers, alternatives, sample_size=None, alt_index_id=None): +def interaction_dataset(choosers, alternatives, sample_size=None, alt_index_id=None, chooser_index_id=None): """ Combine choosers and alternatives into one table for the purposes of creating interaction variables and/or sampling alternatives. @@ -298,6 +301,11 @@ def interaction_dataset(choosers, alternatives, sample_size=None, alt_index_id=N c_chooser = (c + '_chooser') if c in alts_sample.columns else c alts_sample[c_chooser] = np.repeat(choosers[c].values, sample_size) + # caller may want this to detect utils that make all alts for a chooser unavailable (e.g. -999) + if chooser_index_id: + assert chooser_index_id not in alts_sample + alts_sample[chooser_index_id] = np.repeat(choosers.index.values, sample_size) + logger.debug("interaction_dataset merged alts_sample %s" % (alts_sample.shape, )) return alts_sample @@ -360,7 +368,7 @@ def _each_nest(spec, parent_nest, post_order): """ Iterate over each nest or leaf node in the tree (of subtree) - This internal routine is called by each_nest, which presents a slightly higer level interface + This internal routine is called by each_nest, which presents a slightly higher level interface Parameters ---------- diff --git a/activitysim/core/los.py b/activitysim/core/los.py index ce36a893f..18eecc31b 100644 --- a/activitysim/core/los.py +++ b/activitysim/core/los.py @@ -322,8 +322,6 @@ def load_data(self): assert mode not in self.maz_to_tap_dfs self.maz_to_tap_dfs[mode] = df - mem.trace_memory_info('#MEM network_los.load_data before create_skim_dicts') - # create taz skim dict assert 'taz' not in self.skim_dicts self.skim_dicts['taz'] = self.create_skim_dict('taz') @@ -349,8 +347,6 @@ def load_data(self): # make sure skim has all tap_ids assert not (tap_skim_dict.offset_mapper.map(self.tap_df['TAP'].values) == NOT_IN_SKIM_ZONE_ID).any() - mem.trace_memory_info("network_los.load_data after create_skim_dicts") - def create_skim_dict(self, skim_tag): """ Create a new SkimDict of type specified by skim_tag (e.g. 'taz', 'maz' or 'tap') @@ -382,28 +378,6 @@ def create_skim_dict(self, skim_tag): return skim_dict - def get_cache_dir(self): - """ - return path of cache directory in output_dir (creating it, if need be) - - cache directory is used to store - skim memmaps created by skim+dict_factories - tvpb tap_tap table cache - - Returns - ------- - str path - """ - cache_dir = self.setting('cache_dir', default=None) - if cache_dir is None: - cache_dir = self.setting('cache_dir', os.path.join(inject.get_injectable('output_dir'), 'cache')) - - if not os.path.isdir(cache_dir): - os.mkdir(cache_dir) - assert os.path.isdir(cache_dir) - - return cache_dir - def omx_file_names(self, skim_tag): """ Return list of omx file names from network_los settings file for the specified skim_tag (e.g. 'taz') diff --git a/activitysim/core/mem.py b/activitysim/core/mem.py index 61150f4a4..1066c3432 100644 --- a/activitysim/core/mem.py +++ b/activitysim/core/mem.py @@ -1,131 +1,283 @@ # ActivitySim # See full license in LICENSE.txt. -import time + import datetime -import psutil -import logging + import gc +import glob +import logging +import multiprocessing +import os +import platform +import psutil +import threading +import time +import numpy as np +import pandas as pd from activitysim.core import config from activitysim.core import inject +from activitysim.core import util logger = logging.getLogger(__name__) -MEM = {} -HWM = {} -DEFAULT_TICK_LEN = 30 +USS = True +GLOBAL_HWM = {} # to avoid confusion with chunk local hwm -def force_garbage_collect(): - was_disabled = not gc.isenabled() - if was_disabled: - gc.enable() - gc.collect() - if was_disabled: - gc.disable() +MEM_TRACE_TICK_LEN = 5 +MEM_PARENT_TRACE_TICK_LEN = 15 +MEM_SNOOP_TICK_LEN = 5 +MEM_TICK = 0 +MEM_LOG_FILE_NAME = "mem.csv" +OMNIBUS_LOG_FILE_NAME = f"omnibus_mem.csv" -def GB(bytes): - gb = (bytes / (1024 * 1024 * 1024.0)) - return round(gb, 2) +SUMMARY_BIN_SIZE_IN_SECONDS = 15 +mem_log_lock = threading.Lock() -def init_trace(tick_len=None, file_name="mem.csv", write_header=False): - MEM['tick'] = 0 - if file_name is not None: - MEM['file_name'] = file_name - if tick_len is None: - MEM['tick_len'] = DEFAULT_TICK_LEN - else: - MEM['tick_len'] = tick_len - logger.info("init_trace file_name %s" % file_name) +def time_bin(timestamps): + bins_size_in_seconds = SUMMARY_BIN_SIZE_IN_SECONDS + epoch = pd.Timestamp("1970-01-01") + seconds_since_epoch = (timestamps - epoch) // pd.Timedelta("1s") + bin = seconds_since_epoch - (seconds_since_epoch % bins_size_in_seconds) + + return pd.to_datetime(bin, unit='s', origin='unix') + + +def consolidate_logs(): + """ + Consolidate and aggregate subprocess mem logs + """ + + if not config.setting('multiprocess', False): + return + + delete_originals = not config.setting('keep_mem_logs', False) + omnibus_df = [] + + # for each multiprocess step + multiprocess_steps = config.setting('multiprocess_steps', []) + for step in multiprocess_steps: + step_name = step.get('name', None) + + logger.debug(f"mem.consolidate_logs for step {step_name}") + + glob_file_name = config.log_file_path(f"{step_name}*{MEM_LOG_FILE_NAME}", prefix=False) + glob_files = glob.glob(glob_file_name) + + if not glob_files: + continue + + logger.debug(f"mem.consolidate_logs consolidating {len(glob_files)} logs for {step_name}") + + # for each individual log + step_summary_df = [] + for f in glob_files: + df = pd.read_csv(f, comment='#') + + df = df[['rss', 'uss', 'event', 'time']] + + df.rss = df.rss.astype(np.int64) + df.uss = df.uss.astype(np.int64) + + df['time'] = time_bin(pd.to_datetime(df.time, errors='coerce', format='%Y/%m/%d %H:%M:%S')) + + # consolidate events (duplicate rows should be idle steps (e.g. log_rss) + df = df.groupby('time')\ + .agg(rss=('rss', 'max'), uss=('uss', 'max'),)\ + .reset_index(drop=False) + + step_summary_df.append(df) # add step_df to step summary + + # aggregate the individual the logs into a single step log + step_summary_df = pd.concat(step_summary_df) + step_summary_df = step_summary_df.groupby('time') \ + .agg(rss=('rss', 'sum'), uss=('uss', 'sum'), num_files=('rss', 'size')) \ + .reset_index(drop=False) + step_summary_df = step_summary_df.sort_values('time') + + step_summary_df['step'] = step_name + + # scale missing values (might be missing idle steps for some chunk_tags) + scale = 1 + (len(glob_files) - step_summary_df.num_files) / step_summary_df.num_files + for c in ['rss', 'uss']: + step_summary_df[c] = (step_summary_df[c] * scale).astype(np.int64) - # - check for optional process name prefix - MEM['prefix'] = inject.get_injectable('log_file_prefix', 'main') + step_summary_df['scale'] = scale + del step_summary_df['num_files'] # do we want to keep track of scale factor? - if write_header: - with config.open_log_file(file_name, 'w') as log_file: - print("process,time,rss,used,available,percent,event", file=log_file) + if delete_originals: + util.delete_files(glob_files, f'mem.consolidate_logs.{step_name}') + # write aggregate step log + output_path = config.log_file_path(f'mem_{step_name}.csv', prefix=False) + logger.debug(f"chunk.consolidate_logs writing step summary log for step {step_name} to {output_path}") + step_summary_df.to_csv(output_path, mode='w', index=False) -def trace_hwm(tag, value, timestamp, label): + omnibus_df.append(step_summary_df) # add step summary to omnibus - hwm = HWM.setdefault(tag, {}) + # aggregate the step logs into a single omnibus log ordered by timestamp + omnibus_df = pd.concat(omnibus_df) + omnibus_df = omnibus_df.sort_values('time') + + output_path = config.log_file_path(OMNIBUS_LOG_FILE_NAME, prefix=False) + logger.debug(f"chunk.consolidate_logs writing omnibus log to {output_path}") + omnibus_df.to_csv(output_path, mode='w', index=False) + + +def check_global_hwm(tag, value, label): + + assert value is not None + + hwm = GLOBAL_HWM.setdefault(tag, {}) + + is_new_hwm = value > hwm.get('mark', 0) or not hwm + if is_new_hwm: + timestamp = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S") - if value > hwm.get('mark', 0): hwm['mark'] = value hwm['timestamp'] = timestamp hwm['label'] = label + return is_new_hwm -def log_hwm(): - for tag in HWM: - hwm = HWM[tag] - logger.info("high water mark %s: %.2f timestamp: %s label: %s" % - (tag, hwm['mark'], hwm['timestamp'], hwm['label'])) +def log_global_hwm(): - with config.open_log_file(MEM['file_name'], 'a') as log_file: - for tag in HWM: - hwm = HWM[tag] - print("%s high water mark %s: %.2f timestamp: %s label: %s" % - (MEM['prefix'], tag, hwm['mark'], hwm['timestamp'], hwm['label']), file=log_file) + process_name = multiprocessing.current_process().name + for tag in GLOBAL_HWM: + hwm = GLOBAL_HWM[tag] + value = hwm.get('mark', 0) + logger.info(f"{process_name} high water mark {tag}: {util.INT(value)} ({util.GB(value)}) " + f"timestamp: {hwm.get('timestamp', '')} label:{hwm.get('label', '')}") -def trace_memory_info(event=''): - if not MEM: - return +def trace_memory_info(event, trace_ticks=0): - last_tick = MEM['tick'] - tick_len = MEM['tick_len'] or float('inf') + global MEM_TICK - t = time.time() - if (t - last_tick < tick_len) and not event: + tick = time.time() + if trace_ticks and (tick - MEM_TICK < trace_ticks): return + MEM_TICK = tick - force_garbage_collect() + process_name = multiprocessing.current_process().name + pid = os.getpid() - vmi = psutil.virtual_memory() + current_process = psutil.Process() + + if USS: + info = current_process.memory_full_info() + uss = info.uss + else: + info = current_process.memory_info() + uss = 0 - MEM['tick'] = t + full_rss = rss = info.rss - current_process = psutil.Process() - rss = current_process.memory_info().rss + num_children = 0 for child in current_process.children(recursive=True): try: - rss += child.memory_info().rss + child_info = child.memory_info() + full_rss += child_info.rss + num_children += 1 except (psutil.NoSuchProcess, psutil.AccessDenied) as e: pass - timestamp = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S") + noteworthy = True # any reason not to always log this if we are filtering idle ticks? + + noteworthy = (num_children > 0) or noteworthy + noteworthy = check_global_hwm('rss', full_rss or rss, event) or noteworthy + noteworthy = check_global_hwm('uss', uss, event) or noteworthy + + if noteworthy: + + # logger.debug(f"trace_memory_info {event} " + # f"rss: {GB(full_rss) if num_children else GB(rss)} " + # f"uss: {GB(rss)} ") - trace_hwm('rss', GB(rss), timestamp, event) - trace_hwm('used', GB(vmi.used), timestamp, event) + timestamp = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S.%f") # sortable - if event: - logger.info(f"trace_memory_info {event} rss: {GB(rss)}GB used: {GB(vmi.used)} GB percent: {vmi.percent}%") + with mem_log_lock: + MEM_LOG_HEADER = "process,pid,rss,full_rss,uss,event,children,time" + with config.open_log_file(MEM_LOG_FILE_NAME, 'a', header=MEM_LOG_HEADER, prefix=True) as log_file: + print(f"{process_name}," + f"{pid}," + f"{util.INT(rss)}," # want these as ints so we can plot them... + f"{util.INT(full_rss)}," + f"{util.INT(uss)}," + f"{event}," + f"{num_children}," + f"{timestamp}", + file=log_file) - with config.open_log_file(MEM['file_name'], 'a') as output_file: + # return rss and uss for optional use by interested callers + return full_rss or rss, uss - print("%s, %s, %.2f, %.2f, %.2f, %s%%, %s" % - (MEM['prefix'], - timestamp, - GB(rss), - GB(vmi.used), - GB(vmi.available), - vmi.percent, - event), file=output_file) +def get_rss(force_garbage_collect=False, uss=False): -def get_rss(): + if force_garbage_collect: + was_disabled = not gc.isenabled() + if was_disabled: + gc.enable() + gc.collect() + if was_disabled: + gc.disable() - mi = psutil.Process().memory_info() + if uss: + info = psutil.Process().memory_full_info() + return info.rss, info.uss + else: + info = psutil.Process().memory_info() + return info.rss, 0 + + +def shared_memory_size(data_buffers=None): + """ + return total size of the multiprocessing shared memory block in data_buffers + + Returns + ------- + + """ + + shared_size = 0 + + if data_buffers is None: + data_buffers = inject.get_injectable('data_buffers', {}) + + for k, data_buffer in data_buffers.items(): + try: + obj = data_buffer.get_obj() + except Exception: + obj = data_buffer + data = np.ctypeslib.as_array(obj) + data_size = data.nbytes + + shared_size += data_size + + return shared_size - # cur_mem = mi.vms - cur_mem = mi.rss - return cur_mem +def shared_memory_in_child_rss(): + + # Linux: Linux + # Mac: Darwin + # Windows: Windows + + os_name = platform.system() + if os_name in ['Darwin']: + return False + elif os_name in ['Windows']: + return False + elif os_name in ['Linux']: + return True # ??? + else: + bug diff --git a/activitysim/core/mp_tasks.py b/activitysim/core/mp_tasks.py index e4a2dcdf3..3b5d37396 100644 --- a/activitysim/core/mp_tasks.py +++ b/activitysim/core/mp_tasks.py @@ -13,13 +13,13 @@ import numpy as np import pandas as pd +from activitysim.core import config from activitysim.core import inject -from activitysim.core import tracing +from activitysim.core import mem from activitysim.core import pipeline -from activitysim.core import config +from activitysim.core import tracing +from activitysim.core import util -from activitysim.core import chunk -from activitysim.core import mem from activitysim.core.config import setting @@ -27,6 +27,7 @@ LAST_CHECKPOINT = '_' +MEM_TRACE_TICKS = 5 """ mp_tasks - activitysim multiprocessing overview @@ -481,18 +482,10 @@ def apportion_pipeline(sub_proc_names, step_info): pipeline_file_name = inject.get_injectable('pipeline_file_name') - # get last checkpoint from first job pipeline - pipeline_path = config.build_output_file_path(pipeline_file_name) - # ensure that if we are resuming, we don't apportion any tables from future model steps - last_model_in_previous_multiprocess_step = step_info.get('last_model_in_previous_multiprocess_step', None) - assert last_model_in_previous_multiprocess_step is not None - pipeline.open_pipeline(resume_after=last_model_in_previous_multiprocess_step) - - # adds a checkpoint named multiprocess_step_name with no tables modified - # (most importantly, truncates pipeline to last_model_in_previous_multiprocess_step if resuming) - checkpoint_name = multiprocess_step_name - pipeline.add_checkpoint(checkpoint_name) + last_checkpoint_in_previous_multiprocess_step = step_info.get('last_checkpoint_in_previous_multiprocess_step', None) + assert last_checkpoint_in_previous_multiprocess_step is not None + pipeline.open_pipeline(resume_after=last_checkpoint_in_previous_multiprocess_step) # ensure all tables are in the pipeline checkpointed_tables = pipeline.checkpointed_tables() @@ -506,6 +499,7 @@ def apportion_pipeline(sub_proc_names, step_info): checkpoints_df = checkpoints_df.tail(1).copy() # load all tables from pipeline + checkpoint_name = multiprocess_step_name tables = {} for table_name in checkpointed_tables: # patch last checkpoint name for all tables @@ -738,6 +732,43 @@ def setup_injectables_and_logging(injectables, locutor=True): raise e +def adjust_chunk_size_for_shared_memory(chunk_size, data_buffers, num_processes): + + # even if there is only one subprocess, + # we are separate from parent who allocated the shared memory + # so we still need to compensate for it + + if chunk_size == 0: + return chunk_size + + shared_memory_size = mem.shared_memory_size(data_buffers) + + if shared_memory_size == 0: + return chunk_size + + shared_memory_in_child_rss = mem.shared_memory_in_child_rss() + fair_share_of_shared_memory = int(shared_memory_size / num_processes) + + if shared_memory_in_child_rss: + adjusted_chunk_size = chunk_size + shared_memory_size - fair_share_of_shared_memory + else: + adjusted_chunk_size = chunk_size - fair_share_of_shared_memory + + logger.info(f"adjust_chunk_size_for_shared_memory " + f"adjusted_chunk_size {util.INT(adjusted_chunk_size)} " + f"shared_memory_in_child_rss {shared_memory_in_child_rss} " + f"chunk_size {util.INT(chunk_size)} " + f"shared_memory_size {util.INT(shared_memory_size)} " + f"num_processes {num_processes} " + f"fair_share_of_shared_memory {util.INT(fair_share_of_shared_memory)} ") + + if adjusted_chunk_size <= 0: + raise RuntimeError(f"adjust_chunk_size_for_shared_memory: chunk_size too small for shared memory. " + f"adjusted_chunk_size: {adjusted_chunk_size}") + + return adjusted_chunk_size + + def run_simulation(queue, step_info, resume_after, shared_data_buffer): """ run step models as subtask @@ -757,11 +788,14 @@ def run_simulation(queue, step_info, resume_after, shared_data_buffer): dict of shared data (e.g. skims and shadow_pricing) """ + # step_label = step_info['name'] + models = step_info['models'] chunk_size = step_info['chunk_size'] - # step_label = step_info['name'] num_processes = step_info['num_processes'] + chunk_size = adjust_chunk_size_for_shared_memory(chunk_size, shared_data_buffer, num_processes) + inject.add_injectable('data_buffers', shared_data_buffer) inject.add_injectable("chunk_size", chunk_size) inject.add_injectable("num_processes", num_processes) @@ -801,6 +835,10 @@ def run_simulation(queue, step_info, resume_after, shared_data_buffer): tracing.print_elapsed_time("run (%s models)" % len(models), t0) + # add checkpoint with final tables even if not intermediate checkpointing + checkpoint_name = step_info['name'] + pipeline.add_checkpoint(checkpoint_name) + pipeline.close_pipeline() @@ -829,7 +867,6 @@ def mp_run_simulation(locutor, queue, injectables, step_info, resume_after, **kw debug(f"mp_run_simulation {step_info['name']} locutor={inject.get_injectable('locutor', False)} ") try: - mem.init_trace(setting('mem_tick')) if step_info['num_processes'] > 1: pipeline_prefix = multiprocessing.current_process().name @@ -839,8 +876,7 @@ def mp_run_simulation(locutor, queue, injectables, step_info, resume_after, **kw shared_data_buffer = kwargs run_simulation(queue, step_info, resume_after, shared_data_buffer) - chunk.log_write_hwm() - mem.log_hwm() + mem.log_global_hwm() # subprocess except Exception as e: exception(f"{type(e).__name__} exception caught in mp_run_simulation: {str(e)}") @@ -1019,8 +1055,9 @@ def log_queued_messages(): for process, queue in zip(procs, queues): while not queue.empty(): msg = queue.get(block=False) - info(f"{process.name} {msg['model']} : {tracing.format_elapsed_time(msg['time'])}") - mem.trace_memory_info("%s.%s.completed" % (process.name, msg['model'])) + model_name = msg['model'] + info(f"{process.name} {model_name} : {tracing.format_elapsed_time(msg['time'])}") + mem.trace_memory_info(f"{process.name}.{model_name}.completed") def check_proc_status(): # we want to drop 'completed' breadcrumb when it happens, lest we terminate @@ -1034,13 +1071,13 @@ def check_proc_status(): info(f"process {p.name} completed") completed.add(p.name) drop_breadcrumb(step_name, 'completed', list(completed)) - mem.trace_memory_info("%s.completed" % p.name) + mem.trace_memory_info(f"{p.name}.completed") else: # process failed if p.name not in failed: warning(f"process {p.name} failed with exitcode {p.exitcode}") failed.add(p.name) - mem.trace_memory_info("%s.failed" % p.name) + mem.trace_memory_info(f"{p.name}.failed") if fail_fast: warning(f"fail_fast terminating remaining running processes") for op in procs: @@ -1052,19 +1089,6 @@ def check_proc_status(): info(f"error terminating process {op.name}: {e}") raise RuntimeError("Process %s failed" % (p.name,)) - def idle(seconds): - # idle for specified number of seconds, monitoring message queue and sub process status - log_queued_messages() - check_proc_status() - mem.trace_memory_info() - for _ in range(seconds): - time.sleep(1) - # log queued messages as they are received - log_queued_messages() - # monitor sub process status and drop breadcrumbs or fail_fast as they terminate - check_proc_status() - mem.trace_memory_info() - step_name = step_info['name'] t0 = tracing.print_elapsed_time() @@ -1143,12 +1167,20 @@ def __setstate__(self, state): if sys.platform == 'win32': time.sleep(1) - mem.trace_memory_info("%s.start" % p.name) + mem.trace_memory_info(f"{p.name}.start") - # - idle logging queued messages and proc completion while multiprocessing.active_children(): - idle(seconds=1) - idle(seconds=0) + # log queued messages as they are received + log_queued_messages() + # monitor sub process status and drop breadcrumbs or fail_fast as they terminate + check_proc_status() + # monitor memory usage + mem.trace_memory_info("run_sub_simulations.idle", trace_ticks=mem.MEM_PARENT_TRACE_TICK_LEN) + time.sleep(1) + + # clean up any messages or breadcrumbs that occurred while we slept + log_queued_messages() + check_proc_status() # no need to join() explicitly since multiprocessing.active_children joins completed procs @@ -1178,13 +1210,13 @@ def run_sub_task(p): """ info(f"#run_model running sub_process {p.name}") - mem.trace_memory_info("%s.start" % p.name) + mem.trace_memory_info(f"{p.name}.start") t0 = tracing.print_elapsed_time() p.start() while multiprocessing.active_children(): - mem.trace_memory_info() + mem.trace_memory_info("run_sub_simulations.idle", trace_ticks=mem.MEM_PARENT_TRACE_TICK_LEN) time.sleep(1) # no need to join explicitly since multiprocessing.active_children joins completed procs @@ -1193,7 +1225,7 @@ def run_sub_task(p): t0 = tracing.print_elapsed_time('#run_model sub_process %s' % p.name, t0) # info(f'{p.name}.exitcode = {p.exitcode}') - mem.trace_memory_info(f"#run_model {p.name} completed") + mem.trace_memory_info(f"run_model {p.name} completed") if p.exitcode: error(f"Process {p.name} returned exitcode {p.exitcode}") @@ -1227,7 +1259,7 @@ def drop_breadcrumb(step_name, crumb, value=True): write_breadcrumbs(breadcrumbs) -def run_multiprocess(run_list, injectables): +def run_multiprocess(injectables): """ run the steps in run_list, possibly resuming after checkpoint specified by resume_after @@ -1257,9 +1289,10 @@ def run_multiprocess(run_list, injectables): dict of values to inject in sub-processes """ - mem.init_trace(setting('mem_tick'), write_header=True) mem.trace_memory_info("run_multiprocess.start") + run_list = get_run_list() + if not run_list['multiprocess']: raise RuntimeError("run_multiprocess called but multiprocess flag is %s" % run_list['multiprocess']) @@ -1282,6 +1315,8 @@ def find_breadcrumb(crumb, default=None): # - allocate shared data shared_data_buffers = {} + mem.trace_memory_info("allocate_shared_skim_buffer.before") + t0 = tracing.print_elapsed_time() shared_data_buffers.update(allocate_shared_skim_buffers()) t0 = tracing.print_elapsed_time('allocate shared skim buffer', t0) @@ -1301,6 +1336,7 @@ def find_breadcrumb(crumb, default=None): kwargs=shared_data_buffers) ) t0 = tracing.print_elapsed_time('setup shared_data_buffers', t0) + mem.trace_memory_info("mp_setup_skims.completed") # - for each step in run list for step_info in run_list['multiprocess_steps']: @@ -1350,7 +1386,13 @@ def find_breadcrumb(crumb, default=None): ) drop_breadcrumb(step_name, 'coalesce') - mem.log_hwm() + # add checkpoint with final tables even if not intermediate checkpointing + if not pipeline.intermediate_checkpoint(): + pipeline.open_pipeline('_') + pipeline.add_checkpoint(pipeline.FINAL_CHECKPOINT_NAME) + pipeline.close_pipeline() + + mem.log_global_hwm() # main process def get_breadcrumbs(run_list): @@ -1524,6 +1566,9 @@ def get_run_list(): if name in step_names: raise RuntimeError("duplicate step name %s" " in multiprocess_steps" % name) + if name in models: + raise RuntimeError(f"multiprocess_steps step name '{name}' cannot also be a model name") + step_names.add(name) # - validate num_processes and assign default @@ -1595,9 +1640,9 @@ def get_run_list(): " falls before that of prior step in models list" % (start_tag, start, name, istep)) - # remember last_model_in_previous_multiprocess_step for apportion_pipeline - multiprocess_steps[istep]['last_model_in_previous_multiprocess_step'] = \ - models[models.index(start) - 1] if models.index(start) > 0 else None + # remember there should always be a final checkpoint with same name as multiprocess_step name + multiprocess_steps[istep]['last_checkpoint_in_previous_multiprocess_step'] = \ + multiprocess_steps[istep - 1].get('name') if istep > 0 else None # - build individual step model lists based on starts starts.append(len(models)) # so last step gets remaining models in list diff --git a/activitysim/core/orca.py b/activitysim/core/orca.py index eae4c5e78..1237a07e3 100644 --- a/activitysim/core/orca.py +++ b/activitysim/core/orca.py @@ -1,5 +1,5 @@ -# ActivitySim -# See full license in LICENSE.txt. +# Orca +# Copyright (C) 2016 UrbanSim Inc. try: from inspect import getfullargspec as getargspec except ImportError: @@ -49,7 +49,6 @@ def log_start_finish(msg, logger, level=logging.DEBUG): """ A context manager to log messages with "start: " and "finish: " prefixes before and after a block. - Parameters ---------- msg : str @@ -57,7 +56,6 @@ def log_start_finish(msg, logger, level=logging.DEBUG): logger : logging.Logger level : int, optional Level at which to log, passed to ``logger.log``. - """ # logger.log(level, 'start: ' + msg) yield @@ -68,20 +66,17 @@ def _func_source_data(func): """ Return data about a function source, including file name, line number, and source code. - Parameters ---------- func : object May be anything support by the inspect module, such as a function, method, or class. - Returns ------- filename : str lineno : int The line number on which the function starts. source : str - """ filename = inspect.getsourcefile(func) lineno = inspect.getsourcelines(func)[1] @@ -93,7 +88,6 @@ def _func_source_data(func): def clear_all(): """ Clear any and all stored state from Orca. - """ _TABLES.clear() _COLUMNS.clear() @@ -112,13 +106,11 @@ def clear_all(): def clear_cache(scope=None): """ Clear all cached data. - Parameters ---------- scope : {None, 'step', 'iteration', 'forever'}, optional Clear cached values with a given scope. By default all cached values are removed. - """ if not scope: _TABLE_CACHE.clear() @@ -141,7 +133,6 @@ def enable_cache(): """ Allow caching of registered variables that explicitly have caching enabled. - """ global _CACHING _CACHING = True @@ -151,7 +142,6 @@ def disable_cache(): """ Turn off caching across Orca, even for registered variables that have caching enabled. - """ global _CACHING _CACHING = False @@ -160,12 +150,10 @@ def disable_cache(): def cache_on(): """ Whether caching is currently enabled or disabled. - Returns ------- on : bool True if caching is enabled. - """ return _CACHING @@ -190,7 +178,6 @@ class DataFrameWrapper(object): """ Wraps a DataFrame so it can provide certain columns and handle computed columns. - Parameters ---------- name : str @@ -198,7 +185,6 @@ class DataFrameWrapper(object): frame : pandas.DataFrame copy_col : bool, optional Whether to return copies when evaluating columns. - Attributes ---------- name : str @@ -207,7 +193,6 @@ class DataFrameWrapper(object): Whether to return copies when evaluating columns. local : pandas.DataFrame The wrapped DataFrame. - """ def __init__(self, name, frame, copy_col=True): self.name = name @@ -218,7 +203,6 @@ def __init__(self, name, frame, copy_col=True): def columns(self): """ Columns in this table. - """ return self.local_columns + list_columns_for_table(self.name) @@ -226,7 +210,6 @@ def columns(self): def local_columns(self): """ Columns that are part of the wrapped DataFrame. - """ return list(self.local.columns) @@ -234,27 +217,22 @@ def local_columns(self): def index(self): """ Table index. - """ return self.local.index def to_frame(self, columns=None): """ Make a DataFrame with the given columns. - Will always return a copy of the underlying table. - Parameters ---------- columns : sequence or string, optional Sequence of the column names desired in the DataFrame. A string can also be passed if only one column is desired. If None all columns are returned, including registered columns. - Returns ------- frame : pandas.DataFrame - """ extra_cols = _columns_for_table(self.name) @@ -284,14 +262,12 @@ def to_frame(self, columns=None): def update_col(self, column_name, series): """ Add or replace a column in the underlying DataFrame. - Parameters ---------- column_name : str Column to add or replace. series : pandas.Series or sequence Column data. - """ logger.debug('updating column {!r} in table {!r}'.format( column_name, self.name)) @@ -303,15 +279,12 @@ def __setitem__(self, key, value): def get_column(self, column_name): """ Returns a column as a Series. - Parameters ---------- column_name : str - Returns ------- column : pandas.Series - """ with log_start_finish( 'getting single column {!r} from table {!r}'.format( @@ -340,11 +313,9 @@ def __getattr__(self, key): def column_type(self, column_name): """ Report column type as one of 'local', 'series', or 'function'. - Parameters ---------- column_name : str - Returns ------- col_type : {'local', 'series', 'function'} @@ -352,7 +323,6 @@ def column_type(self, column_name): 'series' means the column is a registered Pandas Series, and 'function' means the column is a registered function providing a Pandas Series. - """ extra_cols = list_columns_for_table(self.name) @@ -374,7 +344,6 @@ def update_col_from_series(self, column_name, series, cast=False): Update existing values in a column from another series. Index values must match in both column and series. Optionally casts data type to match the existing column. - Parameters --------------- column_name : str @@ -401,7 +370,6 @@ def __len__(self): def clear_cached(self): """ Remove cached results from this table's computed columns. - """ _TABLE_CACHE.pop(self.name, None) for col in _columns_for_table(self.name).values(): @@ -412,7 +380,6 @@ def clear_cached(self): class TableFuncWrapper(object): """ Wrap a function that provides a DataFrame. - Parameters ---------- name : str @@ -428,7 +395,6 @@ class TableFuncWrapper(object): a single step of the pipeline. copy_col : bool, optional Whether to return copies when evaluating columns. - Attributes ---------- name : str @@ -437,7 +403,6 @@ class TableFuncWrapper(object): Whether caching is enabled for this table. copy_col : bool Whether to return copies when evaluating columns. - """ def __init__( self, name, func, cache=False, cache_scope=_CS_FOREVER, @@ -457,7 +422,6 @@ def columns(self): """ Columns in this table. (May contain only computed columns if the wrapped function has not been called yet.) - """ return self._columns + list_columns_for_table(self.name) @@ -466,7 +430,6 @@ def local_columns(self): """ Only the columns contained in the DataFrame returned by the wrapped function. (No registered columns included.) - """ if self._columns: return self._columns @@ -479,7 +442,6 @@ def index(self): """ Index of the underlying table. Will be None if that index is unknown. - """ return self._index @@ -488,7 +450,6 @@ def _call_func(self): Call the wrapped function and return the result wrapped by DataFrameWrapper. Also updates attributes like columns, index, and length. - """ if _CACHING and self.cache and self.name in _TABLE_CACHE: logger.debug('returning table {!r} from cache'.format(self.name)) @@ -520,34 +481,27 @@ def __call__(self): def to_frame(self, columns=None): """ Make a DataFrame with the given columns. - Will always return a copy of the underlying table. - Parameters ---------- columns : sequence, optional Sequence of the column names desired in the DataFrame. If None all columns are returned. - Returns ------- frame : pandas.DataFrame - """ return self._call_func().to_frame(columns) def get_column(self, column_name): """ Returns a column as a Series. - Parameters ---------- column_name : str - Returns ------- column : pandas.Series - """ frame = self._call_func() return DataFrameWrapper(self.name, frame, @@ -565,11 +519,9 @@ def __len__(self): def column_type(self, column_name): """ Report column type as one of 'local', 'series', or 'function'. - Parameters ---------- column_name : str - Returns ------- col_type : {'local', 'series', 'function'} @@ -577,7 +529,6 @@ def column_type(self, column_name): 'series' means the column is a registered Pandas Series, and 'function' means the column is a registered function providing a Pandas Series. - """ extra_cols = list_columns_for_table(self.name) @@ -597,7 +548,6 @@ def column_type(self, column_name): def clear_cached(self): """ Remove this table's cached result and that of associated columns. - """ _TABLE_CACHE.pop(self.name, None) for col in _columns_for_table(self.name).values(): @@ -610,14 +560,12 @@ def func_source_data(self): """ Return data about the wrapped function source, including file name, line number, and source code. - Returns ------- filename : str lineno : int The line number on which the function starts. source : str - """ return _func_source_data(self._func) @@ -625,7 +573,6 @@ def func_source_data(self): class _ColumnFuncWrapper(object): """ Wrap a function that returns a Series. - Parameters ---------- table_name : str @@ -642,7 +589,6 @@ class _ColumnFuncWrapper(object): (or until manually cleared). 'iteration' caches data for each complete iteration of the pipeline, 'step' caches data for a single step of the pipeline. - Attributes ---------- name : str @@ -651,7 +597,6 @@ class _ColumnFuncWrapper(object): Name of table this column is associated with. cache : bool Whether caching is enabled for this column. - """ def __init__( self, table_name, column_name, func, cache=False, @@ -666,7 +611,6 @@ def __init__( def __call__(self): """ Evaluate the wrapped function and return the result. - """ if (_CACHING and self.cache and @@ -692,7 +636,6 @@ def __call__(self): def clear_cached(self): """ Remove any cached result of this column. - """ x = _COLUMN_CACHE.pop((self.table_name, self.name), None) if x is not None: @@ -704,14 +647,12 @@ def func_source_data(self): """ Return data about the wrapped function source, including file name, line number, and source code. - Returns ------- filename : str lineno : int The line number on which the function starts. source : str - """ return _func_source_data(self._func) @@ -720,7 +661,6 @@ class _SeriesWrapper(object): """ Wrap a Series for the purpose of giving it the same interface as a `_ColumnFuncWrapper`. - Parameters ---------- table_name : str @@ -729,14 +669,12 @@ class _SeriesWrapper(object): Name for the column. series : pandas.Series Series with index matching the table to which it is being added. - Attributes ---------- name : str Column name. table_name : str Name of table this column is associated with. - """ def __init__(self, table_name, column_name, series): self.table_name = table_name @@ -749,7 +687,6 @@ def __call__(self): def clear_cached(self): """ Here for compatibility with `_ColumnFuncWrapper`. - """ pass @@ -757,7 +694,6 @@ def clear_cached(self): class _InjectableFuncWrapper(object): """ Wraps a function that will provide an injectable value elsewhere. - Parameters ---------- name : str @@ -769,14 +705,12 @@ class _InjectableFuncWrapper(object): (or until manually cleared). 'iteration' caches data for each complete iteration of the pipeline, 'step' caches data for a single step of the pipeline. - Attributes ---------- name : str Name of this injectable. cache : bool Whether caching is enabled for this injectable function. - """ def __init__(self, name, func, cache=False, cache_scope=_CS_FOREVER): self.name = name @@ -807,7 +741,6 @@ def __call__(self): def clear_cached(self): """ Clear a cached result for this injectable. - """ x = _INJECTABLE_CACHE.pop(self.name, None) if x: @@ -818,17 +751,14 @@ def clear_cached(self): class _StepFuncWrapper(object): """ Wrap a step function for argument matching. - Parameters ---------- step_name : str func : callable - Attributes ---------- name : str Name of step. - """ def __init__(self, step_name, func): self.name = step_name @@ -844,11 +774,9 @@ def __call__(self): def _tables_used(self): """ Tables injected into the step. - Returns ------- tables : set of str - """ args = list(self._argspec.args) if self._argspec.defaults: @@ -868,14 +796,12 @@ def func_source_data(self): """ Return data about a step function's source, including file name, line number, and source code. - Returns ------- filename : str lineno : int The line number on which the function starts. source : str - """ return _func_source_data(self._func) @@ -883,7 +809,6 @@ def func_source_data(self): def is_table(name): """ Returns whether a given name refers to a registered table. - """ return name in _TABLES @@ -891,7 +816,6 @@ def is_table(name): def list_tables(): """ List of table names. - """ return list(_TABLES.keys()) @@ -899,7 +823,6 @@ def list_tables(): def list_columns(): """ List of (table name, registered column name) pairs. - """ return list(_COLUMNS.keys()) @@ -907,7 +830,6 @@ def list_columns(): def list_steps(): """ List of registered step names. - """ return list(_STEPS.keys()) @@ -915,7 +837,6 @@ def list_steps(): def list_injectables(): """ List of registered injectables. - """ return list(_INJECTABLES.keys()) @@ -923,7 +844,6 @@ def list_injectables(): def list_broadcasts(): """ List of registered broadcasts as (cast table name, onto table name). - """ return list(_BROADCASTS.keys()) @@ -932,15 +852,12 @@ def is_expression(name): """ Checks whether a given name is a simple variable name or a compound variable expression. - Parameters ---------- name : str - Returns ------- is_expr : bool - """ return '.' in name @@ -948,19 +865,13 @@ def is_expression(name): def _collect_variables(names, expressions=None): """ Map labels and expressions to registered variables. - Handles argument matching. - Example: - _collect_variables(names=['zones', 'zone_id'], expressions=['parcels.zone_id']) - Would return a dict representing: - {'parcels': , 'zone_id': } - Parameters ---------- names : list of str @@ -969,13 +880,11 @@ def _collect_variables(names, expressions=None): expressions : list of str, optional List of registered variable expressions for labels defined at end of `names`. Length must match the number of labels. - Returns ------- variables : dict Keys match `names`. Values correspond to registered variables, which may be wrappers or evaluated functions if appropriate. - """ # Map registered variable labels to expressions. if not expressions: @@ -1012,7 +921,6 @@ def add_table( copy_col=True): """ Register a table with Orca. - Parameters ---------- table_name : str @@ -1032,11 +940,9 @@ def add_table( a single step of the pipeline. copy_col : bool, optional Whether to return copies when evaluating columns. - Returns ------- wrapped : `DataFrameWrapper` or `TableFuncWrapper` - """ if isinstance(table, Callable): table = TableFuncWrapper(table_name, table, cache=cache, @@ -1057,16 +963,13 @@ def table( table_name=None, cache=False, cache_scope=_CS_FOREVER, copy_col=True): """ Decorates functions that return DataFrames. - Decorator version of `add_table`. Table name defaults to name of function. - The function's argument names and keyword argument values will be matched to registered variables when the function needs to be evaluated by Orca. The argument name "iter_var" may be used to have the current iteration variable injected. - """ def decorator(func): if table_name: @@ -1083,15 +986,12 @@ def decorator(func): def get_raw_table(table_name): """ Get a wrapped table by name and don't do anything to it. - Parameters ---------- table_name : str - Returns ------- table : DataFrameWrapper or TableFuncWrapper - """ if is_table(table_name): return _TABLES[table_name] @@ -1102,17 +1002,13 @@ def get_raw_table(table_name): def get_table(table_name): """ Get a registered table. - Decorated functions will be converted to `DataFrameWrapper`. - Parameters ---------- table_name : str - Returns ------- table : `DataFrameWrapper` - """ table = get_raw_table(table_name) if isinstance(table, TableFuncWrapper): @@ -1123,17 +1019,13 @@ def get_table(table_name): def table_type(table_name): """ Returns the type of a registered table. - The type can be either "dataframe" or "function". - Parameters ---------- table_name : str - Returns ------- table_type : {'dataframe', 'function'} - """ table = get_raw_table(table_name) @@ -1147,7 +1039,6 @@ def add_column( table_name, column_name, column, cache=False, cache_scope=_CS_FOREVER): """ Add a new column to a table from a Series or callable. - Parameters ---------- table_name : str @@ -1168,7 +1059,6 @@ def add_column( (or until manually cleared). 'iteration' caches data for each complete iteration of the pipeline, 'step' caches data for a single step of the pipeline. - """ if isinstance(column, Callable): column = \ @@ -1191,17 +1081,14 @@ def add_column( def column(table_name, column_name=None, cache=False, cache_scope=_CS_FOREVER): """ Decorates functions that return a Series. - Decorator version of `add_column`. Series index must match the named table. Column name defaults to name of function. - The function's argument names and keyword argument values will be matched to registered variables when the function needs to be evaluated by Orca. The argument name "iter_var" may be used to have the current iteration variable injected. The index of the returned Series must match the named table. - """ def decorator(func): if column_name: @@ -1217,15 +1104,12 @@ def decorator(func): def list_columns_for_table(table_name): """ Return a list of all the extra columns registered for a given table. - Parameters ---------- table_name : str - Returns ------- columns : list of str - """ return [cname for tname, cname in _COLUMNS.keys() if tname == table_name] @@ -1233,16 +1117,13 @@ def list_columns_for_table(table_name): def _columns_for_table(table_name): """ Return all of the columns registered for a given table. - Parameters ---------- table_name : str - Returns ------- columns : dict of column wrappers Keys will be column names. - """ return {cname: col for (tname, cname), col in _COLUMNS.items() @@ -1253,7 +1134,6 @@ def column_map(tables, columns): """ Take a list of tables and a list of column names and resolve which columns come from which table. - Parameters ---------- tables : sequence of _DataFrameWrapper or _TableFuncWrapper @@ -1261,7 +1141,6 @@ def column_map(tables, columns): thing is that they have ``.name`` and ``.columns`` attributes. columns : sequence of str The column names of interest. - Returns ------- col_map : dict @@ -1284,19 +1163,15 @@ def column_map(tables, columns): def get_raw_column(table_name, column_name): """ Get a wrapped, registered column. - This function cannot return columns that are part of wrapped DataFrames, it's only for columns registered directly through Orca. - Parameters ---------- table_name : str column_name : str - Returns ------- wrapped : _SeriesWrapper or _ColumnFuncWrapper - """ try: return _COLUMNS[(table_name, column_name)] @@ -1309,7 +1184,6 @@ def _memoize_function(f, name, cache_scope=_CS_FOREVER): """ Wraps a function for memoization and ties it's cache into the Orca cacheing system. - Parameters ---------- f : function @@ -1320,7 +1194,6 @@ def _memoize_function(f, name, cache_scope=_CS_FOREVER): (or until manually cleared). 'iteration' caches data for each complete iteration of the pipeline, 'step' caches data for a single step of the pipeline. - """ cache = {} @@ -1354,7 +1227,6 @@ def add_injectable( memoize=False): """ Add a value that will be injected into other functions. - Parameters ---------- name : str @@ -1383,7 +1255,6 @@ def add_injectable( keyed by argument values, so the argument values must be hashable. Memoized functions have their caches cleared according to the same rules as universal caching. - """ if isinstance(value, Callable): if autocall: @@ -1403,16 +1274,13 @@ def injectable( memoize=False): """ Decorates functions that will be injected into other functions. - Decorator version of `add_injectable`. Name defaults to name of function. - The function's argument names and keyword argument values will be matched to registered variables when the function needs to be evaluated by Orca. The argument name "iter_var" may be used to have the current iteration variable injected. - """ def decorator(func): if name: @@ -1429,7 +1297,6 @@ def decorator(func): def is_injectable(name): """ Checks whether a given name can be mapped to an injectable. - """ return name in _INJECTABLES @@ -1437,15 +1304,12 @@ def is_injectable(name): def get_raw_injectable(name): """ Return a raw, possibly wrapped injectable. - Parameters ---------- name : str - Returns ------- inj : _InjectableFuncWrapper or object - """ if is_injectable(name): return _INJECTABLES[name] @@ -1456,18 +1320,15 @@ def get_raw_injectable(name): def injectable_type(name): """ Classify an injectable as either 'variable' or 'function'. - Parameters ---------- name : str - Returns ------- inj_type : {'variable', 'function'} If the injectable is an automatically called function or any other type of callable the type will be 'function', all other injectables will be have type 'variable'. - """ inj = get_raw_injectable(name) if isinstance(inj, (_InjectableFuncWrapper, Callable)): @@ -1479,16 +1340,13 @@ def injectable_type(name): def get_injectable(name): """ Get an injectable by name. *Does not* evaluate wrapped functions. - Parameters ---------- name : str - Returns ------- injectable Original value or evaluated value of an _InjectableFuncWrapper. - """ i = get_raw_injectable(name) return i() if isinstance(i, _InjectableFuncWrapper) else i @@ -1498,18 +1356,15 @@ def get_injectable_func_source_data(name): """ Return data about an injectable function's source, including file name, line number, and source code. - Parameters ---------- name : str - Returns ------- filename : str lineno : int The line number on which the function starts. source : str - """ if injectable_type(name) != 'function': raise ValueError('injectable {!r} is not a function'.format(name)) @@ -1527,18 +1382,15 @@ def get_injectable_func_source_data(name): def add_step(step_name, func): """ Add a step function to Orca. - The function's argument names and keyword argument values will be matched to registered variables when the function needs to be evaluated by Orca. The argument name "iter_var" may be used to have the current iteration variable injected. - Parameters ---------- step_name : str func : callable - """ if isinstance(func, Callable): logger.debug('registering step {!r}'.format(step_name)) @@ -1550,16 +1402,13 @@ def add_step(step_name, func): def step(step_name=None): """ Decorates functions that will be called by the `run` function. - Decorator version of `add_step`. step name defaults to name of function. - The function's argument names and keyword argument values will be matched to registered variables when the function needs to be evaluated by Orca. The argument name "iter_var" may be used to have the current iteration variable injected. - """ def decorator(func): if step_name: @@ -1574,7 +1423,6 @@ def decorator(func): def is_step(step_name): """ Check whether a given name refers to a registered step. - """ return step_name in _STEPS @@ -1582,10 +1430,8 @@ def is_step(step_name): def get_step(step_name): """ Get a wrapped step by name. - Parameters ---------- - """ if is_step(step_name): return _STEPS[step_name] @@ -1603,7 +1449,6 @@ def broadcast(cast, onto, cast_on=None, onto_on=None, """ Register a rule for merging two tables by broadcasting one onto the other. - Parameters ---------- cast, onto : str @@ -1614,7 +1459,6 @@ def broadcast(cast, onto, cast_on=None, onto_on=None, cast_index, onto_index : bool, optional Whether to use table indexes for merge. Equivalent of ``left_index``/``right_index`` parameters of pandas.merge. - """ logger.debug( 'registering broadcast of table {!r} onto {!r}'.format(cast, onto)) @@ -1625,17 +1469,14 @@ def broadcast(cast, onto, cast_on=None, onto_on=None, def _get_broadcasts(tables): """ Get the broadcasts associated with a set of tables. - Parameters ---------- tables : sequence of str Table names for which broadcasts have been registered. - Returns ------- casts : dict of `Broadcast` Keys are tuples of strings like (cast_name, onto_name). - """ tables = set(tables) casts = tz.keyfilter( @@ -1649,7 +1490,6 @@ def is_broadcast(cast_name, onto_name): """ Checks whether a relationship exists for broadcast `cast_name` onto `onto_name`. - """ return (cast_name, onto_name) in _BROADCASTS @@ -1657,10 +1497,8 @@ def is_broadcast(cast_name, onto_name): def get_broadcast(cast_name, onto_name): """ Get a single broadcast. - Broadcasts are stored data about how to do a Pandas join. A Broadcast object is a namedtuple with these attributes: - - cast: the name of the table being broadcast - onto: the name of the table onto which "cast" is broadcast - cast_on: The optional name of a column on which to join. @@ -1669,18 +1507,15 @@ def get_broadcast(cast_name, onto_name): None if the table index will be used instead. - cast_index: True if the table index should be used for the join. - onto_index: True if the table index should be used for the join. - Parameters ---------- cast_name : str The name of the table being braodcast. onto_name : str The name of the table onto which `cast_name` is broadcast. - Returns ------- broadcast : Broadcast - """ if is_broadcast(cast_name, onto_name): return _BROADCASTS[(cast_name, onto_name)] @@ -1695,7 +1530,6 @@ def _all_reachable_tables(t): """ A generator that provides all the names of tables that can be reached via merges starting at the given target table. - """ for k, v in t.items(): for tname in _all_reachable_tables(v): @@ -1707,7 +1541,6 @@ def _recursive_getitem(d, key): """ Descend into a dict of dicts to return the one that contains a given key. Every value in the dict must be another dict. - """ if key in d: return d @@ -1722,10 +1555,8 @@ def _dict_value_to_pairs(d): """ Takes the first value of a dictionary (which it self should be a dictionary) and turns it into a series of {key: value} dicts. - For example, _dict_value_to_pairs({'c': {'a': 1, 'b': 2}}) will yield {'a': 1} and {'b': 2}. - """ d = d[tz.first(d)] @@ -1736,7 +1567,6 @@ def _dict_value_to_pairs(d): def _is_leaf_node(merge_node): """ Returns True for dicts like {'a': {}}. - """ return len(merge_node) == 1 and not next(iter(merge_node.values())) @@ -1745,7 +1575,6 @@ def _next_merge(merge_node): """ Gets a node that has only leaf nodes below it. This table and the ones below are ready to be merged to make a new leaf node. - """ if all(_is_leaf_node(d) for d in _dict_value_to_pairs(merge_node)): return merge_node @@ -1760,7 +1589,6 @@ def merge_tables(target, tables, columns=None, drop_intersection=True): """ Merge a number of tables onto a target table. Tables must have registered merge rules via the `broadcast` function. - Parameters ---------- target : str, DataFrameWrapper, or TableFuncWrapper @@ -1778,11 +1606,9 @@ def merge_tables(target, tables, columns=None, drop_intersection=True): with suffixes applied by pd.merge. If false, columns names will be suffixed with the table names - e.g. zone_id_buildings and zone_id_parcels. - Returns ------- merged : pandas.DataFrame - """ # allow target to be string or table wrapper if isinstance(target, (DataFrameWrapper, TableFuncWrapper)): @@ -1891,16 +1717,13 @@ def merge_tables(target, tables, columns=None, drop_intersection=True): def get_step_table_names(steps): """ Returns a list of table names injected into the provided steps. - Parameters ---------- steps: list of str Steps to gather table inputs from. - Returns ------- list of str - """ table_names = set() for s in steps: @@ -1911,7 +1734,6 @@ def get_step_table_names(steps): def write_tables(fname, table_names=None, prefix=None, compress=False, local=False): """ Writes tables to a pandas.HDFStore file. - Parameters ---------- fname : str @@ -1926,7 +1748,6 @@ def write_tables(fname, table_names=None, prefix=None, compress=False, local=Fal compress: boolean Whether to compress output file using standard HDF5-readable zlib compression, default False. - """ if table_names is None: table_names = list_tables() @@ -1957,7 +1778,6 @@ def run(steps, iter_vars=None, data_out=None, out_interval=1, Run steps in series, optionally repeatedly over some sequence. The current iteration variable is set as a global injectable called ``iter_var``. - Parameters ---------- steps : list of str @@ -2047,10 +1867,8 @@ def injectables(**kwargs): """ Temporarily add injectables to the pipeline environment. Takes only keyword arguments. - Injectables will be returned to their original state when the context manager exits. - """ global _INJECTABLES @@ -2064,11 +1882,9 @@ def injectables(**kwargs): def temporary_tables(**kwargs): """ Temporarily set DataFrames as registered tables. - Tables will be returned to their original state when the context manager exits. Caching is not enabled for tables registered via this function. - """ global _TABLES @@ -2089,13 +1905,11 @@ def eval_variable(name, **kwargs): Execute a single variable function registered with Orca and return the result. Any keyword arguments are temporarily set as injectables. This gives the value as would be injected into a function. - Parameters ---------- name : str Name of variable to evaluate. Use variable expressions to specify columns. - Returns ------- object @@ -2103,7 +1917,6 @@ def eval_variable(name, **kwargs): object is returned by the registered function. For tables this returns a DataFrameWrapper as if the table had been injected into a function. - """ with injectables(**kwargs): vars = _collect_variables([name], [name]) @@ -2115,18 +1928,15 @@ def eval_step(name, **kwargs): Evaluate a step as would be done within the pipeline environment and return the result. Any keyword arguments are temporarily set as injectables. - Parameters ---------- name : str Name of step to run. - Returns ------- object Anything returned by a step. (Though note that in Orca runs return values from steps are ignored.) - """ with injectables(**kwargs): return get_step(name)() diff --git a/activitysim/core/pathbuilder.py b/activitysim/core/pathbuilder.py index f8cdebe5b..1f1f9271f 100644 --- a/activitysim/core/pathbuilder.py +++ b/activitysim/core/pathbuilder.py @@ -41,8 +41,9 @@ def compute_utilities(network_los, model_settings, choosers, model_constants, """ Compute utilities """ - with chunk.chunk_log(f'tvpb compute_utilities'): - trace_label = tracing.extend_trace_label(trace_label, 'compute_utils') + trace_label = tracing.extend_trace_label(trace_label, 'compute_utils') + + with chunk.chunk_log(trace_label): logger.debug(f"{trace_label} Running compute_utilities with {choosers.shape[0]} choosers") @@ -55,28 +56,26 @@ def compute_utilities(network_los, model_settings, choosers, model_constants, if c != simulate.SPEC_LABEL_NAME: spec[c] = spec[c].map(lambda s: model_constants.get(s, s)).astype(float) - with chunk.chunk_log(f'compute_utilities'): - - # - run preprocessor to annotate choosers - preprocessor_settings = model_settings.get('PREPROCESSOR') - if preprocessor_settings: + # - run preprocessor to annotate choosers + preprocessor_settings = model_settings.get('PREPROCESSOR') + if preprocessor_settings: - # don't want to alter caller's dataframe - choosers = choosers.copy() + # don't want to alter caller's dataframe + choosers = choosers.copy() - expressions.assign_columns( - df=choosers, - model_settings=preprocessor_settings, - locals_dict=locals_dict, - trace_label=trace_label) + expressions.assign_columns( + df=choosers, + model_settings=preprocessor_settings, + locals_dict=locals_dict, + trace_label=trace_label) - utilities = simulate.eval_utilities( - spec, - choosers, - locals_d=locals_dict, - trace_all_rows=trace, - trace_label=trace_label, - trace_column_names=trace_column_names) + utilities = simulate.eval_utilities( + spec, + choosers, + locals_d=locals_dict, + trace_all_rows=trace, + trace_label=trace_label, + trace_column_names=trace_column_names) return utilities @@ -126,63 +125,66 @@ def compute_maz_tap_utilities(self, recipe, maz_od_df, chooser_attributes, leg, trace_label = tracing.extend_trace_label(trace_label, f'maz_tap_utils.{leg}') - maz_tap_settings = \ - self.network_los.setting(f'TVPB_SETTINGS.{recipe}.maz_tap_settings.{mode}') - chooser_columns = maz_tap_settings['CHOOSER_COLUMNS'] - attribute_columns = list(chooser_attributes.columns) if chooser_attributes is not None else [] - model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') - - if leg == 'access': - maz_col = 'omaz' - tap_col = 'btap' - else: - maz_col = 'dmaz' - tap_col = 'atap' - - # maz_to_tap access/egress utilities - # deduped utilities_df - one row per chooser for each boarding tap (btap) accessible from omaz - utilities_df = self.network_los.maz_to_tap_dfs[mode] - - utilities_df = utilities_df[chooser_columns]. \ - reset_index(drop=False). \ - rename(columns={'MAZ': maz_col, 'TAP': tap_col}) - utilities_df = pd.merge( - maz_od_df[['idx', maz_col]].drop_duplicates(), - utilities_df, - on=maz_col, how='inner') - # add any supplemental chooser attributes (e.g. demographic_segment, tod) - for c in attribute_columns: - utilities_df[c] = reindex(chooser_attributes[c], utilities_df['idx']) - - chunk.log_df(trace_label, "utilities_df", utilities_df) + with chunk.chunk_log(trace_label): - if self.units_for_recipe(recipe) == 'utility': + maz_tap_settings = \ + self.network_los.setting(f'TVPB_SETTINGS.{recipe}.maz_tap_settings.{mode}') + chooser_columns = maz_tap_settings['CHOOSER_COLUMNS'] + attribute_columns = list(chooser_attributes.columns) if chooser_attributes is not None else [] + model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') - utilities_df[leg] = compute_utilities( - self.network_los, - maz_tap_settings, + if leg == 'access': + maz_col = 'omaz' + tap_col = 'btap' + else: + maz_col = 'dmaz' + tap_col = 'atap' + + # maz_to_tap access/egress utilities + # deduped utilities_df - one row per chooser for each boarding tap (btap) accessible from omaz + utilities_df = self.network_los.maz_to_tap_dfs[mode] + + utilities_df = utilities_df[chooser_columns]. \ + reset_index(drop=False). \ + rename(columns={'MAZ': maz_col, 'TAP': tap_col}) + utilities_df = pd.merge( + maz_od_df[['idx', maz_col]].drop_duplicates(), utilities_df, - model_constants=model_constants, - trace_label=trace_label, trace=trace, - trace_column_names=['idx', maz_col, tap_col] if trace else None) + on=maz_col, how='inner') + # add any supplemental chooser attributes (e.g. demographic_segment, tod) + for c in attribute_columns: + utilities_df[c] = reindex(chooser_attributes[c], utilities_df['idx']) - chunk.log_df(trace_label, "utilities_df", utilities_df) # annotated + chunk.log_df(trace_label, "utilities_df", utilities_df) - else: + if self.units_for_recipe(recipe) == 'utility': - assignment_spec = assign.read_assignment_spec(file_name=config.config_file_path(maz_tap_settings['SPEC'])) + utilities_df[leg] = compute_utilities( + self.network_los, + maz_tap_settings, + utilities_df, + model_constants=model_constants, + trace_label=trace_label, trace=trace, + trace_column_names=['idx', maz_col, tap_col] if trace else None) - results, _, _ = assign.assign_variables(assignment_spec, utilities_df, model_constants) - assert len(results.columns == 1) - utilities_df[leg] = results + chunk.log_df(trace_label, "utilities_df", utilities_df) # annotated - chunk.log_df(trace_label, "utilities_df", utilities_df) + else: - if trace: - self.trace_df(utilities_df, trace_label, 'utilities_df') + assignment_spec = \ + assign.read_assignment_spec(file_name=config.config_file_path(maz_tap_settings['SPEC'])) + + results, _, _ = assign.assign_variables(assignment_spec, utilities_df, model_constants) + assert len(results.columns == 1) + utilities_df[leg] = results + + chunk.log_df(trace_label, "utilities_df", utilities_df) - # drop utility computation columns ('tod', 'demographic_segment' and maz_to_tap_df time/distance columns) - utilities_df.drop(columns=attribute_columns + chooser_columns, inplace=True) + if trace: + self.trace_df(utilities_df, trace_label, 'utilities_df') + + # drop utility computation columns ('tod', 'demographic_segment' and maz_to_tap_df time/distance columns) + utilities_df.drop(columns=attribute_columns + chooser_columns, inplace=True) return utilities_df @@ -242,93 +244,95 @@ def compute_tap_tap_utilities(self, recipe, access_df, egress_df, chooser_attrib trace_label = tracing.extend_trace_label(trace_label, 'compute_tap_tap_utils') - model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') - tap_tap_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.tap_tap_settings') + with chunk.chunk_log(trace_label): - with memo("#TVPB CACHE compute_tap_tap_utilities all_transit_paths"): - transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace) - # note: transit_df index is arbitrary - chunk.log_df(trace_label, "transit_df", transit_df) + model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') + tap_tap_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.tap_tap_settings') - # FIXME some expressions may want to know access mode - - locals_dict = path_info.copy() - locals_dict.update(model_constants) + with memo("#TVPB CACHE compute_tap_tap_utilities all_transit_paths"): + transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace) + # note: transit_df index is arbitrary + chunk.log_df(trace_label, "transit_df", transit_df) - # columns needed for compute_utilities - chooser_columns = ['btap', 'atap'] + list(chooser_attributes.columns) + # FIXME some expressions may want to know access mode - + locals_dict = path_info.copy() + locals_dict.update(model_constants) - # deduplicate transit_df to unique_transit_df - with memo("#TVPB compute_tap_tap_utilities deduplicate transit_df"): + # columns needed for compute_utilities + chooser_columns = ['btap', 'atap'] + list(chooser_attributes.columns) - attribute_segments = \ - self.network_los.setting('TVPB_SETTINGS.tour_mode_choice.tap_tap_settings.attribute_segments') - scalar_attributes = {k: locals_dict[k] for k in attribute_segments.keys() if k not in transit_df} + # deduplicate transit_df to unique_transit_df + with memo("#TVPB compute_tap_tap_utilities deduplicate transit_df"): - transit_df['uid'] = self.uid_calculator.get_unique_ids(transit_df, scalar_attributes) + attribute_segments = \ + self.network_los.setting('TVPB_SETTINGS.tour_mode_choice.tap_tap_settings.attribute_segments') + scalar_attributes = {k: locals_dict[k] for k in attribute_segments.keys() if k not in transit_df} - unique_transit_df = transit_df.loc[~transit_df.uid.duplicated(), chooser_columns + ['uid']] - logger.debug(f"#TVPB CACHE deduped transit_df from {len(transit_df)} to {len(unique_transit_df)}") + transit_df['uid'] = self.uid_calculator.get_unique_ids(transit_df, scalar_attributes) - unique_transit_df.set_index('uid', inplace=True) - chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) + unique_transit_df = transit_df.loc[~transit_df.uid.duplicated(), chooser_columns + ['uid']] + logger.debug(f"#TVPB CACHE deduped transit_df from {len(transit_df)} to {len(unique_transit_df)}") - transit_df = transit_df[['idx', 'btap', 'atap', 'uid']] # don't need chooser columns - chunk.log_df(trace_label, "transit_df", transit_df) + unique_transit_df.set_index('uid', inplace=True) + chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) - logger.debug(f"#TVPB CACHE compute_tap_tap_utilities dedupe transit_df " - f"from {len(transit_df)} to {len(unique_transit_df)} rows") - - num_unique_transit_rows = len(unique_transit_df) # errcheck - logger.debug(f"#TVPB CACHE compute_tap_tap_utilities compute_utilities for {len(unique_transit_df)} rows") - - with memo("#TVPB compute_tap_tap_utilities compute_utilities"): - unique_utilities_df = compute_utilities( - self.network_los, - tap_tap_settings, - choosers=unique_transit_df, - model_constants=locals_dict, - trace_label=trace_label, - trace=trace, - trace_column_names=chooser_columns if trace else None - ) - chunk.log_df(trace_label, "unique_utilities_df", unique_utilities_df) - chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) # annotated + transit_df = transit_df[['idx', 'btap', 'atap', 'uid']] # don't need chooser columns + chunk.log_df(trace_label, "transit_df", transit_df) - if trace: - # combine unique_transit_df with unique_utilities_df for legibility - omnibus_df = pd.merge(unique_transit_df, unique_utilities_df, - left_index=True, right_index=True, how='left') - self.trace_df(omnibus_df, trace_label, 'unique_utilities_df') - chunk.log_df(trace_label, "omnibus_df", omnibus_df) - del omnibus_df - chunk.log_df(trace_label, "omnibus_df", None) - - assert num_unique_transit_rows == len(unique_utilities_df) # errcheck - - # redupe unique_transit_df back into transit_df - with memo("#TVPB compute_tap_tap_utilities redupe transit_df"): - - # idx = transit_df.index - transit_df = pd.merge(transit_df, unique_utilities_df, left_on='uid', right_index=True) - del transit_df['uid'] - # transit_df.index = idx - # note: left merge on columns does not preserve index, - # but transit_df index is arbitrary so no need to restore + logger.debug(f"#TVPB CACHE compute_tap_tap_utilities dedupe transit_df " + f"from {len(transit_df)} to {len(unique_transit_df)} rows") - chunk.log_df(trace_label, "transit_df", transit_df) + num_unique_transit_rows = len(unique_transit_df) # errcheck + logger.debug(f"#TVPB CACHE compute_tap_tap_utilities compute_utilities for {len(unique_transit_df)} rows") - for c in unique_utilities_df: - assert ERR_CHECK and not transit_df[c].isnull().any() + with memo("#TVPB compute_tap_tap_utilities compute_utilities"): + unique_utilities_df = compute_utilities( + self.network_los, + tap_tap_settings, + choosers=unique_transit_df, + model_constants=locals_dict, + trace_label=trace_label, + trace=trace, + trace_column_names=chooser_columns if trace else None + ) + chunk.log_df(trace_label, "unique_utilities_df", unique_utilities_df) + chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) # annotated - if len(unique_transit_df) > 0: - # if all rows were cached, then unique_utilities_df is just a ref to cache - del unique_utilities_df - chunk.log_df(trace_label, "unique_utilities_df", None) + if trace: + # combine unique_transit_df with unique_utilities_df for legibility + omnibus_df = pd.merge(unique_transit_df, unique_utilities_df, + left_index=True, right_index=True, how='left') + self.trace_df(omnibus_df, trace_label, 'unique_utilities_df') + chunk.log_df(trace_label, "omnibus_df", omnibus_df) + del omnibus_df + chunk.log_df(trace_label, "omnibus_df", None) - chunk.log_df(trace_label, "transit_df", None) + assert num_unique_transit_rows == len(unique_utilities_df) # errcheck - if trace: - self.trace_df(transit_df, trace_label, 'transit_df') + # redupe unique_transit_df back into transit_df + with memo("#TVPB compute_tap_tap_utilities redupe transit_df"): + + # idx = transit_df.index + transit_df = pd.merge(transit_df, unique_utilities_df, left_on='uid', right_index=True) + del transit_df['uid'] + # transit_df.index = idx + # note: left merge on columns does not preserve index, + # but transit_df index is arbitrary so no need to restore + + chunk.log_df(trace_label, "transit_df", transit_df) + + for c in unique_utilities_df: + assert ERR_CHECK and not transit_df[c].isnull().any() + + if len(unique_transit_df) > 0: + # if all rows were cached, then unique_utilities_df is just a ref to cache + del unique_utilities_df + chunk.log_df(trace_label, "unique_utilities_df", None) + + chunk.log_df(trace_label, "transit_df", None) + + if trace: + self.trace_df(transit_df, trace_label, 'transit_df') return transit_df @@ -358,43 +362,45 @@ def lookup_tap_tap_utilities(self, recipe, maz_od_df, access_df, egress_df, choo trace_label = tracing.extend_trace_label(trace_label, 'lookup_tap_tap_utils') - with memo("#TVPB CACHE lookup_tap_tap_utilities all_transit_paths"): - transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace=False) - # note: transit_df index is arbitrary - chunk.log_df(trace_label, "transit_df", transit_df) + with chunk.chunk_log(trace_label): - if TRACE_COMPLEXITY: - # diagnostic: log the omaz,dmaz pairs with the greatest number of virtual tap-tap paths - num_paths = transit_df.groupby(['idx']).size().to_frame('n') - num_paths = pd.merge(maz_od_df, num_paths, left_on='idx', right_index=True) - num_paths = num_paths[['omaz', 'dmaz', 'n']].drop_duplicates(subset=['omaz', 'dmaz']) - num_paths = num_paths.sort_values('n', ascending=False).reset_index(drop=True) - logger.debug(f"num_paths\n{num_paths.head(10)}") - - # FIXME some expressions may want to know access mode - - locals_dict = path_info.copy() - - # add uid column to transit_df - with memo("#TVPB lookup_tap_tap_utilities assign uid"): - attribute_segments = \ - self.network_los.setting('TVPB_SETTINGS.tour_mode_choice.tap_tap_settings.attribute_segments') - scalar_attributes = {k: locals_dict[k] for k in attribute_segments.keys() if k not in transit_df} - - transit_df.index = self.uid_calculator.get_unique_ids(transit_df, scalar_attributes) - transit_df = transit_df[['idx', 'btap', 'atap']] # just needed chooser_columns for uid calculation - chunk.log_df(trace_label, "transit_df add uid index", transit_df) - - with memo("#TVPB lookup_tap_tap_utilities reindex transit_df"): - utilities = self.tap_cache.data - i = 0 - for column_name in self.uid_calculator.set_names: - transit_df[column_name] = utilities[transit_df.index.values, i] - i += 1 - - for c in self.uid_calculator.set_names: - assert ERR_CHECK and not transit_df[c].isnull().any() + with memo("#TVPB CACHE lookup_tap_tap_utilities all_transit_paths"): + transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace=False) + # note: transit_df index is arbitrary + chunk.log_df(trace_label, "transit_df", transit_df) - chunk.log_df(trace_label, "transit_df", None) + if TRACE_COMPLEXITY: + # diagnostic: log the omaz,dmaz pairs with the greatest number of virtual tap-tap paths + num_paths = transit_df.groupby(['idx']).size().to_frame('n') + num_paths = pd.merge(maz_od_df, num_paths, left_on='idx', right_index=True) + num_paths = num_paths[['omaz', 'dmaz', 'n']].drop_duplicates(subset=['omaz', 'dmaz']) + num_paths = num_paths.sort_values('n', ascending=False).reset_index(drop=True) + logger.debug(f"num_paths\n{num_paths.head(10)}") + + # FIXME some expressions may want to know access mode - + locals_dict = path_info.copy() + + # add uid column to transit_df + with memo("#TVPB lookup_tap_tap_utilities assign uid"): + attribute_segments = \ + self.network_los.setting('TVPB_SETTINGS.tour_mode_choice.tap_tap_settings.attribute_segments') + scalar_attributes = {k: locals_dict[k] for k in attribute_segments.keys() if k not in transit_df} + + transit_df.index = self.uid_calculator.get_unique_ids(transit_df, scalar_attributes) + transit_df = transit_df[['idx', 'btap', 'atap']] # just needed chooser_columns for uid calculation + chunk.log_df(trace_label, "transit_df add uid index", transit_df) + + with memo("#TVPB lookup_tap_tap_utilities reindex transit_df"): + utilities = self.tap_cache.data + i = 0 + for column_name in self.uid_calculator.set_names: + transit_df[column_name] = utilities[transit_df.index.values, i] + i += 1 + + for c in self.uid_calculator.set_names: + assert ERR_CHECK and not transit_df[c].isnull().any() + + chunk.log_df(trace_label, "transit_df", None) return transit_df @@ -402,66 +408,68 @@ def compute_tap_tap_time(self, recipe, access_df, egress_df, chooser_attributes, trace_label = tracing.extend_trace_label(trace_label, 'compute_tap_tap_time') - model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') - tap_tap_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.tap_tap_settings') + with chunk.chunk_log(trace_label): - with memo("#TVPB CACHE compute_tap_tap_utilities all_transit_paths"): - transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace) - # note: transit_df index is arbitrary - chunk.log_df(trace_label, "transit_df", transit_df) + model_constants = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.CONSTANTS') + tap_tap_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.tap_tap_settings') - # some expressions may want to know access mode - - locals_dict = path_info.copy() - locals_dict['los'] = self.network_los - locals_dict.update(model_constants) + with memo("#TVPB CACHE compute_tap_tap_utilities all_transit_paths"): + transit_df = self.all_transit_paths(access_df, egress_df, chooser_attributes, trace_label, trace) + # note: transit_df index is arbitrary + chunk.log_df(trace_label, "transit_df", transit_df) - assignment_spec = assign.read_assignment_spec(file_name=config.config_file_path(tap_tap_settings['SPEC'])) + # some expressions may want to know access mode - + locals_dict = path_info.copy() + locals_dict['los'] = self.network_los + locals_dict.update(model_constants) - DEDUPE = True - if DEDUPE: + assignment_spec = assign.read_assignment_spec(file_name=config.config_file_path(tap_tap_settings['SPEC'])) - # assign uid for reduping - max_atap = transit_df.atap.max() + 1 - transit_df['uid'] = transit_df.btap * max_atap + transit_df.atap + DEDUPE = True + if DEDUPE: - # dedupe - chooser_attribute_columns = list(chooser_attributes.columns) - unique_transit_df = \ - transit_df.loc[~transit_df.uid.duplicated(), ['btap', 'atap', 'uid'] + chooser_attribute_columns] - unique_transit_df.set_index('uid', inplace=True) - chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) + # assign uid for reduping + max_atap = transit_df.atap.max() + 1 + transit_df['uid'] = transit_df.btap * max_atap + transit_df.atap - logger.debug(f"#TVPB CACHE deduped transit_df from {len(transit_df)} to {len(unique_transit_df)}") + # dedupe + chooser_attribute_columns = list(chooser_attributes.columns) + unique_transit_df = \ + transit_df.loc[~transit_df.uid.duplicated(), ['btap', 'atap', 'uid'] + chooser_attribute_columns] + unique_transit_df.set_index('uid', inplace=True) + chunk.log_df(trace_label, "unique_transit_df", unique_transit_df) - # assign_variables - results, _, _ = assign.assign_variables(assignment_spec, unique_transit_df, locals_dict) - assert len(results.columns == 1) - unique_transit_df['transit'] = results + logger.debug(f"#TVPB CACHE deduped transit_df from {len(transit_df)} to {len(unique_transit_df)}") - # redupe results back into transit_df - with memo("#TVPB compute_tap_tap_time redupe transit_df"): - transit_df['transit'] = reindex(unique_transit_df.transit, transit_df.uid) + # assign_variables + results, _, _ = assign.assign_variables(assignment_spec, unique_transit_df, locals_dict) + assert len(results.columns == 1) + unique_transit_df['transit'] = results - del transit_df['uid'] - del unique_transit_df - chunk.log_df(trace_label, "transit_df", transit_df) - chunk.log_df(trace_label, "unique_transit_df", None) + # redupe results back into transit_df + with memo("#TVPB compute_tap_tap_time redupe transit_df"): + transit_df['transit'] = reindex(unique_transit_df.transit, transit_df.uid) - else: - results, _, _ = assign.assign_variables(assignment_spec, transit_df, locals_dict) - assert len(results.columns == 1) - transit_df['transit'] = results + del transit_df['uid'] + del unique_transit_df + chunk.log_df(trace_label, "transit_df", transit_df) + chunk.log_df(trace_label, "unique_transit_df", None) - # filter out unavailable btap_atap pairs - logger.debug(f"{(transit_df['transit'] <= 0).sum()} unavailable tap_tap pairs out of {len(transit_df)}") - transit_df = transit_df[transit_df.transit > 0] + else: + results, _, _ = assign.assign_variables(assignment_spec, transit_df, locals_dict) + assert len(results.columns == 1) + transit_df['transit'] = results - transit_df.drop(columns=chooser_attributes.columns, inplace=True) + # filter out unavailable btap_atap pairs + logger.debug(f"{(transit_df['transit'] <= 0).sum()} unavailable tap_tap pairs out of {len(transit_df)}") + transit_df = transit_df[transit_df.transit > 0] - chunk.log_df(trace_label, "transit_df", None) + transit_df.drop(columns=chooser_attributes.columns, inplace=True) - if trace: - self.trace_df(transit_df, trace_label, 'transit_df') + chunk.log_df(trace_label, "transit_df", None) + + if trace: + self.trace_df(transit_df, trace_label, 'transit_df') return transit_df @@ -495,60 +503,62 @@ def best_paths(self, recipe, path_type, maz_od_df, access_df, egress_df, transit trace_label = tracing.extend_trace_label(trace_label, 'best_paths') - path_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.path_types.{path_type}') - max_paths_per_tap_set = path_settings.get('max_paths_per_tap_set', 1) - max_paths_across_tap_sets = path_settings.get('max_paths_across_tap_sets', 1) + with chunk.chunk_log(trace_label): - units = self.units_for_recipe(recipe) - smaller_is_better = (units in ['time']) + path_settings = self.network_los.setting(f'TVPB_SETTINGS.{recipe}.path_types.{path_type}') + max_paths_per_tap_set = path_settings.get('max_paths_per_tap_set', 1) + max_paths_across_tap_sets = path_settings.get('max_paths_across_tap_sets', 1) - maz_od_df['seq'] = maz_od_df.index - # maz_od_df has one row per chooser - # inner join to add rows for each access, egress, and transit segment combination - path_df = maz_od_df. \ - merge(access_df, on=['idx', 'omaz'], how='inner'). \ - merge(egress_df, on=['idx', 'dmaz'], how='inner'). \ - merge(transit_df, on=['idx', 'atap', 'btap'], how='inner') + units = self.units_for_recipe(recipe) + smaller_is_better = (units in ['time']) - chunk.log_df(trace_label, "path_df", path_df) + maz_od_df['seq'] = maz_od_df.index + # maz_od_df has one row per chooser + # inner join to add rows for each access, egress, and transit segment combination + path_df = maz_od_df. \ + merge(access_df, on=['idx', 'omaz'], how='inner'). \ + merge(egress_df, on=['idx', 'dmaz'], how='inner'). \ + merge(transit_df, on=['idx', 'atap', 'btap'], how='inner') - # transit sets are the transit_df non-join columns - transit_sets = [c for c in transit_df.columns if c not in ['idx', 'atap', 'btap']] + chunk.log_df(trace_label, "path_df", path_df) - if trace: - # be nice and show both tap_tap set utility and total_set = access + set + egress - for c in transit_sets: - path_df[f'total_{c}'] = path_df[c] + path_df['access'] + path_df['egress'] - self.trace_df(path_df, trace_label, 'best_paths.full') - for c in transit_sets: - del path_df[f'total_{c}'] + # transit sets are the transit_df non-join columns + transit_sets = [c for c in transit_df.columns if c not in ['idx', 'atap', 'btap']] - for c in transit_sets: - path_df[c] = path_df[c] + path_df['access'] + path_df['egress'] - path_df.drop(columns=['access', 'egress'], inplace=True) + if trace: + # be nice and show both tap_tap set utility and total_set = access + set + egress + for c in transit_sets: + path_df[f'total_{c}'] = path_df[c] + path_df['access'] + path_df['egress'] + self.trace_df(path_df, trace_label, 'best_paths.full') + for c in transit_sets: + del path_df[f'total_{c}'] - # choose best paths by tap set - best_paths_list = [] - for c in transit_sets: - keep = path_df.index.isin( - path_df[['seq', c]].sort_values(by=c, ascending=smaller_is_better). - groupby(['seq']).head(max_paths_per_tap_set).index - ) + for c in transit_sets: + path_df[c] = path_df[c] + path_df['access'] + path_df['egress'] + path_df.drop(columns=['access', 'egress'], inplace=True) - best_paths_for_set = path_df[keep] - best_paths_for_set['path_set'] = c # remember the path set - best_paths_for_set[units] = path_df[keep][c] - best_paths_for_set.drop(columns=transit_sets, inplace=True) - best_paths_list.append(best_paths_for_set) + # choose best paths by tap set + best_paths_list = [] + for c in transit_sets: + keep = path_df.index.isin( + path_df[['seq', c]].sort_values(by=c, ascending=smaller_is_better). + groupby(['seq']).head(max_paths_per_tap_set).index + ) - path_df = pd.concat(best_paths_list).sort_values(by=['seq', units], ascending=[True, smaller_is_better]) + best_paths_for_set = path_df[keep] + best_paths_for_set['path_set'] = c # remember the path set + best_paths_for_set[units] = path_df[keep][c] + best_paths_for_set.drop(columns=transit_sets, inplace=True) + best_paths_list.append(best_paths_for_set) - # choose best paths overall by seq - path_df = path_df.sort_values(by=['seq', units], ascending=[True, smaller_is_better]) - path_df = path_df[path_df.index.isin(path_df.groupby(['seq']).head(max_paths_across_tap_sets).index)] + path_df = pd.concat(best_paths_list).sort_values(by=['seq', units], ascending=[True, smaller_is_better]) - if trace: - self.trace_df(path_df, trace_label, 'best_paths') + # choose best paths overall by seq + path_df = path_df.sort_values(by=['seq', units], ascending=[True, smaller_is_better]) + path_df = path_df[path_df.index.isin(path_df.groupby(['seq']).head(max_paths_across_tap_sets).index)] + + if trace: + self.trace_df(path_df, trace_label, 'best_paths') return path_df @@ -619,46 +629,42 @@ def build_virtual_path(self, recipe, path_type, orig, dest, tod, demographic_seg chooser_attributes['demographic_segment'] = demographic_segment.loc[~duplicated] with memo("#TVPB build_virtual_path access_df"): - with chunk.chunk_log(f'#TVPB.access.{access_mode}'): - access_df = self.compute_maz_tap_utilities( - recipe, - maz_od_df, - chooser_attributes, - leg='access', - mode=access_mode, - trace_label=trace_label, trace=trace) + access_df = self.compute_maz_tap_utilities( + recipe, + maz_od_df, + chooser_attributes, + leg='access', + mode=access_mode, + trace_label=trace_label, trace=trace) chunk.log_df(trace_label, "access_df", access_df) with memo("#TVPB build_virtual_path egress_df"): - with chunk.chunk_log(f'#TVPB.compute_maz_tap_utilities.egress.{egress_mode}'): - egress_df = self.compute_maz_tap_utilities( - recipe, - maz_od_df, - chooser_attributes, - leg='egress', - mode=egress_mode, - trace_label=trace_label, trace=trace) + egress_df = self.compute_maz_tap_utilities( + recipe, + maz_od_df, + chooser_attributes, + leg='egress', + mode=egress_mode, + trace_label=trace_label, trace=trace) chunk.log_df(trace_label, "egress_df", egress_df) # path_info for use by expressions (e.g. penalty for drive access if no parking at access tap) with memo("#TVPB build_virtual_path compute_tap_tap"): - with chunk.chunk_log(f'#TVPB.compute_tap_tap'): - transit_df = self.compute_tap_tap( - recipe, - maz_od_df, - access_df, - egress_df, - chooser_attributes, - path_info=path_info, - trace_label=trace_label, trace=trace) + transit_df = self.compute_tap_tap( + recipe, + maz_od_df, + access_df, + egress_df, + chooser_attributes, + path_info=path_info, + trace_label=trace_label, trace=trace) chunk.log_df(trace_label, "transit_df", transit_df) with memo("#TVPB build_virtual_path best_paths"): - with chunk.chunk_log(f'#TVPB.best_paths'): - path_df = self.best_paths( - recipe, path_type, - maz_od_df, access_df, egress_df, transit_df, - trace_label, trace) + path_df = self.best_paths( + recipe, path_type, + maz_od_df, access_df, egress_df, transit_df, + trace_label, trace) chunk.log_df(trace_label, "path_df", path_df) # now that we have created path_df, we are done with the dataframes for the separate legs @@ -867,8 +873,6 @@ def __init__(self, pathbuilder, orig_key, dest_key, tod_key, segment_key, self.trace_label = self.base_trace_label self.tag = tag - self.chunk_overhead = None - assert isinstance(orig_key, str) assert isinstance(dest_key, str) assert isinstance(tod_key, str) diff --git a/activitysim/core/pathbuilder_cache.py b/activitysim/core/pathbuilder_cache.py index 66d96e6c9..6a368e763 100644 --- a/activitysim/core/pathbuilder_cache.py +++ b/activitysim/core/pathbuilder_cache.py @@ -46,15 +46,15 @@ def memo(tag, console=False, disable_gc=True): if disable_gc: _gc.disable() - previous_mem = psutil.Process(os.getpid()).memory_info().rss + previous_mem = psutil.Process().memory_info().rss try: yield finally: elapsed_time = time.time() - t0 - current_mem = (psutil.Process(os.getpid()).memory_info().rss) + current_mem = (psutil.Process().memory_info().rss) marginal_mem = current_mem - previous_mem - mem_str = f"net {tracing.si_units(marginal_mem)} ({str(marginal_mem)}) total {tracing.si_units(current_mem)}" + mem_str = f"net {util.GB(marginal_mem)} ({util.INT(marginal_mem)}) total {util.GB(current_mem)}" if gc_was_enabled and disable_gc: _gc.enable() @@ -62,9 +62,9 @@ def memo(tag, console=False, disable_gc=True): _gc.collect() if console: - print(f"MEMO {tag} Time: {tracing.si_units(elapsed_time, kind='s')} Memory: {mem_str} ") + print(f"MEMO {tag} Time: {util.SEC(elapsed_time)} Memory: {mem_str} ") else: - logger.debug(f"MEM {tag} {mem_str} in {tracing.si_units(elapsed_time, kind='s')}") + logger.debug(f"MEM {tag} {mem_str} in {util.SEC(elapsed_time)}") MEMO_STACK.pop() @@ -89,12 +89,12 @@ def __init__(self, network_los, uid_calculator, cache_tag): @property def cache_path(self): file_type = 'mmap' - return os.path.join(self.network_los.get_cache_dir(), f'{self.cache_tag}.{file_type}') + return os.path.join(config.get_cache_dir(), f'{self.cache_tag}.{file_type}') @property def csv_trace_path(self): file_type = 'csv' - return os.path.join(self.network_los.get_cache_dir(), f'{self.cache_tag}.{file_type}') + return os.path.join(config.get_cache_dir(), f'{self.cache_tag}.{file_type}') def cleanup(self): """ @@ -148,6 +148,14 @@ def open(self): elif os.path.isfile(self.cache_path): # single process ought have created a precomputed fully_populated STATIC file data = np.memmap(self.cache_path, dtype=DTYPE_NAME, mode='r') + + # FIXME - why leave memmap open - maybe should copy since it will be read into memory when accessed anyway + # mm_data = np.memmap(self.cache_path, dtype=DTYPE_NAME, mode='r') + # data = np.empty_like(mm_data) + # np.copyto(data, mm_data) + # mm_data._mmap.close() + # del mm_data + logger.info(f"TVBPCache.open {self.cache_tag} read fully_populated data array from mmap file") else: raise RuntimeError(f"Pathbuilder cache not found. Did you forget to run initialize tvpb?" @@ -212,7 +220,7 @@ def allocate_data_buffer(self, shared=False): csz = buffer_size * dtype.itemsize logger.info(f"TVPBCache.allocate_data_buffer allocating data buffer " - f"shape {shape} buffer_size {buffer_size} total size: {csz} ({tracing.si_units(csz)})") + f"shape {shape} buffer_size {util.INT(buffer_size)} total size: {util.INT(csz)} ({util.GB(csz)})") if shared: if dtype_name == 'float64': diff --git a/activitysim/core/pipeline.py b/activitysim/core/pipeline.py index c3b2ce84d..3571f3a7c 100644 --- a/activitysim/core/pipeline.py +++ b/activitysim/core/pipeline.py @@ -10,7 +10,15 @@ import pandas as pd -from . import orca +try: + # use orca module if installed + import orca + import orca.orca as _ORCA +except ModuleNotFoundError: + # otherwise use local copy + from . import orca + from . import orca as _ORCA + from . import inject from . import config from . import random @@ -33,8 +41,9 @@ # name used for storing the checkpoints dataframe to the pipeline store CHECKPOINT_TABLE_NAME = 'checkpoints' -# name of the first step/checkpoint created when teh pipeline is started +# name of the first step/checkpoint created when the pipeline is started INITIAL_CHECKPOINT_NAME = 'init' +FINAL_CHECKPOINT_NAME = 'final' # special value for resume_after meaning last checkpoint LAST_CHECKPOINT = '_' @@ -189,7 +198,7 @@ def write_df(df, table_name, checkpoint_name=None): df : pandas.DataFrame dataframe to store table_name : str - also conventionally the orca table name + also conventionally the injected table name checkpoint_name : str the checkpoint at which the table was created/modified """ @@ -245,10 +254,10 @@ def rewrap(table_name, df=None): for column_name in orca.list_columns_for_table(table_name): # logger.debug("pop %s.%s: %s" % (table_name, column_name, t.column_type(column_name))) # fixme - orca._COLUMNS.pop((table_name, column_name), None) + _ORCA._COLUMNS.pop((table_name, column_name), None) # remove from orca's table list - orca._TABLES.pop(table_name, None) + _ORCA._TABLES.pop(table_name, None) assert df is not None @@ -273,7 +282,7 @@ def add_checkpoint(checkpoint_name): logger.debug("add_checkpoint %s timestamp %s" % (checkpoint_name, timestamp)) - for table_name in orca_dataframe_tables(): + for table_name in registered_tables(): # if we have not already checkpointed it or it has changed # FIXME - this won't detect if the orca table was modified @@ -301,7 +310,6 @@ def add_checkpoint(checkpoint_name): _PIPELINE.checkpoints.append(_PIPELINE.last_checkpoint.copy()) # create a pandas dataframe of the checkpoint history, one row per checkpoint - checkpoints = pd.DataFrame(_PIPELINE.checkpoints) # convert empty values to str so PyTables doesn't pickle object types @@ -312,9 +320,9 @@ def add_checkpoint(checkpoint_name): write_df(checkpoints, CHECKPOINT_TABLE_NAME) -def orca_dataframe_tables(): +def registered_tables(): """ - Return a list of the neames of all currently registered dataframe tables + Return a list of the names of all currently registered dataframe tables """ return [name for name in orca.list_tables() if orca.table_type(name) == 'dataframe'] @@ -352,6 +360,10 @@ def load_checkpoint(checkpoint_name): # truncate rows after target checkpoint i = checkpoints[checkpoints[CHECKPOINT_NAME] == checkpoint_name].index[0] checkpoints = checkpoints.loc[:i] + + # write it to the store to ensure so any subsequent checkpoints are forgotten + write_df(checkpoints, CHECKPOINT_TABLE_NAME) + except IndexError: msg = "Couldn't find checkpoint '%s' in checkpoints" % (checkpoint_name,) print(checkpoints[CHECKPOINT_NAME]) @@ -459,15 +471,19 @@ def run_model(model_name): step_name = step_name[1:] checkpoint = False else: - checkpoint = True + checkpoint = intermediate_checkpoint(model_name) inject.set_step_args(args) + mem.trace_memory_info(f"pipeline.run_model {model_name} start") + t0 = print_elapsed_time() logger.info(f"#run_model running step {step_name}") + orca.run([step_name]) t0 = print_elapsed_time("#run_model completed step '%s'" % model_name, t0, debug=True) + mem.trace_memory_info(f"pipeline.run_model {model_name} finished") inject.set_step_args(None) @@ -491,8 +507,6 @@ def open_pipeline(resume_after=None): name of checkpoint to load from pipeline store """ - logger.info("open_pipeline") - if is_open(): raise RuntimeError("Pipeline is already open!") @@ -549,6 +563,18 @@ def close_pipeline(): logger.debug("close_pipeline") +def intermediate_checkpoint(checkpoint_name=None): + + checkpoints = config.setting('checkpoints', True) + + if checkpoints is True or checkpoints is False: + return checkpoints + + assert isinstance(checkpoints, list), f"setting 'checkpoints'' should be True or False or a list" + + return checkpoint_name in checkpoints + + def run(models, resume_after=None): """ run the specified list of models, optionally loading checkpoint and resuming after specified @@ -584,14 +610,13 @@ def run(models, resume_after=None): if resume_after in models: models = models[models.index(resume_after) + 1:] - mem.init_trace(config.setting('mem_tick'), write_header=True) - mem.trace_memory_info('#MEM pipeline.run before preload_injectables') + mem.trace_memory_info('pipeline.run before preload_injectables') # preload any bulky injectables (e.g. skims) not in pipeline if inject.get_injectable('preload_injectables', None): t0 = print_elapsed_time('preload_injectables', t0) - mem.trace_memory_info('#MEM pipeline.run before run_models') + mem.trace_memory_info('pipeline.run after preload_injectables') t0 = print_elapsed_time() for model in models: @@ -601,7 +626,11 @@ def run(models, resume_after=None): tracing.log_runtime(model_name=model, start_time=t1) - mem.trace_memory_info('#MEM pipeline.run after run_models') + # add checkpoint with final tables even if not intermediate checkpointing + if not intermediate_checkpoint(): + add_checkpoint(FINAL_CHECKPOINT_NAME) + + mem.trace_memory_info('pipeline.run after run_models') t0 = print_elapsed_time("run_model (%s models)" % len(models), t0) @@ -788,10 +817,10 @@ def drop_table(table_name): for column_name in orca.list_columns_for_table(table_name): # logger.debug("pop %s.%s: %s" % (table_name, column_name, t.column_type(column_name))) - orca._COLUMNS.pop((table_name, column_name), None) + _ORCA._COLUMNS.pop((table_name, column_name), None) # remove from orca's table list - orca._TABLES.pop(table_name, None) + _ORCA._TABLES.pop(table_name, None) if table_name in _PIPELINE.replaced_tables: diff --git a/activitysim/core/random.py b/activitysim/core/random.py index 834417526..a9c977034 100644 --- a/activitysim/core/random.py +++ b/activitysim/core/random.py @@ -522,9 +522,9 @@ def set_base_seed(self, seed=None): if seed is None: self.base_seed = np.random.RandomState().randint(_MAX_SEED) - logger.info("Set random seed randomly to %s" % self.base_seed) + logger.debug("Set random seed randomly to %s" % self.base_seed) else: - logger.info("Set random seed base to %s" % seed) + logger.debug("Set random seed base to %s" % seed) self.base_seed = seed def get_global_rng(self): diff --git a/activitysim/core/simulate.py b/activitysim/core/simulate.py index 00869cc4d..937e73c4e 100644 --- a/activitysim/core/simulate.py +++ b/activitysim/core/simulate.py @@ -26,6 +26,8 @@ SPEC_EXPRESSION_NAME = 'Expression' SPEC_LABEL_NAME = 'Label' +ALT_LOSER_UTIL = -900 + def random_rows(df, n): @@ -383,7 +385,7 @@ def eval_coefficients(spec, coefficients, estimator): def eval_utilities(spec, choosers, locals_d=None, trace_label=None, have_trace_targets=False, trace_all_rows=False, - estimator=None, trace_column_names=None): + estimator=None, trace_column_names=None, log_alt_losers=False): """ Parameters @@ -432,15 +434,17 @@ def eval_utilities(spec, choosers, locals_d=None, trace_label=None, expression_values = np.empty((spec.shape[0], choosers.shape[0])) chunk.log_df(trace_label, "expression_values", expression_values) - for i, expr in enumerate(exprs): + i = 0 + for expr, coefficients in zip(exprs, spec.values): + try: with warnings.catch_warnings(record=True) as w: # Cause all warnings to always be triggered. warnings.simplefilter("always") if expr.startswith('@'): - expression_values[i] = eval(expr[1:], globals_dict, locals_dict) + expression_value = eval(expr[1:], globals_dict, locals_dict) else: - expression_values[i] = choosers.eval(expr) + expression_value = choosers.eval(expr) if len(w) > 0: for wrn in w: @@ -450,6 +454,21 @@ def eval_utilities(spec, choosers, locals_d=None, trace_label=None, logger.exception(f"{trace_label} - {type(err).__name__} ({str(err)}) evaluating: {str(expr)}") raise err + if log_alt_losers: + # utils for each alt for this expression + # FIXME if we always did tis, we cold uem these and skip np.dot below + utils = np.outer(expression_value, coefficients) + losers = np.amax(utils, axis=1) < ALT_LOSER_UTIL + + if losers.any(): + logger.warning(f"{trace_label} - {sum(losers)} choosers of {len(losers)} " + f"with prohibitive utilities for all alternatives for expression: {expr}") + + expression_values[i] = expression_value + i += 1 + + chunk.log_df(trace_label, "expression_values", expression_values) + if estimator: df = pd.DataFrame( data=expression_values.transpose(), @@ -461,6 +480,7 @@ def eval_utilities(spec, choosers, locals_d=None, trace_label=None, # - compute_utilities utilities = np.dot(expression_values.transpose(), spec.astype(np.float64).values) utilities = pd.DataFrame(data=utilities, index=choosers.index, columns=spec.columns) + chunk.log_df(trace_label, "utilities", utilities) if trace_all_rows or have_trace_targets: @@ -469,8 +489,7 @@ def eval_utilities(spec, choosers, locals_d=None, trace_label=None, trace_targets = pd.Series(True, index=choosers.index) else: trace_targets = tracing.trace_targets(choosers) - - assert trace_targets.any() # since they claimed to have targets... + assert trace_targets.any() # since they claimed to have targets... # get int offsets of the trace_targets (offsets of bool=True values) offsets = np.nonzero(list(trace_targets))[0] @@ -591,28 +610,29 @@ def to_array(x): return values -def compute_utilities(expression_values, spec): - - # matrix product of spec expression_values with utility coefficients of alternatives - # sums the partial utilities (represented by each spec row) of the alternatives - # resulting in a dataframe with one row per chooser and one column per alternative - # pandas.dot depends on column names of expression_values matching spec index values - - # FIXME - for performance, it is essential that spec and expression_values - # FIXME - not contain booleans when dotted with spec values - # FIXME - or the arrays will be converted to dtype=object within dot() - - spec = spec.astype(np.float64) - - # pandas.dot depends on column names of expression_values matching spec index values - # expressions should have been uniquified when spec was read - # we could do it here if need be, and then set spec.index and expression_values.columns equal - assert spec.index.is_unique - assert (spec.index.values == expression_values.columns.values).all() - - utilities = expression_values.dot(spec) - - return utilities +# no longer used because eval_utilities aggregates expression_values as they are computed to save space +# def compute_utilities(expression_values, spec): +# +# # matrix product of spec expression_values with utility coefficients of alternatives +# # sums the partial utilities (represented by each spec row) of the alternatives +# # resulting in a dataframe with one row per chooser and one column per alternative +# # pandas.dot depends on column names of expression_values matching spec index values +# +# # FIXME - for performance, it is essential that spec and expression_values +# # FIXME - not contain booleans when dotted with spec values +# # FIXME - or the arrays will be converted to dtype=object within dot() +# +# spec = spec.astype(np.float64) +# +# # pandas.dot depends on column names of expression_values matching spec index values +# # expressions should have been uniquified when spec was read +# # we could do it here if need be, and then set spec.index and expression_values.columns equal +# assert spec.index.is_unique +# assert (spec.index.values == expression_values.columns.values).all() +# +# utilities = expression_values.dot(spec) +# +# return utilities def set_skim_wrapper_targets(df, skims): @@ -805,6 +825,7 @@ def compute_base_probabilities(nested_probabilities, nests, spec): def eval_mnl(choosers, spec, locals_d, custom_chooser, estimator, + log_alt_losers=False, want_logsums=False, trace_label=None, trace_choice_name=None, trace_column_names=None): """ @@ -859,6 +880,7 @@ def eval_mnl(choosers, spec, locals_d, custom_chooser, estimator, tracing.trace_df(choosers, '%s.choosers' % trace_label) utilities = eval_utilities(spec, choosers, locals_d, + log_alt_losers=log_alt_losers, trace_label=trace_label, have_trace_targets=have_trace_targets, estimator=estimator, trace_column_names=trace_column_names) chunk.log_df(trace_label, "utilities", utilities) @@ -897,6 +919,7 @@ def eval_mnl(choosers, spec, locals_d, custom_chooser, estimator, def eval_nl(choosers, spec, nest_spec, locals_d, custom_chooser, estimator, + log_alt_losers=False, want_logsums=False, trace_label=None, trace_choice_name=None, trace_column_names=None): """ @@ -946,6 +969,7 @@ def eval_nl(choosers, spec, nest_spec, locals_d, custom_chooser, estimator, tracing.trace_df(choosers, '%s.choosers' % trace_label) raw_utilities = eval_utilities(spec, choosers, locals_d, + log_alt_losers=log_alt_losers, trace_label=trace_label, have_trace_targets=have_trace_targets, estimator=estimator, trace_column_names=trace_column_names) chunk.log_df(trace_label, "raw_utilities", raw_utilities) @@ -1033,6 +1057,7 @@ def eval_nl(choosers, spec, nest_spec, locals_d, custom_chooser, estimator, def _simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, custom_chooser=None, + log_alt_losers=False, want_logsums=False, estimator=None, trace_label=None, trace_choice_name=None, trace_column_names=None, @@ -1087,12 +1112,14 @@ def _simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, if nest_spec is None: choices = eval_mnl(choosers, spec, locals_d, custom_chooser, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, estimator=estimator, trace_label=trace_label, trace_choice_name=trace_choice_name, trace_column_names=trace_column_names) else: choices = eval_nl(choosers, spec, nest_spec, locals_d, custom_chooser, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, estimator=estimator, trace_label=trace_label, @@ -1113,51 +1140,10 @@ def list_of_skims(skims): return [skim for skim in list_of_skims(skims) if isinstance(skim, pathbuilder.TransitVirtualPathLogsumWrapper)] -def simple_simulate_calc_row_size(choosers, spec, nest_spec, skims=None, trace_label=None): - """ - rows_per_chunk calculator for simple_simulate - """ - - trace_label = tracing.extend_trace_label(trace_label, 'simple_simulate_calc_row_size') - - sizer = chunk.RowSizeEstimator(trace_label) - - # if there are skims, and zone_system is THREE_ZONE, and there are any - # then we want to estimate the per-row overhead tvpb skims - # (do this first to facilitate tracing of rowsize estimation below) - if tvpb_skims(skims): - # DISABLE_TVPB_OVERHEAD - logger.debug("disable calc_row_size for THREE_ZONE with tap skims") - return 0 - - # expression_values for each spec row - sizer.add_elements(spec.shape[0], 'expression_values') - - # raw utilities and probs for each alt - sizer.add_elements(spec.shape[1], 'utilities') - - # del expression_values when done with them - sizer.drop_elements('expression_values') - - # probs for each alt - sizer.add_elements(spec.shape[1], 'probs') - - if nest_spec is not None: - nest_size = logit.count_nests(nest_spec) - # nested_exp_utilities for each nest - sizer.add_elements(nest_size, 'nested_exp_utilities') - # nested_probabilities less 1 since it lacks root - sizer.add_elements(nest_size - 1, 'nested_probabilities') - - logger.debug(f"{trace_label} #chunk_calc row_size hwm after {sizer.hwm_tag} {sizer.hwm}") - - row_size = sizer.get_hwm() - - return row_size - - -def simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, +def simple_simulate(choosers, spec, nest_spec, + skims=None, locals_d=None, chunk_size=0, custom_chooser=None, + log_alt_losers=False, want_logsums=False, estimator=None, trace_label=None, trace_choice_name=None, trace_column_names=None): @@ -1171,18 +1157,17 @@ def simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, assert len(choosers) > 0 - row_size = chunk_size and simple_simulate_calc_row_size(choosers, spec, nest_spec, skims, trace_label) - result_list = [] # segment by person type and pick the right spec for each person type for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(choosers, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers(choosers, chunk_size, trace_label): choices = _simple_simulate( chooser_chunk, spec, nest_spec, skims=skims, locals_d=locals_d, custom_chooser=custom_chooser, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, estimator=estimator, trace_label=chunk_trace_label, @@ -1191,6 +1176,8 @@ def simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, result_list.append(choices) + chunk.log_df(trace_label, f'result_list', result_list) + if len(result_list) > 1: choices = pd.concat(result_list) @@ -1202,6 +1189,7 @@ def simple_simulate(choosers, spec, nest_spec, skims=None, locals_d=None, def simple_simulate_by_chunk_id(choosers, spec, nest_spec, skims=None, locals_d=None, chunk_size=0, custom_chooser=None, + log_alt_losers=False, want_logsums=False, estimator=None, trace_label=None, @@ -1209,22 +1197,17 @@ def simple_simulate_by_chunk_id(choosers, spec, nest_spec, """ chunk_by_chunk_id wrapper for simple_simulate """ - row_size = chunk_size and simple_simulate_calc_row_size(choosers, spec, nest_spec, trace_label=trace_label) - - # NOTE we chunk chunk_id so we have to scale row_size by average number of chooser rows per chunk_id - num_choosers = choosers['chunk_id'].max() + 1 - rows_per_chunk_id = len(choosers) / num_choosers - row_size = row_size * rows_per_chunk_id result_list = [] for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers_by_chunk_id(choosers, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers_by_chunk_id(choosers, chunk_size, trace_label): choices = _simple_simulate( chooser_chunk, spec, nest_spec, skims=skims, locals_d=locals_d, custom_chooser=custom_chooser, + log_alt_losers=log_alt_losers, want_logsums=want_logsums, estimator=estimator, trace_label=chunk_trace_label, @@ -1232,7 +1215,10 @@ def simple_simulate_by_chunk_id(choosers, spec, nest_spec, result_list.append(choices) - choices = pd.concat(result_list) + chunk.log_df(trace_label, f'result_list', result_list) + + if len(result_list) > 1: + choices = pd.concat(result_list) return choices @@ -1356,44 +1342,9 @@ def _simple_simulate_logsums(choosers, spec, nest_spec, return logsums -def simple_simulate_logsums_calc_row_size(choosers, spec, nest_spec, skims, trace_label): - """ - calculate rows_per_chunk for simple_simulate_logsums - """ - - # if there are skims, and zone_system is THREE_ZONE, and there are any - # then we want to estimate the per-row overhead tvpb skims - # (do this first to facilitate tracing of rowsize estimation below) - if tvpb_skims(skims): - # DISABLE_TVPB_OVERHEAD - logger.debug("disable calc_row_size for THREE_ZONE with tap skims") - return 0 - - sizer = chunk.RowSizeEstimator(trace_label) - - # expression_values for each spec row - sizer.add_elements(spec.shape[0], 'expression_values') - - # expression_values for each spec row - sizer.add_elements(spec.shape[1], 'utilities') - - # del expression_values when done with them - sizer.drop_elements('expression_values') - - if nest_spec is None: - logger.warning("simple_simulate_logsums_rpc rows_per_chunk not validated for mnl" - " so chunk sizing might be a bit off") - else: - sizer.add_elements(logit.count_nests(nest_spec), 'nested_exp_utilities') - - row_size = sizer.get_hwm() - - return row_size - - def simple_simulate_logsums(choosers, spec, nest_spec, skims=None, locals_d=None, chunk_size=0, - trace_label=None): + trace_label=None, chunk_tag=None): """ like simple_simulate except return logsums instead of making choices @@ -1403,16 +1354,13 @@ def simple_simulate_logsums(choosers, spec, nest_spec, Index will be that of `choosers`, values will be nest logsum based on spec column values """ - trace_label = tracing.extend_trace_label(trace_label, 'simple_simulate_logsums') - assert len(choosers) > 0 - - row_size = chunk_size and simple_simulate_logsums_calc_row_size(choosers, spec, nest_spec, skims, trace_label) + chunk_tag = chunk_tag or trace_label result_list = [] # segment by person type and pick the right spec for each person type for i, chooser_chunk, chunk_trace_label \ - in chunk.adaptive_chunked_choosers(choosers, chunk_size, row_size, trace_label): + in chunk.adaptive_chunked_choosers(choosers, chunk_size, trace_label, chunk_tag): logsums = _simple_simulate_logsums( chooser_chunk, spec, nest_spec, @@ -1421,6 +1369,8 @@ def simple_simulate_logsums(choosers, spec, nest_spec, result_list.append(logsums) + chunk.log_df(trace_label, f'result_list', result_list) + if len(result_list) > 1: logsums = pd.concat(result_list) diff --git a/activitysim/core/skim_dict_factory.py b/activitysim/core/skim_dict_factory.py index 320c054ab..51b1bc59a 100644 --- a/activitysim/core/skim_dict_factory.py +++ b/activitysim/core/skim_dict_factory.py @@ -251,7 +251,7 @@ def _skim_data_from_buffer(self, skim_info, skim_buffer): assert False, "Not supported" def _memmap_skim_data_path(self, skim_tag): - return os.path.join(self.network_los.get_cache_dir(), f"cached_{skim_tag}.mmap") + return os.path.join(config.get_cache_dir(), f"cached_{skim_tag}.mmap") def load_skim_info(self, skim_tag): return SkimInfo(skim_tag, self.network_los) @@ -377,7 +377,7 @@ def allocate_skim_buffer(self, skim_info, shared=False): csz = buffer_size * dtype.itemsize logger.info(f"allocate_skim_buffer shared {shared} {skim_info.skim_tag} shape {skim_info.skim_data_shape} " - f"total size: {csz} ({tracing.si_units(csz)})") + f"total size: {util.INT(csz)} ({util.GB(csz)})") if shared: if dtype_name == 'float64': diff --git a/activitysim/core/steps/output.py b/activitysim/core/steps/output.py index 1a04d539d..bf0c43948 100644 --- a/activitysim/core/steps/output.py +++ b/activitysim/core/steps/output.py @@ -108,7 +108,7 @@ def write_data_dictionary(output_dir): logger.warning(f"write_data_dictionary step invoked but neither 'txt_format' nor 'csv_format' specified") return - table_names = pipeline.checkpointed_tables() + table_names = pipeline.registered_tables() # use table_names list from model_settings, if provided schema_tables = model_settings.get('tables', None) @@ -139,7 +139,7 @@ def write_data_dictionary(output_dir): for table_name in table_names: # no change to table in this checkpoint - if row[table_name] != checkpoint_name: + if row.get(table_name, None) != checkpoint_name: continue # get the checkpointed version of the table @@ -192,7 +192,7 @@ def write_tables(output_dir): in settings file. 'output_tables' can specify either a list of output tables to include or to skip - if no output_tables list is specified, then no checkpointed tables will be written + if no output_tables list is specified, then all checkpointed tables will be written To write all output tables EXCEPT the households and persons tables: @@ -243,11 +243,12 @@ def write_tables(output_dir): h5_store = output_tables_settings.get('h5_store', False) sort = output_tables_settings.get('sort', False) - checkpointed_tables = pipeline.checkpointed_tables() + registered_tables = pipeline.registered_tables() if action == 'include': - output_tables_list = tables + # interpret empty or missing tables setting to mean include all registered tables + output_tables_list = tables if tables is not None else registered_tables elif action == 'skip': - output_tables_list = [t for t in checkpointed_tables if t not in tables] + output_tables_list = [t for t in registered_tables if t not in tables] else: raise "expected %s action '%s' to be either 'include' or 'skip'" % \ (output_tables_settings_name, action) @@ -257,7 +258,7 @@ def write_tables(output_dir): if table_name == 'checkpoints': df = pipeline.get_checkpoints() else: - if table_name not in checkpointed_tables: + if table_name not in registered_tables: logger.warning("Skipping '%s': Table not found." % table_name) continue df = pipeline.get_table(table_name) diff --git a/activitysim/core/test/test_los.py b/activitysim/core/test/test_los.py index 08d8c9791..22b465d33 100644 --- a/activitysim/core/test/test_los.py +++ b/activitysim/core/test/test_los.py @@ -9,7 +9,6 @@ import pandas.testing as pdt import pytest -from activitysim.core import orca from .. import inject from .. import los diff --git a/activitysim/core/test/test_mergetables.py b/activitysim/core/test/test_mergetables.py deleted file mode 100644 index 0cad197c4..000000000 --- a/activitysim/core/test/test_mergetables.py +++ /dev/null @@ -1,257 +0,0 @@ -# Orca -# Copyright (C) 2016 UrbanSim Inc. -# See full license in LICENSE. - -import pandas as pd -import pytest - -from .. import orca -from .utils_testing import assert_frames_equal - - -def setup_function(func): - orca.clear_all() - - -def teardown_function(func): - orca.clear_all() - - -@pytest.fixture -def dfa(): - return orca.DataFrameWrapper('a', pd.DataFrame( - {'a1': [1, 2, 3], - 'a2': [4, 5, 6], - 'a3': [7, 8, 9]}, - index=['aa', 'ab', 'ac'])) - - -@pytest.fixture -def dfz(): - return orca.DataFrameWrapper('z', pd.DataFrame( - {'z1': [90, 91], - 'z2': [92, 93], - 'z3': [94, 95], - 'z4': [96, 97], - 'z5': [98, 99]}, - index=['za', 'zb'])) - - -@pytest.fixture -def dfb(): - return orca.DataFrameWrapper('b', pd.DataFrame( - {'b1': range(10, 15), - 'b2': range(15, 20), - 'a_id': ['ac', 'ac', 'ab', 'aa', 'ab'], - 'z_id': ['zb', 'zb', 'za', 'za', 'zb']}, - index=['ba', 'bb', 'bc', 'bd', 'be'])) - - -@pytest.fixture -def dfc(): - return orca.DataFrameWrapper('c', pd.DataFrame( - {'c1': range(20, 30), - 'c2': range(30, 40), - 'b_id': ['ba', 'bd', 'bb', 'bc', 'bb', 'ba', 'bb', 'bc', 'bd', 'bb']}, - index=['ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'cg', 'ch', 'ci', 'cj'])) - - -@pytest.fixture -def dfg(): - return orca.DataFrameWrapper('g', pd.DataFrame( - {'g1': [1, 2, 3]}, - index=['ga', 'gb', 'gc'])) - - -@pytest.fixture -def dfh(): - return orca.DataFrameWrapper('h', pd.DataFrame( - {'h1': range(10, 15), - 'g_id': ['ga', 'gb', 'gc', 'ga', 'gb']}, - index=['ha', 'hb', 'hc', 'hd', 'he'])) - - -def all_broadcasts(): - orca.broadcast('a', 'b', cast_index=True, onto_on='a_id') - orca.broadcast('z', 'b', cast_index=True, onto_on='z_id') - orca.broadcast('b', 'c', cast_index=True, onto_on='b_id') - orca.broadcast('g', 'h', cast_index=True, onto_on='g_id') - - -def test_recursive_getitem(): - assert orca._recursive_getitem({'a': {}}, 'a') == {'a': {}} - assert orca._recursive_getitem( - {'a': {'b': {'c': {'d': {}, 'e': {}}}}}, 'e') == {'d': {}, 'e': {}} - - with pytest.raises(KeyError): - orca._recursive_getitem({'a': {'b': {'c': {'d': {}, 'e': {}}}}}, 'f') - - -def test_dict_value_to_pairs(): - assert sorted(orca._dict_value_to_pairs({'c': {'a': 1, 'b': 2}}), - key=lambda d: next(iter(d))) == \ - [{'a': 1}, {'b': 2}] - - -def test_is_leaf_node(): - assert orca._is_leaf_node({'b': {'a': {}}}) is False - assert orca._is_leaf_node({'a': {}}) is True - - -def test_next_merge(): - assert orca._next_merge({'d': {'c': {}, 'b': {'a': {}}}}) == \ - {'b': {'a': {}}} - assert orca._next_merge({'b': {'a': {}, 'z': {}}}) == \ - {'b': {'a': {}, 'z': {}}} - - -def test_merge_tables_raises(dfa, dfz, dfb, dfg, dfh): - all_broadcasts() - - with pytest.raises(RuntimeError): - orca.merge_tables('b', [dfa, dfb, dfz, dfg, dfh]) - - -def test_merge_tables1(dfa, dfz, dfb): - all_broadcasts() - - merged = orca.merge_tables('b', [dfa, dfz, dfb]) - - expected = pd.merge( - dfa.to_frame(), dfb.to_frame(), left_index=True, right_on='a_id') - expected = pd.merge( - expected, dfz.to_frame(), left_on='z_id', right_index=True) - - assert_frames_equal(merged, expected) - - -def test_merge_tables2(dfa, dfz, dfb, dfc): - all_broadcasts() - - merged = orca.merge_tables(dfc, [dfa, dfz, dfb, dfc]) - - expected = pd.merge( - dfa.to_frame(), dfb.to_frame(), left_index=True, right_on='a_id') - expected = pd.merge( - expected, dfz.to_frame(), left_on='z_id', right_index=True) - expected = pd.merge( - expected, dfc.to_frame(), left_index=True, right_on='b_id') - - assert_frames_equal(merged, expected) - - -def test_merge_tables_cols(dfa, dfz, dfb, dfc): - all_broadcasts() - - merged = orca.merge_tables( - 'c', [dfa, dfz, dfb, dfc], columns=['a1', 'b1', 'z1', 'c1']) - - expected = pd.DataFrame( - {'c1': range(20, 30), - 'b1': [10, 13, 11, 12, 11, 10, 11, 12, 13, 11], - 'a1': [3, 1, 3, 2, 3, 3, 3, 2, 1, 3], - 'z1': [91, 90, 91, 90, 91, 91, 91, 90, 90, 91]}, - index=['ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'cg', 'ch', 'ci', 'cj']) - - assert_frames_equal(merged, expected) - - -def test_merge_tables3(): - df_a = pd.DataFrame( - {'a': [0, 1]}, - index=['a0', 'a1']) - df_b = pd.DataFrame( - {'b': [2, 3, 4, 5, 6], - 'a_id': ['a0', 'a1', 'a1', 'a0', 'a1']}, - index=['b0', 'b1', 'b2', 'b3', 'b4']) - df_c = pd.DataFrame( - {'c': [7, 8, 9]}, - index=['c0', 'c1', 'c2']) - df_d = pd.DataFrame( - {'d': [10, 11, 12, 13, 15, 16, 16, 17, 18, 19], - 'b_id': ['b2', 'b0', 'b3', 'b3', 'b1', 'b4', 'b1', 'b4', 'b3', 'b3'], - 'c_id': ['c0', 'c1', 'c1', 'c0', 'c0', 'c2', 'c1', 'c2', 'c1', 'c2']}, - index=['d0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9']) - - orca.add_table('a', df_a) - orca.add_table('b', df_b) - orca.add_table('c', df_c) - orca.add_table('d', df_d) - - orca.broadcast(cast='a', onto='b', cast_index=True, onto_on='a_id') - orca.broadcast(cast='b', onto='d', cast_index=True, onto_on='b_id') - orca.broadcast(cast='c', onto='d', cast_index=True, onto_on='c_id') - - df = orca.merge_tables(target='d', tables=['a', 'b', 'c', 'd']) - - expected = pd.merge(df_a, df_b, left_index=True, right_on='a_id') - expected = pd.merge(expected, df_d, left_index=True, right_on='b_id') - expected = pd.merge(df_c, expected, left_index=True, right_on='c_id') - - assert_frames_equal(df, expected) - - -def test_merge_tables_dup_columns(): - # I'm intentionally setting the zone-ids to something different when joined - # in a real case they'd likely be the same but the whole point of this - # test is to see if we can get them back with different names tied to each - # table and they need to be different to test if that's working - hh_df = pd.DataFrame({'zone_id': [1, 1, 2], 'building_id': [5, 5, 6]}) - orca.add_table('households', hh_df) - - bldg_df = pd.DataFrame( - {'zone_id': [2, 3], 'parcel_id': [0, 1]}, index=[5, 6]) - orca.add_table('buildings', bldg_df) - - parcels_df = pd.DataFrame({'zone_id': [4, 5]}, index=[0, 1]) - orca.add_table('parcels', parcels_df) - - orca.broadcast( - 'buildings', 'households', cast_index=True, onto_on='building_id') - orca.broadcast('parcels', 'buildings', cast_index=True, onto_on='parcel_id') - - df = orca.merge_tables( - target='households', tables=['households', 'buildings', 'parcels']) - - expected = pd.DataFrame( - {'building_id': [5, 5, 6], 'parcel_id': [0, 0, 1], 'zone_id': [1, 1, 2]}) - assert_frames_equal(df, expected) - - df = orca.merge_tables( - target='households', - tables=['households', 'buildings', 'parcels'], - drop_intersection=False) - - expected = pd.DataFrame({ - 'building_id': [5, 5, 6], - 'parcel_id': [0, 0, 1], - 'zone_id_households': [1, 1, 2], - 'zone_id_buildings': [2, 2, 3], - 'zone_id_parcels': [4, 4, 5] - }) - assert_frames_equal(df, expected) - - df = orca.merge_tables( - target='households', - tables=['households', 'buildings'], - drop_intersection=False) - - expected = pd.DataFrame({ - 'building_id': [5, 5, 6], - 'parcel_id': [0, 0, 1], - 'zone_id_households': [1, 1, 2], - 'zone_id_buildings': [2, 2, 3] - }) - assert_frames_equal(df, expected) - - df = orca.merge_tables( - target='households', - tables=['households', 'buildings'] - ) - - expected = pd.DataFrame({ - 'building_id': [5, 5, 6], - 'parcel_id': [0, 0, 1], - 'zone_id': [1, 1, 2] - }) - assert_frames_equal(df, expected) diff --git a/activitysim/core/test/test_orca.py b/activitysim/core/test/test_orca.py deleted file mode 100644 index da745819a..000000000 --- a/activitysim/core/test/test_orca.py +++ /dev/null @@ -1,1267 +0,0 @@ -# Orca -# Copyright (C) 2016 UrbanSim Inc. -# See full license in LICENSE. - -import os -import tempfile - -import tables -import pandas as pd -import pytest -from pandas.util import testing as pdt - -from activitysim.core import orca -from activitysim.core import inject -from .utils_testing import assert_frames_equal - - -def setup_function(func): - orca.clear_all() - orca.enable_cache() - - -def teardown_function(func): - orca.clear_all() - orca.enable_cache() - # be nice to the others tests that expect decorated injectables to be there - inject.reinject_decorated_tables() - - -@pytest.fixture -def df(): - return pd.DataFrame( - [[1, 4], - [2, 5], - [3, 6]], - columns=['a', 'b'], - index=['x', 'y', 'z']) - - -def test_tables(df): - wrapped_df = orca.add_table('test_frame', df) - - @orca.table() - def test_func(test_frame): - return test_frame.to_frame() / 2 - - assert set(orca.list_tables()) == {'test_frame', 'test_func'} - - table = orca.get_table('test_frame') - assert table is wrapped_df - assert table.columns == ['a', 'b'] - assert table.local_columns == ['a', 'b'] - assert len(table) == 3 - pdt.assert_index_equal(table.index, df.index) - pdt.assert_series_equal(table.get_column('a'), df.a) - pdt.assert_series_equal(table.a, df.a) - pdt.assert_series_equal(table['b'], df['b']) - - table = orca._TABLES['test_func'] - assert table.index is None - assert table.columns == [] - assert len(table) == 0 - pdt.assert_frame_equal(table.to_frame(), df / 2) - pdt.assert_frame_equal(table.to_frame([]), df[[]]) - pdt.assert_frame_equal(table.to_frame(columns=['a']), df[['a']] / 2) - pdt.assert_frame_equal(table.to_frame(columns='a'), df[['a']] / 2) - pdt.assert_index_equal(table.index, df.index) - pdt.assert_series_equal(table.get_column('a'), df.a / 2) - pdt.assert_series_equal(table.a, df.a / 2) - pdt.assert_series_equal(table['b'], df['b'] / 2) - assert len(table) == 3 - assert table.columns == ['a', 'b'] - - -def test_table_func_cache(df): - orca.add_injectable('x', 2) - - @orca.table(cache=True) - def table(variable='x'): - return df * variable - - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 2) - orca.add_injectable('x', 3) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 2) - orca.get_table('table').clear_cached() - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 3) - orca.add_injectable('x', 4) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 3) - orca.clear_cache() - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 4) - orca.add_injectable('x', 5) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 4) - orca.add_table('table', table) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 5) - - -def test_table_func_cache_disabled(df): - orca.add_injectable('x', 2) - - @orca.table('table', cache=True) - def asdf(x): - return df * x - - orca.disable_cache() - - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 2) - orca.add_injectable('x', 3) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 3) - - orca.enable_cache() - - orca.add_injectable('x', 4) - pdt.assert_frame_equal(orca.get_table('table').to_frame(), df * 3) - - -def test_table_copy(df): - orca.add_table('test_frame_copied', df, copy_col=True) - orca.add_table('test_frame_uncopied', df, copy_col=False) - orca.add_table('test_func_copied', lambda: df, copy_col=True) - orca.add_table('test_func_uncopied', lambda: df, copy_col=False) - - @orca.table(copy_col=True) - def test_funcd_copied(): - return df - - @orca.table(copy_col=False) - def test_funcd_uncopied(): - return df - - @orca.table(copy_col=True) - def test_funcd_copied2(test_frame_copied): - # local returns original, but it is copied by copy_col. - return test_frame_copied.local - - @orca.table(copy_col=True) - def test_funcd_copied3(test_frame_uncopied): - # local returns original, but it is copied by copy_col. - return test_frame_uncopied.local - - @orca.table(copy_col=False) - def test_funcd_uncopied2(test_frame_copied): - # local returns original. - return test_frame_copied.local - - @orca.table(copy_col=False) - def test_funcd_uncopied3(test_frame_uncopied): - # local returns original. - return test_frame_uncopied.local - - orca.add_table('test_cache_copied', lambda: df, cache=True, copy_col=True) - orca.add_table( - 'test_cache_uncopied', lambda: df, cache=True, copy_col=False) - - @orca.table(cache=True, copy_col=True) - def test_cached_copied(): - return df - - @orca.table(cache=True, copy_col=False) - def test_cached_uncopied(): - return df - - # Create tables with computed columns. - orca.add_table( - 'test_copied_columns', pd.DataFrame(index=df.index), copy_col=True) - orca.add_table( - 'test_uncopied_columns', pd.DataFrame(index=df.index), copy_col=False) - for column_name in ['a', 'b']: - label = "test_frame_uncopied.{}".format(column_name) - - def func(col=label): - return col - for table_name in ['test_copied_columns', 'test_uncopied_columns']: - orca.add_column(table_name, column_name, func) - - for name in ['test_frame_uncopied', 'test_func_uncopied', - 'test_funcd_uncopied', 'test_funcd_uncopied2', - 'test_funcd_uncopied3', 'test_cache_uncopied', - 'test_cached_uncopied', 'test_uncopied_columns', - 'test_frame_copied', 'test_func_copied', - 'test_funcd_copied', 'test_funcd_copied2', - 'test_funcd_copied3', 'test_cache_copied', - 'test_cached_copied', 'test_copied_columns']: - table = orca.get_table(name) - table2 = orca.get_table(name) - - # to_frame will always return a copy. - if 'columns' in name: - assert_frames_equal(table.to_frame(), df) - else: - pdt.assert_frame_equal(table.to_frame(), df) - assert table.to_frame() is not df - pdt.assert_frame_equal(table.to_frame(), table.to_frame()) - assert table.to_frame() is not table.to_frame() - pdt.assert_series_equal(table.to_frame()['a'], df['a']) - assert table.to_frame()['a'] is not df['a'] - pdt.assert_series_equal(table.to_frame()['a'], - table.to_frame()['a']) - assert table.to_frame()['a'] is not table.to_frame()['a'] - - if 'uncopied' in name: - pdt.assert_series_equal(table['a'], df['a']) - assert table['a'] is df['a'] - pdt.assert_series_equal(table['a'], table2['a']) - assert table['a'] is table2['a'] - else: - pdt.assert_series_equal(table['a'], df['a']) - assert table['a'] is not df['a'] - pdt.assert_series_equal(table['a'], table2['a']) - assert table['a'] is not table2['a'] - - -def test_columns_for_table(): - orca.add_column( - 'table1', 'col10', pd.Series([1, 2, 3], index=['a', 'b', 'c'])) - orca.add_column( - 'table2', 'col20', pd.Series([10, 11, 12], index=['x', 'y', 'z'])) - - @orca.column('table1') - def col11(): - return pd.Series([4, 5, 6], index=['a', 'b', 'c']) - - @orca.column('table2', 'col21') - def asdf(): - return pd.Series([13, 14, 15], index=['x', 'y', 'z']) - - t1_col_names = orca.list_columns_for_table('table1') - assert set(t1_col_names) == {'col10', 'col11'} - - t2_col_names = orca.list_columns_for_table('table2') - assert set(t2_col_names) == {'col20', 'col21'} - - t1_cols = orca._columns_for_table('table1') - assert 'col10' in t1_cols and 'col11' in t1_cols - - t2_cols = orca._columns_for_table('table2') - assert 'col20' in t2_cols and 'col21' in t2_cols - - -def test_columns_and_tables(df): - orca.add_table('test_frame', df) - - @orca.table() - def test_func(test_frame): - return test_frame.to_frame() / 2 - - orca.add_column('test_frame', 'c', pd.Series([7, 8, 9], index=df.index)) - - @orca.column('test_func', 'd') - def asdf(test_func): - return test_func.to_frame(columns=['b'])['b'] * 2 - - @orca.column('test_func') - def e(column='test_func.d'): - return column + 1 - - test_frame = orca.get_table('test_frame') - assert set(test_frame.columns) == set(['a', 'b', 'c']) - assert_frames_equal( - test_frame.to_frame(), - pd.DataFrame( - {'a': [1, 2, 3], - 'b': [4, 5, 6], - 'c': [7, 8, 9]}, - index=['x', 'y', 'z'])) - assert_frames_equal( - test_frame.to_frame(columns=['a', 'c']), - pd.DataFrame( - {'a': [1, 2, 3], - 'c': [7, 8, 9]}, - index=['x', 'y', 'z'])) - - test_func_df = orca._TABLES['test_func'] - assert set(test_func_df.columns) == set(['d', 'e']) - assert_frames_equal( - test_func_df.to_frame(), - pd.DataFrame( - {'a': [0.5, 1, 1.5], - 'b': [2, 2.5, 3], - 'c': [3.5, 4, 4.5], - 'd': [4., 5., 6.], - 'e': [5., 6., 7.]}, - index=['x', 'y', 'z'])) - assert_frames_equal( - test_func_df.to_frame(columns=['b', 'd']), - pd.DataFrame( - {'b': [2, 2.5, 3], - 'd': [4., 5., 6.]}, - index=['x', 'y', 'z'])) - assert set(test_func_df.columns) == set(['a', 'b', 'c', 'd', 'e']) - - assert set(orca.list_columns()) == { - ('test_frame', 'c'), ('test_func', 'd'), ('test_func', 'e')} - - -def test_column_cache(df): - orca.add_injectable('x', 2) - series = pd.Series([1, 2, 3], index=['x', 'y', 'z']) - key = ('table', 'col') - - @orca.table() - def table(): - return df - - @orca.column(*key, cache=True) - def column(variable='x'): - return series * variable - - def c(): - return orca._COLUMNS[key] - - pdt.assert_series_equal(c()(), series * 2) - orca.add_injectable('x', 3) - pdt.assert_series_equal(c()(), series * 2) - c().clear_cached() - pdt.assert_series_equal(c()(), series * 3) - orca.add_injectable('x', 4) - pdt.assert_series_equal(c()(), series * 3) - orca.clear_cache() - pdt.assert_series_equal(c()(), series * 4) - orca.add_injectable('x', 5) - pdt.assert_series_equal(c()(), series * 4) - orca.get_table('table').clear_cached() - pdt.assert_series_equal(c()(), series * 5) - orca.add_injectable('x', 6) - pdt.assert_series_equal(c()(), series * 5) - orca.add_column(*key, column=column, cache=True) - pdt.assert_series_equal(c()(), series * 6) - - -def test_column_cache_disabled(df): - orca.add_injectable('x', 2) - series = pd.Series([1, 2, 3], index=['x', 'y', 'z']) - key = ('table', 'col') - - @orca.table() - def table(): - return df - - @orca.column(*key, cache=True) - def column(x): - return series * x - - def c(): - return orca._COLUMNS[key] - - orca.disable_cache() - - pdt.assert_series_equal(c()(), series * 2) - orca.add_injectable('x', 3) - pdt.assert_series_equal(c()(), series * 3) - - orca.enable_cache() - - orca.add_injectable('x', 4) - pdt.assert_series_equal(c()(), series * 3) - - -def test_update_col(df): - wrapped = orca.add_table('table', df) - - wrapped.update_col('b', pd.Series([7, 8, 9], index=df.index)) - pdt.assert_series_equal( - wrapped['b'], pd.Series([7, 8, 9], index=df.index, name='b')) - - a_dtype = wrapped['a'].dtype - - # test 1 - cast the data type before the update - wrapped.update_col_from_series('a', pd.Series(dtype=a_dtype)) - pdt.assert_series_equal(wrapped['a'], df['a']) - - # test 2 - let the update method do the cast - wrapped.update_col_from_series('a', pd.Series(dtype='float64'), True) - pdt.assert_series_equal(wrapped['a'], df['a']) - - # test 3 - don't cast, should raise an error - with pytest.raises(ValueError): - wrapped.update_col_from_series('a', pd.Series(dtype='float64')) - - wrapped.update_col_from_series('a', pd.Series([99], index=['y'])) - pdt.assert_series_equal( - wrapped['a'], pd.Series([1, 99, 3], index=df.index, name='a')) - - -class _FakeTable(object): - def __init__(self, name, columns): - self.name = name - self.columns = columns - - -@pytest.fixture -def fta(): - return _FakeTable('a', ['aa', 'ab', 'ac']) - - -@pytest.fixture -def ftb(): - return _FakeTable('b', ['bx', 'by', 'bz']) - - -def test_column_map_raises(fta, ftb): - with pytest.raises(RuntimeError): - orca.column_map([fta, ftb], ['aa', 'by', 'bz', 'cw']) - - -def test_column_map_none(fta, ftb): - assert orca.column_map([fta, ftb], None) == {'a': None, 'b': None} - - -def test_column_map(fta, ftb): - result = orca.column_map([fta, ftb], ['aa', 'by', 'bz']) - assert result['a'] == ['aa'] - assert sorted(result['b']) == ['by', 'bz'] - - result = orca.column_map([fta, ftb], ['by', 'bz']) - assert result['a'] == [] - assert sorted(result['b']) == ['by', 'bz'] - - -def test_is_step(): - @orca.step() - def test_step(): - pass - - assert orca.is_step('test_step') is True - assert orca.is_step('not_a_step') is False - - -def test_steps(df): - orca.add_table('test_table', df) - - df2 = df / 2 - orca.add_table('test_table2', df2) - - @orca.step() - def test_step(test_table, test_column='test_table2.b'): - tt = test_table.to_frame() - test_table['a'] = tt['a'] + tt['b'] - pdt.assert_series_equal(test_column, df2['b']) - - with pytest.raises(KeyError): - orca.get_step('asdf') - - step = orca.get_step('test_step') - assert step._tables_used() == set(['test_table', 'test_table2']) - step() - - table = orca.get_table('test_table') - pdt.assert_frame_equal( - table.to_frame(), - pd.DataFrame( - {'a': [5, 7, 9], - 'b': [4, 5, 6]}, - index=['x', 'y', 'z'])) - - assert orca.list_steps() == ['test_step'] - - -def test_step_run(df): - orca.add_table('test_table', df) - - @orca.table() - def table_func(test_table): - tt = test_table.to_frame() - tt['c'] = [7, 8, 9] - return tt - - @orca.column('table_func') - def new_col(test_table, table_func): - tt = test_table.to_frame() - tf = table_func.to_frame(columns=['c']) - return tt['a'] + tt['b'] + tf['c'] - - @orca.step() - def test_step1(iter_var, test_table, table_func): - tf = table_func.to_frame(columns=['new_col']) - test_table[iter_var] = tf['new_col'] + iter_var - - @orca.step('test_step2') - def asdf(table='test_table'): - tt = table.to_frame() - table['a'] = tt['a'] ** 2 - - orca.run(steps=['test_step1', 'test_step2'], iter_vars=[2000, 3000]) - - test_table = orca.get_table('test_table') - assert_frames_equal( - test_table.to_frame(), - pd.DataFrame( - {'a': [1, 16, 81], - 'b': [4, 5, 6], - 2000: [2012, 2015, 2018], - 3000: [3012, 3017, 3024]}, - index=['x', 'y', 'z'])) - - m = orca.get_step('test_step1') - assert set(m._tables_used()) == {'test_table', 'table_func'} - - -def test_step_func_source_data(): - @orca.step() - def test_step(): - return 'orca' - - filename, lineno, source = orca.get_step('test_step').func_source_data() - - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert source == ( - " @orca.step()\n" - " def test_step():\n" - " return 'orca'\n") - - -def test_get_broadcast(): - orca.broadcast('a', 'b', cast_on='ax', onto_on='bx') - orca.broadcast('x', 'y', cast_on='yx', onto_index=True) - - assert orca.is_broadcast('a', 'b') is True - assert orca.is_broadcast('b', 'a') is False - - with pytest.raises(KeyError): - orca.get_broadcast('b', 'a') - - ab = orca.get_broadcast('a', 'b') - assert isinstance(ab, orca.Broadcast) - assert ab == ('a', 'b', 'ax', 'bx', False, False) - - xy = orca.get_broadcast('x', 'y') - assert isinstance(xy, orca.Broadcast) - assert xy == ('x', 'y', 'yx', None, False, True) - - -def test_get_broadcasts(): - orca.broadcast('a', 'b') - orca.broadcast('b', 'c') - orca.broadcast('z', 'b') - orca.broadcast('f', 'g') - - with pytest.raises(ValueError): - orca._get_broadcasts(['a', 'b', 'g']) - - assert set(orca._get_broadcasts(['a', 'b', 'c', 'z']).keys()) == \ - {('a', 'b'), ('b', 'c'), ('z', 'b')} - assert set(orca._get_broadcasts(['a', 'b', 'z']).keys()) == \ - {('a', 'b'), ('z', 'b')} - assert set(orca._get_broadcasts(['a', 'b', 'c']).keys()) == \ - {('a', 'b'), ('b', 'c')} - - assert set(orca.list_broadcasts()) == \ - {('a', 'b'), ('b', 'c'), ('z', 'b'), ('f', 'g')} - - -def test_collect_variables(df): - orca.add_table('df', df) - - @orca.table() - def df_func(): - return df - - @orca.column('df') - def zzz(): - return df['a'] / 2 - - orca.add_injectable('answer', 42) - - @orca.injectable() - def injected(): - return 'injected' - - @orca.table('source table', cache=True) - def source(): - return df - - with pytest.raises(KeyError): - orca._collect_variables(['asdf']) - - with pytest.raises(KeyError): - orca._collect_variables(names=['df'], expressions=['asdf']) - - names = ['df', 'df_func', 'answer', 'injected', 'source_label', 'df_a'] - expressions = ['source table', 'df.a'] - things = orca._collect_variables(names, expressions) - - assert set(things.keys()) == set(names) - assert isinstance(things['source_label'], orca.DataFrameWrapper) - pdt.assert_frame_equal(things['source_label'].to_frame(), df) - assert isinstance(things['df_a'], pd.Series) - pdt.assert_series_equal(things['df_a'], df['a']) - - -def test_collect_variables_expression_only(df): - @orca.table() - def table(): - return df - - vars = orca._collect_variables(['a'], ['table.a']) - pdt.assert_series_equal(vars['a'], df.a) - - -def test_injectables(): - orca.add_injectable('answer', 42) - - @orca.injectable() - def func1(answer): - return answer * 2 - - @orca.injectable('func2', autocall=False) - def asdf(variable='x'): - return variable / 2 - - @orca.injectable() - def func3(func2): - return func2(4) - - @orca.injectable() - def func4(func='func1'): - return func / 2 - - assert orca._INJECTABLES['answer'] == 42 - assert orca._INJECTABLES['func1']() == 42 * 2 - assert orca._INJECTABLES['func2'](4) == 2 - assert orca._INJECTABLES['func3']() == 2 - assert orca._INJECTABLES['func4']() == 42 - - assert orca.get_injectable('answer') == 42 - assert orca.get_injectable('func1') == 42 * 2 - assert orca.get_injectable('func2')(4) == 2 - assert orca.get_injectable('func3') == 2 - assert orca.get_injectable('func4') == 42 - - with pytest.raises(KeyError): - orca.get_injectable('asdf') - - assert set(orca.list_injectables()) == \ - {'answer', 'func1', 'func2', 'func3', 'func4'} - - -def test_injectables_combined(df): - @orca.injectable() - def column(): - return pd.Series(['a', 'b', 'c'], index=df.index) - - @orca.table() - def table(): - return df - - @orca.step() - def step(table, column): - df = table.to_frame() - df['new'] = column - orca.add_table('table', df) - - orca.run(steps=['step']) - - table_wr = orca.get_table('table').to_frame() - - pdt.assert_frame_equal(table_wr[['a', 'b']], df) - pdt.assert_series_equal(table_wr['new'], pd.Series(column(), name='new')) - - -def test_injectables_cache(): - x = 2 - - @orca.injectable(autocall=True, cache=True) - def inj(): - return x * x - - def i(): - return orca._INJECTABLES['inj'] - - assert i()() == 4 - x = 3 - assert i()() == 4 - i().clear_cached() - assert i()() == 9 - x = 4 - assert i()() == 9 - orca.clear_cache() - assert i()() == 16 - x = 5 - assert i()() == 16 - orca.add_injectable('inj', inj, autocall=True, cache=True) - assert i()() == 25 - - -def test_injectables_cache_disabled(): - x = 2 - - @orca.injectable(autocall=True, cache=True) - def inj(): - return x * x - - def i(): - return orca._INJECTABLES['inj'] - - orca.disable_cache() - - assert i()() == 4 - x = 3 - assert i()() == 9 - - orca.enable_cache() - - assert i()() == 9 - x = 4 - assert i()() == 9 - - orca.disable_cache() - assert i()() == 16 - - -def test_memoized_injectable(): - outside = 'x' - - @orca.injectable(autocall=False, memoize=True) - def x(s): - return outside + s - - assert 'x' in orca._MEMOIZED - - def getx(): - return orca.get_injectable('x') - - assert hasattr(getx(), 'cache') - assert hasattr(getx(), 'clear_cached') - - assert getx()('y') == 'xy' - outside = 'z' - assert getx()('y') == 'xy' - - getx().clear_cached() - - assert getx()('y') == 'zy' - - -def test_memoized_injectable_cache_off(): - outside = 'x' - - @orca.injectable(autocall=False, memoize=True) - def x(s): - return outside + s - - def getx(): - return orca.get_injectable('x')('y') - - orca.disable_cache() - - assert getx() == 'xy' - outside = 'z' - assert getx() == 'zy' - - orca.enable_cache() - outside = 'a' - - assert getx() == 'zy' - - orca.disable_cache() - - assert getx() == 'ay' - - -def test_clear_cache_all(df): - @orca.table(cache=True) - def table(): - return df - - @orca.column('table', cache=True) - def z(table): - return df.a - - @orca.injectable(cache=True) - def x(): - return 'x' - - @orca.injectable(autocall=False, memoize=True) - def y(s): - return s + 'y' - - orca.eval_variable('table.z') - orca.eval_variable('x') - orca.get_injectable('y')('x') - - assert list(orca._TABLE_CACHE.keys()) == ['table'] - assert list(orca._COLUMN_CACHE.keys()) == [('table', 'z')] - assert list(orca._INJECTABLE_CACHE.keys()) == ['x'] - assert orca._MEMOIZED['y'].value.cache == {(('x',), None): 'xy'} - - orca.clear_cache() - - assert orca._TABLE_CACHE == {} - assert orca._COLUMN_CACHE == {} - assert orca._INJECTABLE_CACHE == {} - assert orca._MEMOIZED['y'].value.cache == {} - - -def test_clear_cache_scopes(df): - @orca.table(cache=True, cache_scope='forever') - def table(): - return df - - @orca.column('table', cache=True, cache_scope='iteration') - def z(table): - return df.a - - @orca.injectable(cache=True, cache_scope='step') - def x(): - return 'x' - - @orca.injectable(autocall=False, memoize=True, cache_scope='iteration') - def y(s): - return s + 'y' - - orca.eval_variable('table.z') - orca.eval_variable('x') - orca.get_injectable('y')('x') - - assert list(orca._TABLE_CACHE.keys()) == ['table'] - assert list(orca._COLUMN_CACHE.keys()) == [('table', 'z')] - assert list(orca._INJECTABLE_CACHE.keys()) == ['x'] - assert orca._MEMOIZED['y'].value.cache == {(('x',), None): 'xy'} - - orca.clear_cache(scope='step') - - assert list(orca._TABLE_CACHE.keys()) == ['table'] - assert list(orca._COLUMN_CACHE.keys()) == [('table', 'z')] - assert orca._INJECTABLE_CACHE == {} - assert orca._MEMOIZED['y'].value.cache == {(('x',), None): 'xy'} - - orca.clear_cache(scope='iteration') - - assert list(orca._TABLE_CACHE.keys()) == ['table'] - assert orca._COLUMN_CACHE == {} - assert orca._INJECTABLE_CACHE == {} - assert orca._MEMOIZED['y'].value.cache == {} - - orca.clear_cache(scope='forever') - - assert orca._TABLE_CACHE == {} - assert orca._COLUMN_CACHE == {} - assert orca._INJECTABLE_CACHE == {} - assert orca._MEMOIZED['y'].value.cache == {} - - -def test_cache_scope(df): - orca.add_injectable('x', 11) - orca.add_injectable('y', 22) - orca.add_injectable('z', 33) - orca.add_injectable('iterations', 1) - - @orca.injectable(cache=True, cache_scope='forever') - def a(x): - return x - - @orca.injectable(cache=True, cache_scope='iteration') - def b(y): - return y - - @orca.injectable(cache=True, cache_scope='step') - def c(z): - return z - - @orca.step() - def m1(iter_var, a, b, c): - orca.add_injectable('x', iter_var + a) - orca.add_injectable('y', iter_var + b) - orca.add_injectable('z', iter_var + c) - - assert a == 11 - - @orca.step() - def m2(iter_var, a, b, c, iterations): - assert a == 11 - if iter_var == 1000: - assert b == 22 - assert c == 1033 - elif iter_var == 2000: - assert b == 1022 - assert c == 3033 - - orca.add_injectable('iterations', iterations + 1) - - orca.run(['m1', 'm2'], iter_vars=[1000, 2000]) - - -def test_table_func_local_cols(df): - @orca.table() - def table(): - return df - orca.add_column( - 'table', 'new', pd.Series(['a', 'b', 'c'], index=df.index)) - - assert orca.get_table('table').local_columns == ['a', 'b'] - - -def test_is_table(df): - orca.add_table('table', df) - assert orca.is_table('table') is True - assert orca.is_table('asdf') is False - - -@pytest.fixture -def store_name(request): - fname = tempfile.NamedTemporaryFile(suffix='.h5').name - - def fin(): - if os.path.isfile(fname): - os.remove(fname) - request.addfinalizer(fin) - - return fname - - -@pytest.mark.filterwarnings('ignore::tables.NaturalNameWarning') -def test_write_tables(df, store_name): - orca.add_table('table', df) - - @orca.step() - def step(table): - pass - - step_tables = orca.get_step_table_names(['step']) - - orca.write_tables(store_name, step_tables) - with pd.HDFStore(store_name, mode='r') as store: - assert 'table' in store - pdt.assert_frame_equal(store['table'], df) - - orca.write_tables(store_name, step_tables, prefix=1969) - - with pd.HDFStore(store_name, mode='r') as store: - assert '1969/table' in store - pdt.assert_frame_equal(store['1969/table'], df) - - -def test_write_all_tables(df, store_name): - orca.add_table('table', df) - orca.write_tables(store_name) - - with pd.HDFStore(store_name, mode='r') as store: - for t in orca.list_tables(): - assert t in store - - -@pytest.mark.filterwarnings('ignore::tables.NaturalNameWarning') -def test_run_and_write_tables(df, store_name): - orca.add_table('table', df) - - def year_key(y): - return '{}'.format(y) - - def series_year(y): - return pd.Series([y] * 3, index=df.index, name=str(y)) - - @orca.step() - def step(iter_var, table): - table[year_key(iter_var)] = series_year(iter_var) - - orca.run( - ['step'], iter_vars=range(11), data_out=store_name, out_interval=3) - - with pd.HDFStore(store_name, mode='r') as store: - for year in range(0, 11, 3): - key = '{}/table'.format(year) - assert key in store - - for x in range(year): - pdt.assert_series_equal( - store[key][year_key(x)], series_year(x)) - - assert 'base/table' in store - - for x in range(11): - pdt.assert_series_equal( - store['10/table'][year_key(x)], series_year(x)) - - -@pytest.mark.filterwarnings('ignore::tables.NaturalNameWarning') -def test_run_and_write_tables_out_tables_provided(df, store_name): - table_names = ['table', 'table2', 'table3'] - for t in table_names: - orca.add_table(t, df) - - @orca.step() - def step(iter_var, table, table2): - return - - orca.run( - ['step'], - iter_vars=range(1), - data_out=store_name, - out_base_tables=table_names, - out_run_tables=['table']) - - with pd.HDFStore(store_name, mode='r') as store: - - for t in table_names: - assert 'base/{}'.format(t) in store - - assert '0/table' in store - assert '0/table2' not in store - assert '0/table3' not in store - - -def test_get_raw_table(df): - orca.add_table('table1', df) - - @orca.table() - def table2(): - return df - - assert isinstance(orca.get_raw_table('table1'), orca.DataFrameWrapper) - assert isinstance(orca.get_raw_table('table2'), orca.TableFuncWrapper) - - assert orca.table_type('table1') == 'dataframe' - assert orca.table_type('table2') == 'function' - - -def test_get_table(df): - orca.add_table('frame', df) - - @orca.table() - def table(): - return df - - @orca.table(cache=True) - def source(): - return df - - fr = orca.get_table('frame') - ta = orca.get_table('table') - so = orca.get_table('source') - - with pytest.raises(KeyError): - orca.get_table('asdf') - - assert isinstance(fr, orca.DataFrameWrapper) - assert isinstance(ta, orca.DataFrameWrapper) - assert isinstance(so, orca.DataFrameWrapper) - - pdt.assert_frame_equal(fr.to_frame(), df) - pdt.assert_frame_equal(ta.to_frame(), df) - pdt.assert_frame_equal(so.to_frame(), df) - - -def test_cache_disabled_cm(): - x = 3 - - @orca.injectable(cache=True) - def xi(): - return x - - assert orca.get_injectable('xi') == 3 - x = 5 - assert orca.get_injectable('xi') == 3 - - with orca.cache_disabled(): - assert orca.get_injectable('xi') == 5 - - # cache still gets updated even when cacheing is off - assert orca.get_injectable('xi') == 5 - - -def test_injectables_cm(): - orca.add_injectable('a', 'a') - orca.add_injectable('b', 'b') - orca.add_injectable('c', 'c') - - with orca.injectables(): - assert orca._INJECTABLES == { - 'a': 'a', 'b': 'b', 'c': 'c' - } - - with orca.injectables(c='d', x='x', y='y', z='z'): - assert orca._INJECTABLES == { - 'a': 'a', 'b': 'b', 'c': 'd', - 'x': 'x', 'y': 'y', 'z': 'z' - } - - assert orca._INJECTABLES == { - 'a': 'a', 'b': 'b', 'c': 'c' - } - - -def test_temporary_tables_cm(): - orca.add_table('a', pd.DataFrame()) - - with orca.temporary_tables(): - assert sorted(orca._TABLES.keys()) == ['a'] - - with orca.temporary_tables(a=pd.DataFrame(), b=pd.DataFrame()): - assert sorted(orca._TABLES.keys()) == ['a', 'b'] - - assert sorted(orca._TABLES.keys()) == ['a'] - - -def test_is_expression(): - assert orca.is_expression('name') is False - assert orca.is_expression('table.column') is True - - -def test_eval_variable(df): - orca.add_injectable('x', 3) - assert orca.eval_variable('x') == 3 - - @orca.injectable() - def func(x): - return 'xyz' * x - assert orca.eval_variable('func') == 'xyzxyzxyz' - assert orca.eval_variable('func', x=2) == 'xyzxyz' - - @orca.table() - def table(x): - return df * x - pdt.assert_series_equal(orca.eval_variable('table.a'), df.a * 3) - - -def test_eval_step(df): - orca.add_injectable('x', 3) - - @orca.step() - def step(x): - return df * x - - pdt.assert_frame_equal(orca.eval_step('step'), df * 3) - pdt.assert_frame_equal(orca.eval_step('step', x=5), df * 5) - - -def test_always_dataframewrapper(df): - @orca.table() - def table(): - return df / 2 - - @orca.table() - def table2(table): - assert isinstance(table, orca.DataFrameWrapper) - return table.to_frame() / 2 - - result = orca.eval_variable('table2') - pdt.assert_frame_equal(result.to_frame(), df / 4) - - -def test_table_func_source_data(df): - @orca.table() - def table(): - return df * 2 - - t = orca.get_raw_table('table') - filename, lineno, source = t.func_source_data() - - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert 'return df * 2' in source - - -def test_column_type(df): - orca.add_table('test_frame', df) - - @orca.table() - def test_func(): - return df - - s = pd.Series(range(len(df)), index=df.index) - - def col_func(): - return s - - orca.add_column('test_frame', 'col_series', s) - orca.add_column('test_func', 'col_series', s) - orca.add_column('test_frame', 'col_func', col_func) - orca.add_column('test_func', 'col_func', col_func) - - tframe = orca.get_raw_table('test_frame') - tfunc = orca.get_raw_table('test_func') - - assert tframe.column_type('a') == 'local' - assert tframe.column_type('col_series') == 'series' - assert tframe.column_type('col_func') == 'function' - - assert tfunc.column_type('a') == 'local' - assert tfunc.column_type('col_series') == 'series' - assert tfunc.column_type('col_func') == 'function' - - -def test_get_raw_column(df): - orca.add_table('test_frame', df) - - s = pd.Series(range(len(df)), index=df.index) - - def col_func(): - return s - - orca.add_column('test_frame', 'col_series', s) - orca.add_column('test_frame', 'col_func', col_func) - - assert isinstance( - orca.get_raw_column('test_frame', 'col_series'), - orca._SeriesWrapper) - assert isinstance( - orca.get_raw_column('test_frame', 'col_func'), - orca._ColumnFuncWrapper) - - -def test_column_func_source_data(df): - orca.add_table('test_frame', df) - - @orca.column('test_frame') - def col_func(): - return pd.Series(range(len(df)), index=df.index) - - s = orca.get_raw_column('test_frame', 'col_func') - filename, lineno, source = s.func_source_data() - - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert 'def col_func():' in source - - -def test_is_injectable(): - orca.add_injectable('answer', 42) - assert orca.is_injectable('answer') is True - assert orca.is_injectable('nope') is False - - -def test_injectable_type(): - orca.add_injectable('answer', 42) - - @orca.injectable() - def inj1(): - return 42 - - @orca.injectable(autocall=False, memoize=True) - def power(x): - return 42 ** x - - assert orca.injectable_type('answer') == 'variable' - assert orca.injectable_type('inj1') == 'function' - assert orca.injectable_type('power') == 'function' - - -def test_get_injectable_func_source_data(): - @orca.injectable() - def inj1(): - return 42 - - @orca.injectable(autocall=False, memoize=True) - def power(x): - return 42 ** x - - def inj2(): - return 'orca' - - orca.add_injectable('inj2', inj2, autocall=False) - - filename, lineno, source = orca.get_injectable_func_source_data('inj1') - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert '@orca.injectable()' in source - - filename, lineno, source = orca.get_injectable_func_source_data('power') - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert '@orca.injectable(autocall=False, memoize=True)' in source - - filename, lineno, source = orca.get_injectable_func_source_data('inj2') - assert filename.endswith('test_orca.py') - assert isinstance(lineno, int) - assert 'def inj2()' in source diff --git a/activitysim/core/test/test_timetable.py b/activitysim/core/test/test_timetable.py index 236aecbdd..9528cbfd7 100644 --- a/activitysim/core/test/test_timetable.py +++ b/activitysim/core/test/test_timetable.py @@ -8,6 +8,7 @@ import pytest from .. import timetable as tt +from .. import chunk @pytest.fixture @@ -39,148 +40,150 @@ def tdd_alts(): def test_basic(persons, tdd_alts): - person_windows = tt.create_timetable_windows(persons, tdd_alts) - - timetable = tt.TimeTable(person_windows, tdd_alts, 'person_windows') - - # print "\ntdd_footprints_df\n", timetable.tdd_footprints_df - # 0 1 2 3 4 5 6 7 - # 0 0 6 0 0 0 0 0 0 - # 1 0 2 4 0 0 0 0 0 - # 2 0 2 7 4 0 0 0 0 - # 3 0 2 7 7 4 0 0 0 - # 4 0 2 7 7 7 4 0 0 - # 5 0 2 7 7 7 7 4 0 - # 6 0 0 6 0 0 0 0 0 - # 7 0 0 2 4 0 0 0 0 - # 8 0 0 2 7 4 0 0 0 - # 9 0 0 2 7 7 4 0 0 - # 10 0 0 2 7 7 7 4 0 - # 11 0 0 0 6 0 0 0 0 - # 12 0 0 0 2 4 0 0 0 - # 13 0 0 0 2 7 4 0 0 - # 14 0 0 0 2 7 7 4 0 - # 15 0 0 0 0 6 0 0 0 - # 16 0 0 0 0 2 4 0 0 - # 17 0 0 0 0 2 7 4 0 - # 18 0 0 0 0 0 6 0 0 - # 19 0 0 0 0 0 2 4 0 - # 20 0 0 0 0 0 0 6 0 - - num_alts = len(tdd_alts.index) - num_persons = len(persons.index) - - person_ids = pd.Series(list(range(num_persons))*num_alts) - tdds = pd.Series(np.repeat(list(range(num_alts)), num_persons)) - - assert timetable.tour_available(person_ids, tdds).all() - - person_ids = pd.Series([0, 1, 2, 3, 4, 5]) - tdds = pd.Series([0, 1, 2, 15, 16, 17]) - timetable.assign(person_ids, tdds) - - # print "\nupdated_person_windows\n", timetable.get_person_windows_df() - # 4 5 6 7 8 9 10 11 - # 0 0 6 0 0 0 0 0 0 - # 1 0 2 4 0 0 0 0 0 - # 2 0 2 7 4 0 0 0 0 - # 3 0 0 0 0 6 0 0 0 - # 4 0 0 0 0 2 4 0 0 - # 5 0 0 0 0 2 7 4 0 - - person_ids = pd.Series([0, 1, 1, 0, 1, 3, 4]) - tdds = pd.Series([ - 0, # tdd START_END does not collide with START_END - 0, # tdd START_END does not collide with START - 6, # tdd START_END does not collide with END - 1, # tdd START does not collide with START_END - 7, # tdd START does not collide with END - 3, # tdd END does not collide with START_END - 3, # tdd END does not collide with START - ]) - assert timetable.tour_available(person_ids, tdds).all() - - # print "\nupdated_person_windows\n", timetable.get_person_windows_df() - # 4 5 6 7 8 9 10 11 - # 0 0 6 0 0 0 0 0 0 - # 1 0 2 4 0 0 0 0 0 - # 2 0 2 7 4 0 0 0 0 - # 3 0 0 0 0 6 0 0 0 - # 4 0 0 0 0 2 4 0 0 - # 5 0 0 0 0 2 7 4 0 - - person_ids = pd.Series([1, 5, 2, 2]) - tdds = pd.Series([ - 1, # tdd START + END collides with START + END - 17, # START + MIDDLE + END collides with same - 6, # tdd START_END collides with MIDDLE - 1, # tdd START + END collides with START + MIDDLE - ]) - assert not timetable.tour_available(person_ids, tdds).any() - - # ensure that tour_available handles heterogeneous results - person_ids = pd.Series([0, 1, 1, 5]) - tdds = pd.Series([ - 0, # tdd START_END does not collide with START_END - 0, # tdd START_END does not collide with START - 1, # tdd START + END collides with START + END - 17, # START + MIDDLE + END collides with same - ]) - pdt.assert_series_equal(timetable.tour_available(person_ids, tdds), - pd.Series([True, True, False, False], index=person_ids.index)) - - # assigning overlapping trip END,START should convert END to START_END - person_ids = pd.Series([2]) - tdds = pd.Series([13]) - assert timetable.tour_available(person_ids, tdds).all() - assert timetable.windows[2, 3] == tt.I_END - timetable.assign(person_ids, tdds) - assert timetable.windows[2, 3] == tt.I_START_END - - # print "\nupdated_person_windows\n", timetable.get_person_windows_df() - # 4 5 6 7 8 9 10 11 - # 0 0 6 0 0 0 0 0 0 - # 1 0 2 4 0 0 0 0 0 - # 2 0 2 7 6 7 4 0 0 - # 3 0 0 0 0 6 0 0 0 - # 4 0 0 0 0 2 4 0 0 - # 5 0 0 0 0 2 7 4 0 - - # - previous_tour_ends - - person_ids = pd.Series([0, 1, 2, 3, 4, 5, 2]) - periods = pd.Series([5, 6, 9, 8, 9, 10, 7]) - assert timetable.previous_tour_ends(person_ids, periods).all() - - person_ids = pd.Series([0, 1, 2]) - periods = pd.Series([9, 5, 8]) - assert not timetable.previous_tour_ends(person_ids, periods).any() - - # - previous_tour_begins - - person_ids = pd.Series([0, 1, 2, 3, 4, 5, 2]) - periods = pd.Series([5, 5, 5, 8, 8, 8, 7]) - assert timetable.previous_tour_begins(person_ids, periods).all() - - person_ids = pd.Series([0, 1, 2]) - periods = pd.Series([9, 6, 8]) - assert not timetable.previous_tour_begins(person_ids, periods).any() - - # - adjacent_window_after - person_ids = pd.Series([0, 1, 2, 3, 4, 5]) - periods = pd.Series([5, 5, 5, 5, 5, 5]) - adjacent_run_length = timetable.adjacent_window_after(person_ids, periods) - pdt.assert_series_equal(adjacent_run_length, pd.Series([5, 5, 0, 5, 5, 3])) - - # - adjacent_window_before - person_ids = pd.Series([0, 1, 2, 3, 4, 5]) - periods = pd.Series([10, 10, 10, 10, 10, 10]) - adjacent_run_length = timetable.adjacent_window_before(person_ids, periods) - pdt.assert_series_equal(adjacent_run_length, pd.Series([5, 5, 1, 5, 5, 0])) - - # - remaining_periods_available - person_ids = pd.Series([0, 1, 2, 3]) - starts = pd.Series([9, 6, 9, 5]) - ends = pd.Series([10, 10, 10, 9]) - periods_available = timetable.remaining_periods_available(person_ids, starts, ends) - pdt.assert_series_equal(periods_available, pd.Series([6, 3, 4, 3]), check_dtype=False) + with chunk.chunk_log('test_basic', base=True): + + person_windows = tt.create_timetable_windows(persons, tdd_alts) + + timetable = tt.TimeTable(person_windows, tdd_alts, 'person_windows') + + # print "\ntdd_footprints_df\n", timetable.tdd_footprints_df + # 0 1 2 3 4 5 6 7 + # 0 0 6 0 0 0 0 0 0 + # 1 0 2 4 0 0 0 0 0 + # 2 0 2 7 4 0 0 0 0 + # 3 0 2 7 7 4 0 0 0 + # 4 0 2 7 7 7 4 0 0 + # 5 0 2 7 7 7 7 4 0 + # 6 0 0 6 0 0 0 0 0 + # 7 0 0 2 4 0 0 0 0 + # 8 0 0 2 7 4 0 0 0 + # 9 0 0 2 7 7 4 0 0 + # 10 0 0 2 7 7 7 4 0 + # 11 0 0 0 6 0 0 0 0 + # 12 0 0 0 2 4 0 0 0 + # 13 0 0 0 2 7 4 0 0 + # 14 0 0 0 2 7 7 4 0 + # 15 0 0 0 0 6 0 0 0 + # 16 0 0 0 0 2 4 0 0 + # 17 0 0 0 0 2 7 4 0 + # 18 0 0 0 0 0 6 0 0 + # 19 0 0 0 0 0 2 4 0 + # 20 0 0 0 0 0 0 6 0 + + num_alts = len(tdd_alts.index) + num_persons = len(persons.index) + + person_ids = pd.Series(list(range(num_persons))*num_alts) + tdds = pd.Series(np.repeat(list(range(num_alts)), num_persons)) + + assert timetable.tour_available(person_ids, tdds).all() + + person_ids = pd.Series([0, 1, 2, 3, 4, 5]) + tdds = pd.Series([0, 1, 2, 15, 16, 17]) + timetable.assign(person_ids, tdds) + + # print "\nupdated_person_windows\n", timetable.get_person_windows_df() + # 4 5 6 7 8 9 10 11 + # 0 0 6 0 0 0 0 0 0 + # 1 0 2 4 0 0 0 0 0 + # 2 0 2 7 4 0 0 0 0 + # 3 0 0 0 0 6 0 0 0 + # 4 0 0 0 0 2 4 0 0 + # 5 0 0 0 0 2 7 4 0 + + person_ids = pd.Series([0, 1, 1, 0, 1, 3, 4]) + tdds = pd.Series([ + 0, # tdd START_END does not collide with START_END + 0, # tdd START_END does not collide with START + 6, # tdd START_END does not collide with END + 1, # tdd START does not collide with START_END + 7, # tdd START does not collide with END + 3, # tdd END does not collide with START_END + 3, # tdd END does not collide with START + ]) + assert timetable.tour_available(person_ids, tdds).all() + + # print "\nupdated_person_windows\n", timetable.get_person_windows_df() + # 4 5 6 7 8 9 10 11 + # 0 0 6 0 0 0 0 0 0 + # 1 0 2 4 0 0 0 0 0 + # 2 0 2 7 4 0 0 0 0 + # 3 0 0 0 0 6 0 0 0 + # 4 0 0 0 0 2 4 0 0 + # 5 0 0 0 0 2 7 4 0 + + person_ids = pd.Series([1, 5, 2, 2]) + tdds = pd.Series([ + 1, # tdd START + END collides with START + END + 17, # START + MIDDLE + END collides with same + 6, # tdd START_END collides with MIDDLE + 1, # tdd START + END collides with START + MIDDLE + ]) + assert not timetable.tour_available(person_ids, tdds).any() + + # ensure that tour_available handles heterogeneous results + person_ids = pd.Series([0, 1, 1, 5]) + tdds = pd.Series([ + 0, # tdd START_END does not collide with START_END + 0, # tdd START_END does not collide with START + 1, # tdd START + END collides with START + END + 17, # START + MIDDLE + END collides with same + ]) + pdt.assert_series_equal(timetable.tour_available(person_ids, tdds), + pd.Series([True, True, False, False], index=person_ids.index)) + + # assigning overlapping trip END,START should convert END to START_END + person_ids = pd.Series([2]) + tdds = pd.Series([13]) + assert timetable.tour_available(person_ids, tdds).all() + assert timetable.windows[2, 3] == tt.I_END + timetable.assign(person_ids, tdds) + assert timetable.windows[2, 3] == tt.I_START_END + + # print "\nupdated_person_windows\n", timetable.get_person_windows_df() + # 4 5 6 7 8 9 10 11 + # 0 0 6 0 0 0 0 0 0 + # 1 0 2 4 0 0 0 0 0 + # 2 0 2 7 6 7 4 0 0 + # 3 0 0 0 0 6 0 0 0 + # 4 0 0 0 0 2 4 0 0 + # 5 0 0 0 0 2 7 4 0 + + # - previous_tour_ends + + person_ids = pd.Series([0, 1, 2, 3, 4, 5, 2]) + periods = pd.Series([5, 6, 9, 8, 9, 10, 7]) + assert timetable.previous_tour_ends(person_ids, periods).all() + + person_ids = pd.Series([0, 1, 2]) + periods = pd.Series([9, 5, 8]) + assert not timetable.previous_tour_ends(person_ids, periods).any() + + # - previous_tour_begins + + person_ids = pd.Series([0, 1, 2, 3, 4, 5, 2]) + periods = pd.Series([5, 5, 5, 8, 8, 8, 7]) + assert timetable.previous_tour_begins(person_ids, periods).all() + + person_ids = pd.Series([0, 1, 2]) + periods = pd.Series([9, 6, 8]) + assert not timetable.previous_tour_begins(person_ids, periods).any() + + # - adjacent_window_after + person_ids = pd.Series([0, 1, 2, 3, 4, 5]) + periods = pd.Series([5, 5, 5, 5, 5, 5]) + adjacent_run_length = timetable.adjacent_window_after(person_ids, periods) + pdt.assert_series_equal(adjacent_run_length, pd.Series([5, 5, 0, 5, 5, 3])) + + # - adjacent_window_before + person_ids = pd.Series([0, 1, 2, 3, 4, 5]) + periods = pd.Series([10, 10, 10, 10, 10, 10]) + adjacent_run_length = timetable.adjacent_window_before(person_ids, periods) + pdt.assert_series_equal(adjacent_run_length, pd.Series([5, 5, 1, 5, 5, 0])) + + # - remaining_periods_available + person_ids = pd.Series([0, 1, 2, 3]) + starts = pd.Series([9, 6, 9, 5]) + ends = pd.Series([10, 10, 10, 9]) + periods_available = timetable.remaining_periods_available(person_ids, starts, ends) + pdt.assert_series_equal(periods_available, pd.Series([6, 3, 4, 3]), check_dtype=False) diff --git a/activitysim/core/test/test_tracing.py b/activitysim/core/test/test_tracing.py index 5b614bbab..429b429ad 100644 --- a/activitysim/core/test/test_tracing.py +++ b/activitysim/core/test/test_tracing.py @@ -8,7 +8,6 @@ from .. import tracing from .. import inject -from .. import orca def close_handlers(): diff --git a/activitysim/core/timetable.py b/activitysim/core/timetable.py index c023926d1..a79373834 100644 --- a/activitysim/core/timetable.py +++ b/activitysim/core/timetable.py @@ -10,6 +10,7 @@ import pandas as pd from activitysim.core import pipeline +from activitysim.core import chunk logger = logging.getLogger(__name__) @@ -126,7 +127,7 @@ def create_timetable_windows(rows, tdd_alts): Parameters ---------- - rows - pd.DataFrame or Series or orca.DataFrameWrapper + rows - pd.DataFrame or Series all we care about is the index tdd_alts - pd.DataFrame We expect a start and end column, and create a timetable to accomodate all alts @@ -444,35 +445,44 @@ def adjacent_window_run_length(self, window_row_ids, periods, before): """ assert len(window_row_ids) == len(periods) - time_col_ixs = periods.map(self.time_ix).values - - # sliced windows with 1s where windows state is I_MIDDLE and 0s elsewhere - available = (self.slice_windows_by_row_id(window_row_ids) != I_MIDDLE) * 1 - - # padding periods not available - available[:, 0] = 0 - available[:, -1] = 0 - - # column idxs of windows - num_rows, num_cols = available.shape - time_col_ix_map = np.tile(np.arange(0, num_cols), num_rows).reshape(num_rows, num_cols) - # 0 1 2 3 4 5... - # 0 1 2 3 4 5... - # 0 1 2 3 4 5... - - if before: - # ones after specified time, zeroes before - before_mask = (time_col_ix_map < time_col_ixs.reshape(num_rows, 1)) * 1 - # index of first unavailable window after time - first_unavailable = np.where((1-available)*before_mask, time_col_ix_map, 0).max(axis=1) - available_run_length = time_col_ixs - first_unavailable - 1 - else: - # ones after specified time, zeroes before - after_mask = (time_col_ix_map > time_col_ixs.reshape(num_rows, 1)) * 1 - # index of first unavailable window after time - first_unavailable = \ - np.where((1 - available) * after_mask, time_col_ix_map, num_cols).min(axis=1) - available_run_length = first_unavailable - time_col_ixs - 1 + trace_label = 'tt.adjacent_window_run_length' + with chunk.chunk_log(trace_label): + + time_col_ixs = periods.map(self.time_ix).values + chunk.log_df(trace_label, 'time_col_ixs', time_col_ixs) + + # sliced windows with 1s where windows state is I_MIDDLE and 0s elsewhere + available = (self.slice_windows_by_row_id(window_row_ids) != I_MIDDLE) * 1 + chunk.log_df(trace_label, 'available', available) + + # padding periods not available + available[:, 0] = 0 + available[:, -1] = 0 + + # column idxs of windows + num_rows, num_cols = available.shape + time_col_ix_map = np.tile(np.arange(0, num_cols), num_rows).reshape(num_rows, num_cols) + # 0 1 2 3 4 5... + # 0 1 2 3 4 5... + # 0 1 2 3 4 5... + chunk.log_df(trace_label, 'time_col_ix_map', time_col_ix_map) + + if before: + # ones after specified time, zeroes before + mask = (time_col_ix_map < time_col_ixs.reshape(num_rows, 1)) * 1 + # index of first unavailable window after time + first_unavailable = np.where((1-available)*mask, time_col_ix_map, 0).max(axis=1) + available_run_length = time_col_ixs - first_unavailable - 1 + else: + # ones after specified time, zeroes before + mask = (time_col_ix_map > time_col_ixs.reshape(num_rows, 1)) * 1 + # index of first unavailable window after time + first_unavailable = np.where((1 - available) * mask, time_col_ix_map, num_cols).min(axis=1) + available_run_length = first_unavailable - time_col_ixs - 1 + + chunk.log_df(trace_label, 'mask', mask) + chunk.log_df(trace_label, 'first_unavailable', first_unavailable) + chunk.log_df(trace_label, 'available_run_length', available_run_length) return pd.Series(available_run_length, index=window_row_ids.index) diff --git a/activitysim/core/tracing.py b/activitysim/core/tracing.py index 409bf978e..4f6a5da36 100644 --- a/activitysim/core/tracing.py +++ b/activitysim/core/tracing.py @@ -28,24 +28,6 @@ logger = logging.getLogger(__name__) -# nano micro milli kilo mega giga tera peta exa zeta yotta -tiers = ['n', 'µ', 'm', '', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] - - -def si_units(x, kind='B', f="{}{:.3g} {}{}"): - tier = 3 - shift = 1024 if kind == 'B' else 1000 - sign = '-' if x < 0 else '' - x = abs(x) - if x > 0: - while x > shift and tier < len(tiers): - x /= shift - tier += 1 - while x < 1 and tier >= 0: - x *= shift - tier -= 1 - return f.format(sign, x, tiers[tier], kind) - def extend_trace_label(trace_label, extension): if trace_label: @@ -144,6 +126,7 @@ def delete_trace_files(): Nothing """ delete_output_files(CSV_FILE_TYPE, subdir='trace') + delete_output_files(CSV_FILE_TYPE, subdir='log') active_log_files = [h.baseFilename for h in logger.root.handlers if isinstance(h, logging.FileHandler)] @@ -321,10 +304,10 @@ def register_traceable_table(table_name, df): traceable_table_ids[table_name] = prior_traced_ids + new_traced_ids inject.add_injectable('traceable_table_ids', traceable_table_ids) - logger.info("register %s: added %s new ids to %s existing trace ids" % - (table_name, len(new_traced_ids), len(prior_traced_ids))) - logger.info("register %s: tracing new ids %s in %s" % - (table_name, new_traced_ids, table_name)) + logger.debug("register %s: added %s new ids to %s existing trace ids" % + (table_name, len(new_traced_ids), len(prior_traced_ids))) + logger.debug("register %s: tracing new ids %s in %s" % + (table_name, new_traced_ids, table_name)) def write_df_csv(df, file_path, index_label=None, columns=None, column_labels=None, transpose=True): diff --git a/activitysim/core/util.py b/activitysim/core/util.py index efe412b10..6bed9c311 100644 --- a/activitysim/core/util.py +++ b/activitysim/core/util.py @@ -3,6 +3,7 @@ from builtins import zip import logging +import os from operator import itemgetter @@ -14,14 +15,56 @@ logger = logging.getLogger(__name__) +def si_units(x, kind='B', digits=3, shift=1000): + + # nano micro milli kilo mega giga tera peta exa zeta yotta + tiers = ['n', 'µ', 'm', '', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] + + tier = 3 + sign = '-' if x < 0 else '' + x = abs(x) + if x > 0: + while x > shift and tier < len(tiers): + x /= shift + tier += 1 + while x < 1 and tier >= 0: + x *= shift + tier -= 1 + return f"{sign}{round(x,digits)} {tiers[tier]}{kind}" + + def GB(bytes): - # symbols = ('', 'K', 'M', 'G', 'T') - symbols = ('', ' KB', ' MB', ' GB', ' TB') - fmt = "%.1f%s" - for i, s in enumerate(symbols): - units = 1 << i * 10 - if bytes < units * 1024: - return fmt % (bytes / units, s) + return si_units(bytes, kind='B', digits=1) + + +def SEC(seconds): + return si_units(seconds, kind='s', digits=2) + + +def INT(x): + # format int as camel case (e.g. 1000000 vecomes '1_000_000') + negative = x < 0 + x = abs(int(x)) + result = '' + while x >= 1000: + x, r = divmod(x, 1000) + result = "_%03d%s" % (r, result) + result = "%d%s" % (x, result) + + return f"{'-' if negative else ''}{result}" + + +def delete_files(file_list, trace_label): + # delete files in file_list + + file_list = [file_list] if isinstance(file_list, str) else file_list + for file_path in file_list: + try: + if os.path.isfile(file_path): + logger.debug(f"{trace_label} deleting {file_path}") + os.unlink(file_path) + except Exception as e: + logger.warning(f"{trace_label} exception (e) trying to delete {file_path}") def df_size(df): diff --git a/activitysim/examples/example_arc/configs/network_los.yaml b/activitysim/examples/example_arc/configs/network_los.yaml index ac0060898..6c851bbbe 100644 --- a/activitysim/examples/example_arc/configs/network_los.yaml +++ b/activitysim/examples/example_arc/configs/network_los.yaml @@ -3,9 +3,6 @@ read_skim_cache: False # write memmapped cached skims to output directory after reading from omx, for use in subsequent runs write_skim_cache: False -#alternate dir to read/write skim cache (defaults to output_dir) -#cache_dir: data/cache - zone_system: 1 # glob 'skims*.omx' will match one or more files: skims.omx, skims1.omx, skims2.omx... diff --git a/activitysim/examples/example_arc/configs/settings.yaml b/activitysim/examples/example_arc/configs/settings.yaml index 905946c1a..3ba06e58c 100644 --- a/activitysim/examples/example_arc/configs/settings.yaml +++ b/activitysim/examples/example_arc/configs/settings.yaml @@ -174,7 +174,6 @@ multiprocess_steps: - name: mp_households begin: school_location num_processes: 5 - #chunk_size: 1000000000 slice: tables: - households diff --git a/activitysim/examples/example_arc/configs/settings_mp.yaml b/activitysim/examples/example_arc/configs/settings_mp.yaml index d4d6e4c0b..f5e658a10 100644 --- a/activitysim/examples/example_arc/configs/settings_mp.yaml +++ b/activitysim/examples/example_arc/configs/settings_mp.yaml @@ -125,7 +125,8 @@ trace_hh_id: 333650 #trace_hh_id: 2 #trace_hh_id: 1643904 -chunk_size: 300000000 +chunk_size: 0 +num_processes: 40 models: - initialize_landuse @@ -174,7 +175,6 @@ multiprocess_steps: begin: initialize_landuse - name: mp_accessibility begin: compute_accessibility - num_processes: 40 slice: tables: - accessibility @@ -182,8 +182,6 @@ multiprocess_steps: except: True - name: mp_households begin: school_location - num_processes: 40 - #chunk_size: 1000000000 slice: tables: - households diff --git a/activitysim/examples/example_manifest.yaml b/activitysim/examples/example_manifest.yaml index 9d0adb06b..0bae5f971 100644 --- a/activitysim/examples/example_manifest.yaml +++ b/activitysim/examples/example_manifest.yaml @@ -335,13 +335,11 @@ description: 3444-TAZ 43589-MAZ example for the PSRC region # activitysim create -e example_psrc_full -d test_example_psrc_full # cd test_example_psrc_full - # rm data/skims.omx - # activitysim run -c configs -o output -d data + # activitysim run -c configs -o output -d data -s settings_mp.yaml # cd .. # activitysim create -e example_psrc_full -d test_example_psrc_full_skip_access # cd test_example_psrc_full_skip_access - # rm data/skims.omx - # activitysim run -c configs_skip_accessibility -c configs -o output -d data + # activitysim run -c configs_skip_accessibility -c configs -o output -d data -s settings_mp.yaml # cd .. include: - example_psrc/configs @@ -350,8 +348,8 @@ - example_psrc/data - example_psrc/output - example_psrc/README.MD - - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/psrc_data_full/skims1.omx - data/skims1.omx + - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/psrc_data_full/skims.omx + data/skims.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/psrc_data_full/skims2.omx data/skims2.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/psrc_data_full/skims3.omx @@ -417,8 +415,7 @@ description: 2899 zone full size example for the SEMCOG region # activitysim create -e example_semcog_full -d test_example_semcog_full # cd test_example_semcog_full - # rm data/skims.omx - # python simulation.py -c configs -o output -d data + # python simulation.py -c configs_mp -c configs -o output -d data # cd .. include: - example_semcog/extensions @@ -428,8 +425,8 @@ - example_semcog/output - example_semcog/README.MD - example_semcog/simulation.py - - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims1.omx - data/skims1.omx + - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims.omx + data/skims.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/skims2.omx data/skims2.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/semcog_data_full/households.csv @@ -475,16 +472,15 @@ description: 5922 zone full example for the ARC region # activitysim create -e example_arc_full -d test_example_arc_full # cd test_example_arc_full - # rm data/skims.omx - # activitysim run -c configs -o output -d data + # activitysim run -c configs -o output -d data -s settings_mp.yaml # cd .. include: - example_arc/data - example_arc/configs - example_arc/output - example_arc/README.MD - - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/arc_data_full/skims1.omx - data/skims1.omx + - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/arc_data_full/skims.omx + data/skims.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/arc_data_full/skims2.omx data/skims2.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/arc_data_full/skims3.omx @@ -517,7 +513,6 @@ description: full example for the SANDAG region # activitysim create -e example_sandag_full -d test_example_sandag_full # cd test_example_sandag_full - # rm data/taz_skims.omx # activitysim run -c configs -c configs_3_zone -c example_mtc/configs -d data -o output -s settings_mp.yaml # cd .. include: @@ -528,8 +523,8 @@ - example_sandag/configs_3_zone - example_sandag/configs_skip_accessibility - example_sandag/output - - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/taz_skims1.omx - data/taz_skims1.omx + - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/taz_skims.omx + data/taz_skims.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/taz_skims2.omx data/taz_skims2.omx - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/taz_skims3.omx @@ -549,14 +544,14 @@ - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/taz.csv data/taz.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/maz_to_maz_bike.csv - data/maz_maz_bike.csv + data/maz_to_maz_bike.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/maz_to_maz_walk.csv - data/maz_maz_walk.csv + data/maz_to_maz_walk.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/maz_to_tap_walk.csv - data/maz_tap_walk.csv + data/maz_to_tap_walk.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/maz_to_tap_drive.csv - data/maz_tap_drive.csv + data/maz_to_tap_drive.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/tap.csv data/tap.csv - https://media.githubusercontent.com/media/activitysim/activitysim_resources/master/sandag_data_full/tap_lines.csv - data/tap_lines.csv \ No newline at end of file + data/tap_lines.csv diff --git a/activitysim/examples/example_marin/configs/settings.yaml b/activitysim/examples/example_marin/configs/settings.yaml index 7ea20bf4b..0ed86518a 100755 --- a/activitysim/examples/example_marin/configs/settings.yaml +++ b/activitysim/examples/example_marin/configs/settings.yaml @@ -4,7 +4,6 @@ inherit_settings: True #households_sample_size: 200000 households_sample_size: 500 -#chunk_size: 4000000000 chunk_size: 0 #trace_hh_id: 662398 diff --git a/activitysim/examples/example_marin/configs/settings_mp.yaml b/activitysim/examples/example_marin/configs/settings_mp.yaml index f304f2977..a0e2c01e1 100644 --- a/activitysim/examples/example_marin/configs/settings_mp.yaml +++ b/activitysim/examples/example_marin/configs/settings_mp.yaml @@ -7,12 +7,10 @@ fail_fast: True # - ------------------------- dev config multiprocess: True strict: False -mem_tick: 30 use_shadow_pricing: False households_sample_size: 0 -#chunk_size: 6000000000 -num_processes: 32 +num_processes: 28 # - ------------------------- @@ -58,15 +56,11 @@ multiprocess_steps: begin: initialize_landuse - name: mp_tvpb begin: initialize_tvpb - num_processes: 20 - chunk_size: 2376277344 # num_taps * num_taps * rowsize / desired_num_chunks = 2376277344 slice: tables: - attribute_combinations - name: mp_mode_choice begin: tour_mode_choice_simulate - num_processes: 32 - #chunk_size: 0 slice: tables: - households diff --git a/activitysim/examples/example_mtc/configs/network_los.yaml b/activitysim/examples/example_mtc/configs/network_los.yaml index 9e3094501..eb5ce609f 100644 --- a/activitysim/examples/example_mtc/configs/network_los.yaml +++ b/activitysim/examples/example_mtc/configs/network_los.yaml @@ -3,9 +3,6 @@ read_skim_cache: False # write memmapped cached skims to output directory after reading from omx, for use in subsequent runs write_skim_cache: True -#alternate dir to read/write skim cache (defaults to output_dir) -#cache_dir: data/cache - zone_system: 1 taz_skims: skims.omx diff --git a/activitysim/examples/example_mtc/configs/settings.yaml b/activitysim/examples/example_mtc/configs/settings.yaml index 48a9dec81..563749b39 100644 --- a/activitysim/examples/example_mtc/configs/settings.yaml +++ b/activitysim/examples/example_mtc/configs/settings.yaml @@ -94,8 +94,6 @@ households_sample_size: 100 # simulate all households # households_sample_size: 0 -chunk_size: 0 - # set false to disable variability check in simple_simulate and interaction_simulate check_for_variability: False @@ -110,6 +108,45 @@ use_shadow_pricing: False # (if True, tables will be written if DEST_CHOICE_SAMPLE_TABLE_NAME is specified in individual model settings) want_dest_choice_sample_tables: False +# log interaction simulate/sample expressions that return prohibitive utility values that exclude all alternatives +log_alt_losers: False + +# alternate dir to read/write cache (defaults to output_dir) +# used for skim cache, tvpb, and chunk_log caches +#cache_dir: data/cache + +############## +# +# chunking +# + +# chooser chunk size in gigabytes +# target top memory usage during activitysim run (including shared memory, loaded tables, and transient memory usage) +#chunk_size: 12_000_000_000 +chunk_size: 0 + +# minimum fraction of total chunk_size to reserve for adaptive chunking +min_available_chunk_ratio: 0.05 + +# initial number of chooser rows for first chunk in training mode +# when there is no pre-existing chunk_cache to set initial value +# ordinarily bigger is better as long as it is not so big it causes memory issues (e.g. accessibility with lots of zones) +default_initial_rows_per_chunk: 500 + +# method to calculate memory overhead when chunking is enabled (chunk_size > 0) +chunk_method: hybrid_uss + +# chunk training mode +# training to determine the chunking settings written to a cache file that is re-used for production runs +# training +# production +chunk_training_mode: training + +# whether to preserve or delete subprocess chunk and mem logs when they are consolidated at end of multiprocess run +keep_chunk_logs: True +keep_mem_logs: True + +############## # - tracing @@ -122,8 +159,22 @@ trace_hh_id: 982875 # trace_od: [5, 11] trace_od: + + # to resume after last successful checkpoint, specify resume_after: _ -#resume_after: trip_scheduling +#resume_after: trip_destination +resume_after: + +checkpoints: True +# if checkpoints is False, no intermediate checkpoints will be written before the end of run +# (or if multiprocessing, at the end of each multiprocess_step) +#checkpoints: False +# explicit list of models to checkpoint +#checkpoints: +# - mandatory_tour_scheduling +# - non_mandatory_tour_scheduling +# - trip_mode_choice + models: - initialize_landuse diff --git a/activitysim/examples/example_mtc/configs/tour_mode_choice_annotate_choosers_preprocessor.csv b/activitysim/examples/example_mtc/configs/tour_mode_choice_annotate_choosers_preprocessor.csv index e6c5e2d01..e2ddd18c5 100644 --- a/activitysim/examples/example_mtc/configs/tour_mode_choice_annotate_choosers_preprocessor.csv +++ b/activitysim/examples/example_mtc/configs/tour_mode_choice_annotate_choosers_preprocessor.csv @@ -23,7 +23,7 @@ local,_DF_IS_TOUR,'tour_type' in df.columns ,dest_topology,"reindex(land_use.TOPOLOGY, df[dest_col_name])" ,terminal_time,"reindex(land_use.TERMINAL, df[dest_col_name])" ,dest_density_index,"reindex(land_use.density_index, df[dest_col_name])" -# FIXME no transit subzones for ONE_ZONE version, so all zones short walk to transit,, +# FIXME no transit subzones for ONE_ZONE version so all zones short walk to transit,, ,_origin_distance_to_transit,"reindex(land_use.access_dist_transit, df[orig_col_name]) if 'access_dist_transit' in land_use else shortWalk" ,_destination_distance_to_transit,"reindex(land_use.access_dist_transit, df[dest_col_name]) if 'access_dist_transit' in land_use else shortWalk" ,walk_transit_available,(_origin_distance_to_transit > 0) & (_destination_distance_to_transit > 0) @@ -39,7 +39,7 @@ local,_DF_IS_TOUR,'tour_type' in df.columns ,origin_zone_taxi_wait_time_sd,"origin_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" ,dest_zone_taxi_wait_time_mean,"dest_density.map({k: v for k, v in Taxi_waitTime_mean.items()})" ,dest_zone_taxi_wait_time_sd,"dest_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" -# ,, Note that the mean and standard deviation are not the values for the distribution itself, but of the underlying normal distribution it is derived from +# ,, Note that the mean and standard deviation are not the values for the distribution itself but of the underlying normal distribution it is derived from ,origTaxiWaitTime,"rng.lognormal_for_df(df, mu=origin_zone_taxi_wait_time_mean, sigma=origin_zone_taxi_wait_time_sd, broadcast=True, scale=True).clip(min_waitTime, max_waitTime)" ,destTaxiWaitTime,"rng.lognormal_for_df(df, mu=dest_zone_taxi_wait_time_mean, sigma=dest_zone_taxi_wait_time_sd, broadcast=True, scale=True).clip(min_waitTime, max_waitTime)" ,origin_zone_singleTNC_wait_time_mean,"origin_density.map({k: v for k, v in TNC_single_waitTime_mean.items()})" diff --git a/activitysim/examples/example_mtc/configs/tour_scheduling_work.csv b/activitysim/examples/example_mtc/configs/tour_scheduling_work.csv index 6d986c006..d80fc39b3 100644 --- a/activitysim/examples/example_mtc/configs/tour_scheduling_work.csv +++ b/activitysim/examples/example_mtc/configs/tour_scheduling_work.csv @@ -68,72 +68,3 @@ util_duration_constants_10_hours,Duration Constants -- 10 hours,duration == 10,c util_duration_constants_11_hours,Duration Constants -- 11 hours,duration == 11,coef_duration_constants_11_hours util_duration_constants_12_to_13_hours,Duration Constants -- 12 to 13 hours,(duration > 11) & (duration < 14),coef_duration_constants_12_to_13_hours util_duration_constants_14_to_18_hours,Duration Constants -- 14 to 18 hours,(duration > 13) & (duration < 19),coef_duration_constants_14_to_18_hours - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/activitysim/examples/example_mtc/configs_mp/settings.yaml b/activitysim/examples/example_mtc/configs_mp/settings.yaml index aabdab137..ec6bf3d8b 100644 --- a/activitysim/examples/example_mtc/configs_mp/settings.yaml +++ b/activitysim/examples/example_mtc/configs_mp/settings.yaml @@ -7,23 +7,21 @@ fail_fast: True # - ------------------------- production config #multiprocess: True #strict: False -#mem_tick: 0 #use_shadow_pricing: True # - full sample - 2875192 households on 64 processor 432 GiB RAM #households_sample_size: 0 -chunk_size: 80000000000 +#chunk_size: 400_000_000_000 #num_processes: 60 # - ------------------------- dev config multiprocess: True strict: False -mem_tick: 30 use_shadow_pricing: False -# households_sample_size: 2000 -#chunk_size: 0 +households_sample_size: 0 +chunk_size: 0 num_processes: 2 # - ------------------------- @@ -84,7 +82,6 @@ multiprocess_steps: begin: initialize_landuse - name: mp_accessibility begin: compute_accessibility - num_processes: 2 slice: tables: - accessibility diff --git a/activitysim/examples/example_mtc/notebooks/adding_tncs.ipynb b/activitysim/examples/example_mtc/notebooks/adding_tncs.ipynb index 999877a7b..ff66977aa 100644 --- a/activitysim/examples/example_mtc/notebooks/adding_tncs.ipynb +++ b/activitysim/examples/example_mtc/notebooks/adding_tncs.ipynb @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -48,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -94,15 +94,15 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "COEFFICIENTS: tour_mode_choice_coeffs.csv\n", - "COEFFICIENT_TEMPLATE: tour_mode_choice_coeffs_template.csv\n", + "COEFFICIENTS: tour_mode_choice_coefficients.csv\n", + "COEFFICIENT_TEMPLATE: tour_mode_choice_coefficients_template.csv\n", "CONSTANTS:\n", " TNC_shared_IVTFactor: 1.5\n", " TNC_shared_baseFare: 2.2\n", @@ -176,6 +176,7 @@ " maxCbdAreaTypeThresh: 2\n", " max_waitTime: 50\n", " min_waitTime: 0\n", + " ridehail_wait_time_multiplier: 1.5\n", " shortWalk: 0.333\n", " short_i_wait_multiplier: 2\n", " upperAM: 10\n", @@ -293,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -366,10 +367,10 @@ " NaN\n", " \n", " \n", - " 256\n", + " 255\n", " util_Taxi_Wait_time\n", " Taxi - Wait time\n", - " @1.5 * df.totalWaitTaxi\n", + " @ridehail_wait_time_multiplier * df.totalWaitTaxi\n", " NaN\n", " NaN\n", " NaN\n", @@ -390,7 +391,7 @@ " NaN\n", " \n", " \n", - " 257\n", + " 256\n", " util_Taxi_Tolls\n", " Taxi - Tolls\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -414,7 +415,7 @@ " NaN\n", " \n", " \n", - " 258\n", + " 257\n", " util_Taxi_Bridge_toll\n", " Taxi - Bridge toll\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -438,7 +439,7 @@ " NaN\n", " \n", " \n", - " 259\n", + " 258\n", " util_Taxi_Fare\n", " Taxi - Fare\n", " @ivt_cost_multiplier * df.ivot * (Taxi_baseFar...\n", @@ -462,7 +463,7 @@ " NaN\n", " \n", " \n", - " 261\n", + " 260\n", " util_TNC_Single_In_vehicle_time\n", " TNC Single - In-vehicle time\n", " @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2...\n", @@ -486,10 +487,10 @@ " NaN\n", " \n", " \n", - " 262\n", + " 261\n", " util_TNC_Single_Wait_time\n", " TNC Single - Wait time\n", - " @1.5 * df.totalWaitSingleTNC\n", + " @ridehail_wait_time_multiplier * df.totalWaitS...\n", " NaN\n", " NaN\n", " NaN\n", @@ -510,7 +511,7 @@ " NaN\n", " \n", " \n", - " 263\n", + " 262\n", " util_TNC_Single_Tolls\n", " TNC Single - Tolls\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -534,7 +535,7 @@ " NaN\n", " \n", " \n", - " 264\n", + " 263\n", " util_TNC_Single_Bridge_toll\n", " TNC Single - Bridge toll\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -558,7 +559,7 @@ " NaN\n", " \n", " \n", - " 265\n", + " 264\n", " util_TNC_Single_Cost\n", " TNC Single - Cost\n", " @ivt_cost_multiplier * df.ivot * np.maximum(TN...\n", @@ -582,7 +583,7 @@ " NaN\n", " \n", " \n", - " 267\n", + " 266\n", " util_TNC_Shared_In_vehicle_time\n", " TNC Shared - In-vehicle time\n", " @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2...\n", @@ -606,10 +607,10 @@ " coef_ivt\n", " \n", " \n", - " 269\n", + " 267\n", " util_TNC_Shared_Wait_time\n", " TNC Shared - Wait time\n", - " @1.5 * df.totalWaitSharedTNC\n", + " @ridehail_wait_time_multiplier * df.totalWaitS...\n", " NaN\n", " NaN\n", " NaN\n", @@ -630,7 +631,7 @@ " coef_ivt\n", " \n", " \n", - " 270\n", + " 268\n", " util_TNC_Shared_Tolls\n", " TNC Shared - Tolls\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -654,7 +655,7 @@ " coef_ivt\n", " \n", " \n", - " 271\n", + " 269\n", " util_TNC_Shared_Bridge_toll\n", " TNC Shared - Bridge toll\n", " @ivt_cost_multiplier * df.ivot * (odt_skims['H...\n", @@ -678,7 +679,7 @@ " coef_ivt\n", " \n", " \n", - " 272\n", + " 270\n", " util_TNC_Shared_Cost\n", " TNC Shared - Cost\n", " @ivt_cost_multiplier * df.ivot * np.maximum(TN...\n", @@ -702,7 +703,7 @@ " coef_ivt\n", " \n", " \n", - " 292\n", + " 290\n", " util_Taxi_Zero_auto\n", " Taxi - Zero auto\n", " @(df.is_indiv & (df.auto_ownership == 0))\n", @@ -726,7 +727,7 @@ " NaN\n", " \n", " \n", - " 293\n", + " 291\n", " util_Taxi_Auto_deficient\n", " Taxi - Auto deficient\n", " @(df.is_indiv & (df.auto_ownership < df.num_wo...\n", @@ -750,7 +751,7 @@ " NaN\n", " \n", " \n", - " 294\n", + " 292\n", " util_Taxi_Auto_sufficient\n", " Taxi - Auto sufficient\n", " @(df.is_indiv & (df.auto_ownership >= df.num_w...\n", @@ -774,7 +775,7 @@ " NaN\n", " \n", " \n", - " 295\n", + " 293\n", " util_TNC_Single_Zero_auto\n", " TNC Single - Zero auto\n", " @(df.is_indiv & (df.auto_ownership == 0))\n", @@ -798,7 +799,7 @@ " NaN\n", " \n", " \n", - " 296\n", + " 294\n", " util_TNC_Single_Auto_deficient\n", " TNC Single - Auto deficient\n", " @(df.is_indiv & (df.auto_ownership < df.num_wo...\n", @@ -822,7 +823,7 @@ " NaN\n", " \n", " \n", - " 297\n", + " 295\n", " util_TNC_Single_Auto_sufficient\n", " TNC Single - Auto sufficient\n", " @(df.is_indiv & (df.auto_ownership >= df.num_w...\n", @@ -846,7 +847,7 @@ " NaN\n", " \n", " \n", - " 298\n", + " 296\n", " util_TNC_Shared_Zero_auto\n", " TNC Shared - Zero auto\n", " @(df.is_indiv & (df.auto_ownership == 0))\n", @@ -870,7 +871,7 @@ " tnc_shared_ASC_no_auto\n", " \n", " \n", - " 299\n", + " 297\n", " util_TNC_Shared_Auto_deficient\n", " TNC Shared - Auto deficient\n", " @(df.is_indiv & (df.auto_ownership < df.num_wo...\n", @@ -894,7 +895,7 @@ " tnc_shared_ASC_auto_deficient\n", " \n", " \n", - " 300\n", + " 298\n", " util_TNC_Shared_Auto_sufficient\n", " TNC Shared - Auto sufficient\n", " @(df.is_indiv & (df.auto_ownership >= df.num_w...\n", @@ -918,7 +919,7 @@ " tnc_shared_ASC_auto_sufficient\n", " \n", " \n", - " 320\n", + " 318\n", " util_Joint_Taxi_Zero_auto\n", " Joint - Taxi - Zero auto\n", " @(df.is_joint & (df.auto_ownership == 0))\n", @@ -942,7 +943,7 @@ " NaN\n", " \n", " \n", - " 321\n", + " 319\n", " util_Joint_Taxi_Auto_deficient\n", " Joint - Taxi - Auto deficient\n", " @(df.is_joint & (df.auto_ownership < df.num_wo...\n", @@ -966,7 +967,7 @@ " NaN\n", " \n", " \n", - " 322\n", + " 320\n", " util_Joint_Taxi_Auto_sufficient\n", " Joint - Taxi - Auto sufficient\n", " @(df.is_joint & (df.auto_ownership >= df.num_w...\n", @@ -990,7 +991,7 @@ " NaN\n", " \n", " \n", - " 323\n", + " 321\n", " util_Joint_TNC_Single_Zero_auto\n", " Joint - TNC Single - Zero auto\n", " @(df.is_joint & (df.auto_ownership == 0))\n", @@ -1014,7 +1015,7 @@ " NaN\n", " \n", " \n", - " 324\n", + " 322\n", " util_Joint_TNC_Single_Auto_deficient\n", " Joint - TNC Single - Auto deficient\n", " @(df.is_joint & (df.auto_ownership < df.num_wo...\n", @@ -1038,7 +1039,7 @@ " NaN\n", " \n", " \n", - " 325\n", + " 323\n", " util_Joint_TNC_Single_Auto_sufficient\n", " Joint - TNC Single - Auto sufficient\n", " @(df.is_joint & (df.auto_ownership >= df.num_w...\n", @@ -1062,7 +1063,7 @@ " NaN\n", " \n", " \n", - " 326\n", + " 324\n", " util_Joint_TNC_Shared_Zero_auto\n", " Joint - TNC Shared - Zero auto\n", " @(df.is_joint & (df.auto_ownership == 0))\n", @@ -1086,7 +1087,7 @@ " joint_tnc_shared_ASC_no_auto\n", " \n", " \n", - " 327\n", + " 325\n", " util_Joint_TNC_Shared_Auto_deficient\n", " Joint - TNC Shared - Auto deficient\n", " @(df.is_joint & (df.auto_ownership < df.num_wo...\n", @@ -1110,7 +1111,7 @@ " joint_tnc_shared_ASC_auto_deficient\n", " \n", " \n", - " 328\n", + " 326\n", " util_Joint_TNC_Shared_Auto_sufficient\n", " Joint - TNC Shared - Auto sufficient\n", " @(df.is_joint & (df.auto_ownership >= df.num_w...\n", @@ -1141,125 +1142,127 @@ "text/plain": [ " Label \\\n", "254 util_Taxi_In_vehicle_time \n", - "256 util_Taxi_Wait_time \n", - "257 util_Taxi_Tolls \n", - "258 util_Taxi_Bridge_toll \n", - "259 util_Taxi_Fare \n", - "261 util_TNC_Single_In_vehicle_time \n", - "262 util_TNC_Single_Wait_time \n", - "263 util_TNC_Single_Tolls \n", - "264 util_TNC_Single_Bridge_toll \n", - "265 util_TNC_Single_Cost \n", - "267 util_TNC_Shared_In_vehicle_time \n", - "269 util_TNC_Shared_Wait_time \n", - "270 util_TNC_Shared_Tolls \n", - "271 util_TNC_Shared_Bridge_toll \n", - "272 util_TNC_Shared_Cost \n", - "292 util_Taxi_Zero_auto \n", - "293 util_Taxi_Auto_deficient \n", - "294 util_Taxi_Auto_sufficient \n", - "295 util_TNC_Single_Zero_auto \n", - "296 util_TNC_Single_Auto_deficient \n", - "297 util_TNC_Single_Auto_sufficient \n", - "298 util_TNC_Shared_Zero_auto \n", - "299 util_TNC_Shared_Auto_deficient \n", - "300 util_TNC_Shared_Auto_sufficient \n", - "320 util_Joint_Taxi_Zero_auto \n", - "321 util_Joint_Taxi_Auto_deficient \n", - "322 util_Joint_Taxi_Auto_sufficient \n", - "323 util_Joint_TNC_Single_Zero_auto \n", - "324 util_Joint_TNC_Single_Auto_deficient \n", - "325 util_Joint_TNC_Single_Auto_sufficient \n", - "326 util_Joint_TNC_Shared_Zero_auto \n", - "327 util_Joint_TNC_Shared_Auto_deficient \n", - "328 util_Joint_TNC_Shared_Auto_sufficient \n", + "255 util_Taxi_Wait_time \n", + "256 util_Taxi_Tolls \n", + "257 util_Taxi_Bridge_toll \n", + "258 util_Taxi_Fare \n", + "260 util_TNC_Single_In_vehicle_time \n", + "261 util_TNC_Single_Wait_time \n", + "262 util_TNC_Single_Tolls \n", + "263 util_TNC_Single_Bridge_toll \n", + "264 util_TNC_Single_Cost \n", + "266 util_TNC_Shared_In_vehicle_time \n", + "267 util_TNC_Shared_Wait_time \n", + "268 util_TNC_Shared_Tolls \n", + "269 util_TNC_Shared_Bridge_toll \n", + "270 util_TNC_Shared_Cost \n", + "290 util_Taxi_Zero_auto \n", + "291 util_Taxi_Auto_deficient \n", + "292 util_Taxi_Auto_sufficient \n", + "293 util_TNC_Single_Zero_auto \n", + "294 util_TNC_Single_Auto_deficient \n", + "295 util_TNC_Single_Auto_sufficient \n", + "296 util_TNC_Shared_Zero_auto \n", + "297 util_TNC_Shared_Auto_deficient \n", + "298 util_TNC_Shared_Auto_sufficient \n", + "318 util_Joint_Taxi_Zero_auto \n", + "319 util_Joint_Taxi_Auto_deficient \n", + "320 util_Joint_Taxi_Auto_sufficient \n", + "321 util_Joint_TNC_Single_Zero_auto \n", + "322 util_Joint_TNC_Single_Auto_deficient \n", + "323 util_Joint_TNC_Single_Auto_sufficient \n", + "324 util_Joint_TNC_Shared_Zero_auto \n", + "325 util_Joint_TNC_Shared_Auto_deficient \n", + "326 util_Joint_TNC_Shared_Auto_sufficient \n", "\n", " Description \\\n", "254 Taxi - In-vehicle time \n", - "256 Taxi - Wait time \n", - "257 Taxi - Tolls \n", - "258 Taxi - Bridge toll \n", - "259 Taxi - Fare \n", - "261 TNC Single - In-vehicle time \n", - "262 TNC Single - Wait time \n", - "263 TNC Single - Tolls \n", - "264 TNC Single - Bridge toll \n", - "265 TNC Single - Cost \n", - "267 TNC Shared - In-vehicle time \n", - "269 TNC Shared - Wait time \n", - "270 TNC Shared - Tolls \n", - "271 TNC Shared - Bridge toll \n", - "272 TNC Shared - Cost \n", - "292 Taxi - Zero auto \n", - "293 Taxi - Auto deficient \n", - "294 Taxi - Auto sufficient \n", - "295 TNC Single - Zero auto \n", - "296 TNC Single - Auto deficient \n", - "297 TNC Single - Auto sufficient \n", - "298 TNC Shared - Zero auto \n", - "299 TNC Shared - Auto deficient \n", - "300 TNC Shared - Auto sufficient \n", - "320 Joint - Taxi - Zero auto \n", - "321 Joint - Taxi - Auto deficient \n", - "322 Joint - Taxi - Auto sufficient \n", - "323 Joint - TNC Single - Zero auto \n", - "324 Joint - TNC Single - Auto deficient \n", - "325 Joint - TNC Single - Auto sufficient \n", - "326 Joint - TNC Shared - Zero auto \n", - "327 Joint - TNC Shared - Auto deficient \n", - "328 Joint - TNC Shared - Auto sufficient \n", + "255 Taxi - Wait time \n", + "256 Taxi - Tolls \n", + "257 Taxi - Bridge toll \n", + "258 Taxi - Fare \n", + "260 TNC Single - In-vehicle time \n", + "261 TNC Single - Wait time \n", + "262 TNC Single - Tolls \n", + "263 TNC Single - Bridge toll \n", + "264 TNC Single - Cost \n", + "266 TNC Shared - In-vehicle time \n", + "267 TNC Shared - Wait time \n", + "268 TNC Shared - Tolls \n", + "269 TNC Shared - Bridge toll \n", + "270 TNC Shared - Cost \n", + "290 Taxi - Zero auto \n", + "291 Taxi - Auto deficient \n", + "292 Taxi - Auto sufficient \n", + "293 TNC Single - Zero auto \n", + "294 TNC Single - Auto deficient \n", + "295 TNC Single - Auto sufficient \n", + "296 TNC Shared - Zero auto \n", + "297 TNC Shared - Auto deficient \n", + "298 TNC Shared - Auto sufficient \n", + "318 Joint - Taxi - Zero auto \n", + "319 Joint - Taxi - Auto deficient \n", + "320 Joint - Taxi - Auto sufficient \n", + "321 Joint - TNC Single - Zero auto \n", + "322 Joint - TNC Single - Auto deficient \n", + "323 Joint - TNC Single - Auto sufficient \n", + "324 Joint - TNC Shared - Zero auto \n", + "325 Joint - TNC Shared - Auto deficient \n", + "326 Joint - TNC Shared - Auto sufficient \n", "\n", " Expression DRIVEALONEFREE \\\n", "254 @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2... NaN \n", - "256 @1.5 * df.totalWaitTaxi NaN \n", + "255 @ridehail_wait_time_multiplier * df.totalWaitTaxi NaN \n", + "256 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", "257 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "258 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "259 @ivt_cost_multiplier * df.ivot * (Taxi_baseFar... NaN \n", - "261 @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2... NaN \n", - "262 @1.5 * df.totalWaitSingleTNC NaN \n", + "258 @ivt_cost_multiplier * df.ivot * (Taxi_baseFar... NaN \n", + "260 @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2... NaN \n", + "261 @ridehail_wait_time_multiplier * df.totalWaitS... NaN \n", + "262 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", "263 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "264 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "265 @ivt_cost_multiplier * df.ivot * np.maximum(TN... NaN \n", - "267 @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2... NaN \n", - "269 @1.5 * df.totalWaitSharedTNC NaN \n", - "270 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "271 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", - "272 @ivt_cost_multiplier * df.ivot * np.maximum(TN... NaN \n", - "292 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", - "293 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", - "294 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", - "295 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", - "296 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", - "297 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", - "298 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", - "299 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", - "300 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", - "320 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", - "321 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", - "322 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", - "323 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", - "324 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", - "325 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", - "326 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", - "327 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", - "328 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", + "264 @ivt_cost_multiplier * df.ivot * np.maximum(TN... NaN \n", + "266 @(odt_skims['HOV2TOLL_TIME'] + dot_skims['HOV2... NaN \n", + "267 @ridehail_wait_time_multiplier * df.totalWaitS... NaN \n", + "268 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", + "269 @ivt_cost_multiplier * df.ivot * (odt_skims['H... NaN \n", + "270 @ivt_cost_multiplier * df.ivot * np.maximum(TN... NaN \n", + "290 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", + "291 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", + "292 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", + "293 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", + "294 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", + "295 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", + "296 @(df.is_indiv & (df.auto_ownership == 0)) NaN \n", + "297 @(df.is_indiv & (df.auto_ownership < df.num_wo... NaN \n", + "298 @(df.is_indiv & (df.auto_ownership >= df.num_w... NaN \n", + "318 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", + "319 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", + "320 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", + "321 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", + "322 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", + "323 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", + "324 @(df.is_joint & (df.auto_ownership == 0)) NaN \n", + "325 @(df.is_joint & (df.auto_ownership < df.num_wo... NaN \n", + "326 @(df.is_joint & (df.auto_ownership >= df.num_w... NaN \n", "\n", " DRIVEALONEPAY SHARED2FREE SHARED2PAY SHARED3FREE SHARED3PAY WALK ... \\\n", "254 NaN NaN NaN NaN NaN NaN ... \n", + "255 NaN NaN NaN NaN NaN NaN ... \n", "256 NaN NaN NaN NaN NaN NaN ... \n", "257 NaN NaN NaN NaN NaN NaN ... \n", "258 NaN NaN NaN NaN NaN NaN ... \n", - "259 NaN NaN NaN NaN NaN NaN ... \n", + "260 NaN NaN NaN NaN NaN NaN ... \n", "261 NaN NaN NaN NaN NaN NaN ... \n", "262 NaN NaN NaN NaN NaN NaN ... \n", "263 NaN NaN NaN NaN NaN NaN ... \n", "264 NaN NaN NaN NaN NaN NaN ... \n", - "265 NaN NaN NaN NaN NaN NaN ... \n", + "266 NaN NaN NaN NaN NaN NaN ... \n", "267 NaN NaN NaN NaN NaN NaN ... \n", + "268 NaN NaN NaN NaN NaN NaN ... \n", "269 NaN NaN NaN NaN NaN NaN ... \n", "270 NaN NaN NaN NaN NaN NaN ... \n", - "271 NaN NaN NaN NaN NaN NaN ... \n", - "272 NaN NaN NaN NaN NaN NaN ... \n", + "290 NaN NaN NaN NaN NaN NaN ... \n", + "291 NaN NaN NaN NaN NaN NaN ... \n", "292 NaN NaN NaN NaN NaN NaN ... \n", "293 NaN NaN NaN NaN NaN NaN ... \n", "294 NaN NaN NaN NaN NaN NaN ... \n", @@ -1267,8 +1270,8 @@ "296 NaN NaN NaN NaN NaN NaN ... \n", "297 NaN NaN NaN NaN NaN NaN ... \n", "298 NaN NaN NaN NaN NaN NaN ... \n", - "299 NaN NaN NaN NaN NaN NaN ... \n", - "300 NaN NaN NaN NaN NaN NaN ... \n", + "318 NaN NaN NaN NaN NaN NaN ... \n", + "319 NaN NaN NaN NaN NaN NaN ... \n", "320 NaN NaN NaN NaN NaN NaN ... \n", "321 NaN NaN NaN NaN NaN NaN ... \n", "322 NaN NaN NaN NaN NaN NaN ... \n", @@ -1276,25 +1279,25 @@ "324 NaN NaN NaN NaN NaN NaN ... \n", "325 NaN NaN NaN NaN NaN NaN ... \n", "326 NaN NaN NaN NaN NaN NaN ... \n", - "327 NaN NaN NaN NaN NaN NaN ... \n", - "328 NaN NaN NaN NaN NaN NaN ... \n", "\n", " WALK_HVY WALK_COM DRIVE_LOC DRIVE_LRF DRIVE_EXP DRIVE_HVY DRIVE_COM \\\n", "254 NaN NaN NaN NaN NaN NaN NaN \n", + "255 NaN NaN NaN NaN NaN NaN NaN \n", "256 NaN NaN NaN NaN NaN NaN NaN \n", "257 NaN NaN NaN NaN NaN NaN NaN \n", "258 NaN NaN NaN NaN NaN NaN NaN \n", - "259 NaN NaN NaN NaN NaN NaN NaN \n", + "260 NaN NaN NaN NaN NaN NaN NaN \n", "261 NaN NaN NaN NaN NaN NaN NaN \n", "262 NaN NaN NaN NaN NaN NaN NaN \n", "263 NaN NaN NaN NaN NaN NaN NaN \n", "264 NaN NaN NaN NaN NaN NaN NaN \n", - "265 NaN NaN NaN NaN NaN NaN NaN \n", + "266 NaN NaN NaN NaN NaN NaN NaN \n", "267 NaN NaN NaN NaN NaN NaN NaN \n", + "268 NaN NaN NaN NaN NaN NaN NaN \n", "269 NaN NaN NaN NaN NaN NaN NaN \n", "270 NaN NaN NaN NaN NaN NaN NaN \n", - "271 NaN NaN NaN NaN NaN NaN NaN \n", - "272 NaN NaN NaN NaN NaN NaN NaN \n", + "290 NaN NaN NaN NaN NaN NaN NaN \n", + "291 NaN NaN NaN NaN NaN NaN NaN \n", "292 NaN NaN NaN NaN NaN NaN NaN \n", "293 NaN NaN NaN NaN NaN NaN NaN \n", "294 NaN NaN NaN NaN NaN NaN NaN \n", @@ -1302,8 +1305,8 @@ "296 NaN NaN NaN NaN NaN NaN NaN \n", "297 NaN NaN NaN NaN NaN NaN NaN \n", "298 NaN NaN NaN NaN NaN NaN NaN \n", - "299 NaN NaN NaN NaN NaN NaN NaN \n", - "300 NaN NaN NaN NaN NaN NaN NaN \n", + "318 NaN NaN NaN NaN NaN NaN NaN \n", + "319 NaN NaN NaN NaN NaN NaN NaN \n", "320 NaN NaN NaN NaN NaN NaN NaN \n", "321 NaN NaN NaN NaN NaN NaN NaN \n", "322 NaN NaN NaN NaN NaN NaN NaN \n", @@ -1311,83 +1314,81 @@ "324 NaN NaN NaN NaN NaN NaN NaN \n", "325 NaN NaN NaN NaN NaN NaN NaN \n", "326 NaN NaN NaN NaN NaN NaN NaN \n", - "327 NaN NaN NaN NaN NaN NaN NaN \n", - "328 NaN NaN NaN NaN NaN NaN NaN \n", "\n", " TAXI TNC_SINGLE \\\n", "254 coef_ivt NaN \n", + "255 coef_ivt NaN \n", "256 coef_ivt NaN \n", "257 coef_ivt NaN \n", "258 coef_ivt NaN \n", - "259 coef_ivt NaN \n", + "260 NaN coef_ivt \n", "261 NaN coef_ivt \n", "262 NaN coef_ivt \n", "263 NaN coef_ivt \n", "264 NaN coef_ivt \n", - "265 NaN coef_ivt \n", + "266 NaN NaN \n", "267 NaN NaN \n", + "268 NaN NaN \n", "269 NaN NaN \n", "270 NaN NaN \n", - "271 NaN NaN \n", - "272 NaN NaN \n", - "292 taxi_ASC_no_auto NaN \n", - "293 taxi_ASC_auto_deficient NaN \n", - "294 taxi_ASC_auto_sufficient NaN \n", - "295 NaN tnc_single_ASC_no_auto \n", - "296 NaN tnc_single_ASC_auto_deficient \n", - "297 NaN tnc_single_ASC_auto_sufficient \n", + "290 taxi_ASC_no_auto NaN \n", + "291 taxi_ASC_auto_deficient NaN \n", + "292 taxi_ASC_auto_sufficient NaN \n", + "293 NaN tnc_single_ASC_no_auto \n", + "294 NaN tnc_single_ASC_auto_deficient \n", + "295 NaN tnc_single_ASC_auto_sufficient \n", + "296 NaN NaN \n", + "297 NaN NaN \n", "298 NaN NaN \n", - "299 NaN NaN \n", - "300 NaN NaN \n", - "320 joint_taxi_ASC_no_auto NaN \n", - "321 joint_taxi_ASC_auto_deficient NaN \n", - "322 joint_taxi_ASC_auto_sufficient NaN \n", - "323 NaN joint_tnc_single_ASC_no_auto \n", - "324 NaN joint_tnc_single_ASC_auto_deficient \n", - "325 NaN joint_tnc_single_ASC_auto_sufficient \n", + "318 joint_taxi_ASC_no_auto NaN \n", + "319 joint_taxi_ASC_auto_deficient NaN \n", + "320 joint_taxi_ASC_auto_sufficient NaN \n", + "321 NaN joint_tnc_single_ASC_no_auto \n", + "322 NaN joint_tnc_single_ASC_auto_deficient \n", + "323 NaN joint_tnc_single_ASC_auto_sufficient \n", + "324 NaN NaN \n", + "325 NaN NaN \n", "326 NaN NaN \n", - "327 NaN NaN \n", - "328 NaN NaN \n", "\n", " TNC_SHARED \n", "254 NaN \n", + "255 NaN \n", "256 NaN \n", "257 NaN \n", "258 NaN \n", - "259 NaN \n", + "260 NaN \n", "261 NaN \n", "262 NaN \n", "263 NaN \n", "264 NaN \n", - "265 NaN \n", + "266 coef_ivt \n", "267 coef_ivt \n", + "268 coef_ivt \n", "269 coef_ivt \n", "270 coef_ivt \n", - "271 coef_ivt \n", - "272 coef_ivt \n", + "290 NaN \n", + "291 NaN \n", "292 NaN \n", "293 NaN \n", "294 NaN \n", "295 NaN \n", - "296 NaN \n", - "297 NaN \n", - "298 tnc_shared_ASC_no_auto \n", - "299 tnc_shared_ASC_auto_deficient \n", - "300 tnc_shared_ASC_auto_sufficient \n", + "296 tnc_shared_ASC_no_auto \n", + "297 tnc_shared_ASC_auto_deficient \n", + "298 tnc_shared_ASC_auto_sufficient \n", + "318 NaN \n", + "319 NaN \n", "320 NaN \n", "321 NaN \n", "322 NaN \n", "323 NaN \n", - "324 NaN \n", - "325 NaN \n", - "326 joint_tnc_shared_ASC_no_auto \n", - "327 joint_tnc_shared_ASC_auto_deficient \n", - "328 joint_tnc_shared_ASC_auto_sufficient \n", + "324 joint_tnc_shared_ASC_no_auto \n", + "325 joint_tnc_shared_ASC_auto_deficient \n", + "326 joint_tnc_shared_ASC_auto_sufficient \n", "\n", "[33 rows x 24 columns]" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -1411,7 +1412,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -1443,1836 +1444,1842 @@ " \n", " \n", " 0\n", - " coef_nest_root\n", + " coef_one\n", " 1.000000\n", " T\n", " \n", " \n", " 1\n", + " coef_nest_root\n", + " 1.000000\n", + " T\n", + " \n", + " \n", + " 2\n", " coef_nest_AUTO\n", " 0.720000\n", " T\n", " \n", " \n", - " 2\n", + " 3\n", " coef_nest_AUTO_DRIVEALONE\n", " 0.350000\n", " T\n", " \n", " \n", - " 3\n", + " 4\n", " coef_nest_AUTO_SHAREDRIDE2\n", " 0.350000\n", " T\n", " \n", " \n", - " 4\n", + " 5\n", " coef_nest_AUTO_SHAREDRIDE3\n", " 0.350000\n", " T\n", " \n", " \n", - " 5\n", + " 6\n", " coef_nest_NONMOTORIZED\n", " 0.720000\n", " T\n", " \n", " \n", - " 6\n", + " 7\n", " coef_nest_TRANSIT\n", " 0.720000\n", " T\n", " \n", " \n", - " 7\n", + " 8\n", " coef_nest_TRANSIT_WALKACCESS\n", " 0.500000\n", " T\n", " \n", " \n", - " 8\n", + " 9\n", " coef_nest_TRANSIT_DRIVEACCESS\n", " 0.500000\n", " T\n", " \n", " \n", - " 9\n", + " 10\n", " coef_nest_RIDEHAIL\n", " 0.360000\n", " T\n", " \n", " \n", - " 10\n", + " 11\n", " coef_ivt_eatout_escort_othdiscr_othmaint_shopp...\n", " -0.017500\n", " F\n", " \n", " \n", - " 11\n", + " 12\n", " coef_ivt_school_univ\n", " -0.022400\n", " F\n", " \n", " \n", - " 12\n", + " 13\n", " coef_ivt_work\n", " -0.013400\n", " F\n", " \n", " \n", - " 13\n", + " 14\n", " coef_ivt_atwork\n", " -0.018800\n", " F\n", " \n", " \n", - " 14\n", + " 15\n", " coef_topology_walk_multiplier_eatout_escort_ot...\n", " 15.000000\n", " F\n", " \n", " \n", - " 15\n", + " 16\n", " coef_topology_walk_multiplier_atwork\n", " 7.500000\n", " F\n", " \n", " \n", - " 16\n", + " 17\n", " coef_topology_bike_multiplier_eatout_escort_ot...\n", " 20.000000\n", " F\n", " \n", " \n", - " 17\n", + " 18\n", " coef_topology_bike_multiplier_atwork\n", " 10.000000\n", " F\n", " \n", " \n", - " 18\n", + " 19\n", " coef_topology_trn_multiplier_eatout_escort_oth...\n", " 2.200000\n", " F\n", " \n", " \n", - " 19\n", + " 20\n", " coef_topology_trn_multiplier_atwork\n", " 2.000000\n", " F\n", " \n", " \n", - " 20\n", + " 21\n", " coef_age1619_da_multiplier_eatout_escort_othdi...\n", " 0.000000\n", " F\n", " \n", " \n", - " 21\n", + " 22\n", " coef_age1619_da_multiplier_school_univ\n", " -1.381300\n", " F\n", " \n", " \n", - " 22\n", + " 23\n", " coef_age1619_da_multiplier_atwork\n", " 0.003234\n", " F\n", " \n", " \n", - " 23\n", + " 24\n", " coef_age010_trn_multiplier_eatout_escort_othdi...\n", " 0.000000\n", " F\n", " \n", " \n", - " 24\n", + " 25\n", " coef_age010_trn_multiplier_school_univ\n", " -1.554800\n", " F\n", " \n", " \n", - " 25\n", + " 26\n", " coef_age010_trn_multiplier_atwork\n", " 0.000722\n", " F\n", " \n", " \n", - " 26\n", + " 27\n", " coef_age16p_sr_multiplier_eatout_escort_othdis...\n", " -1.366000\n", " F\n", " \n", " \n", - " 27\n", + " 28\n", " coef_age16p_sr_multiplier_school_univ_work_atwork\n", " 0.000000\n", " F\n", " \n", " \n", - " 28\n", + " 29\n", " coef_hhsize1_sr_multiplier_eatout_escort_othdi...\n", " 0.000000\n", " F\n", " \n", " \n", - " 29\n", + " 30\n", " coef_hhsize1_sr_multiplier_work\n", " -0.734588\n", " F\n", " \n", " \n", - " 30\n", + " 31\n", " coef_hhsize2_sr_multiplier_eatout_escort_othdi...\n", " 0.000000\n", " F\n", " \n", " \n", - " 31\n", + " 32\n", " coef_hhsize2_sr_multiplier_school_univ\n", " -0.635900\n", " F\n", " \n", " \n", - " 32\n", + " 33\n", " walk_ASC_no_auto_eatout\n", " 5.125117\n", " F\n", " \n", " \n", - " 33\n", + " 34\n", " walk_ASC_no_auto_escort\n", " 2.801207\n", " F\n", " \n", " \n", - " 34\n", + " 35\n", " walk_ASC_no_auto_othdiscr\n", " 3.266595\n", " F\n", " \n", " \n", - " 35\n", + " 36\n", " walk_ASC_no_auto_othmaint\n", " 1.287299\n", " F\n", " \n", " \n", - " 36\n", + " 37\n", " walk_ASC_no_auto_school\n", " 18.414557\n", " F\n", " \n", " \n", - " 37\n", + " 38\n", " walk_ASC_no_auto_shopping\n", " 2.376877\n", " F\n", " \n", " \n", - " 38\n", + " 39\n", " walk_ASC_no_auto_social\n", " 1.868092\n", " F\n", " \n", " \n", - " 39\n", + " 40\n", " walk_ASC_no_auto_univ\n", " 6.408967\n", " F\n", " \n", " \n", - " 40\n", + " 41\n", " walk_ASC_no_auto_work\n", " 5.767216\n", " F\n", " \n", " \n", - " 41\n", + " 42\n", " walk_ASC_no_auto_atwork\n", " 6.669213\n", " F\n", " \n", " \n", - " 42\n", + " 43\n", " walk_ASC_auto_deficient_eatout\n", " 3.274605\n", " F\n", " \n", " \n", - " 43\n", + " 44\n", " walk_ASC_auto_deficient_escort\n", " -0.902047\n", " F\n", " \n", " \n", - " 44\n", + " 45\n", " walk_ASC_auto_deficient_othdiscr\n", - " 2.249408\n", + " 2.249407\n", " F\n", " \n", " \n", - " 45\n", + " 46\n", " walk_ASC_auto_deficient_othmaint\n", " 1.369040\n", " F\n", " \n", " \n", - " 46\n", + " 47\n", " walk_ASC_auto_deficient_school\n", " 3.257362\n", " F\n", " \n", " \n", - " 47\n", + " 48\n", " walk_ASC_auto_deficient_shopping\n", " 2.270173\n", " F\n", " \n", " \n", - " 48\n", + " 49\n", " walk_ASC_auto_deficient_social\n", " 2.870184\n", " F\n", " \n", " \n", - " 49\n", + " 50\n", " walk_ASC_auto_deficient_univ\n", " 4.505910\n", " F\n", " \n", " \n", - " 50\n", + " 51\n", " walk_ASC_auto_deficient_work\n", " 2.401042\n", " F\n", " \n", " \n", - " 51\n", + " 52\n", " walk_ASC_auto_deficient_atwork\n", " 0.925461\n", " F\n", " \n", " \n", - " 52\n", + " 53\n", " walk_ASC_auto_sufficient_eatout\n", " 1.551690\n", " F\n", " \n", " \n", - " 53\n", + " 54\n", " walk_ASC_auto_sufficient_escort\n", " -0.811607\n", " F\n", " \n", " \n", - " 54\n", + " 55\n", " walk_ASC_auto_sufficient_othdiscr\n", " 1.263348\n", " F\n", " \n", " \n", - " 55\n", + " 56\n", " walk_ASC_auto_sufficient_othmaint\n", " 0.799963\n", " F\n", " \n", " \n", - " 56\n", + " 57\n", " walk_ASC_auto_sufficient_school\n", " 0.647686\n", " F\n", " \n", " \n", - " 57\n", + " 58\n", " walk_ASC_auto_sufficient_shopping\n", " 0.731266\n", " F\n", " \n", " \n", - " 58\n", + " 59\n", " walk_ASC_auto_sufficient_social\n", " 1.707219\n", " F\n", " \n", " \n", - " 59\n", + " 60\n", " walk_ASC_auto_sufficient_univ\n", - " 1.060767\n", + " 1.060766\n", " F\n", " \n", " \n", - " 60\n", + " 61\n", " walk_ASC_auto_sufficient_work\n", " 0.053265\n", " F\n", " \n", " \n", - " 61\n", + " 62\n", " walk_ASC_auto_sufficient_atwork\n", " 0.677216\n", " F\n", " \n", " \n", - " 62\n", + " 63\n", " bike_ASC_no_auto_eatout\n", " 0.868071\n", " F\n", " \n", " \n", - " 63\n", + " 64\n", " bike_ASC_no_auto_escort\n", " -0.716212\n", " F\n", " \n", " \n", - " 64\n", + " 65\n", " bike_ASC_no_auto_othdiscr\n", " -0.376423\n", " F\n", " \n", " \n", - " 65\n", + " 66\n", " bike_ASC_no_auto_othmaint\n", " 1.539433\n", " F\n", " \n", " \n", - " 66\n", + " 67\n", " bike_ASC_no_auto_school\n", " 12.098735\n", " F\n", " \n", " \n", - " 67\n", + " 68\n", " bike_ASC_no_auto_shopping\n", " 0.834156\n", " F\n", " \n", " \n", - " 68\n", + " 69\n", " bike_ASC_no_auto_social\n", " 0.020583\n", " F\n", " \n", " \n", - " 69\n", + " 70\n", " bike_ASC_no_auto_univ\n", " 4.294516\n", " F\n", " \n", " \n", - " 70\n", + " 71\n", " bike_ASC_no_auto_work\n", " 3.194009\n", " F\n", " \n", " \n", - " 71\n", + " 72\n", " bike_ASC_no_auto_atwork\n", " -0.907258\n", " F\n", " \n", " \n", - " 72\n", + " 73\n", " bike_ASC_auto_deficient_eatout\n", " -1.569111\n", " F\n", " \n", " \n", - " 73\n", + " 74\n", " bike_ASC_auto_deficient_escort\n", " -4.527928\n", " F\n", " \n", " \n", - " 74\n", + " 75\n", " bike_ASC_auto_deficient_othdiscr\n", " -0.092468\n", " F\n", " \n", " \n", - " 75\n", + " 76\n", " bike_ASC_auto_deficient_othmaint\n", " -1.518465\n", " F\n", " \n", " \n", - " 76\n", + " 77\n", " bike_ASC_auto_deficient_school\n", " -0.528068\n", " F\n", " \n", " \n", - " 77\n", + " 78\n", " bike_ASC_auto_deficient_shopping\n", " -0.875845\n", " F\n", " \n", " \n", - " 78\n", + " 79\n", " bike_ASC_auto_deficient_social\n", " 0.634521\n", " F\n", " \n", " \n", - " 79\n", + " 80\n", " bike_ASC_auto_deficient_univ\n", " -0.669235\n", " F\n", " \n", " \n", - " 80\n", + " 81\n", " bike_ASC_auto_deficient_work\n", " 0.253190\n", " F\n", " \n", " \n", - " 81\n", + " 82\n", " bike_ASC_auto_deficient_atwork\n", " -0.807408\n", " F\n", " \n", " \n", - " 82\n", + " 83\n", " bike_ASC_auto_sufficient_eatout\n", " -1.200347\n", " F\n", " \n", " \n", - " 83\n", + " 84\n", " bike_ASC_auto_sufficient_escort\n", " -5.063108\n", " F\n", " \n", " \n", - " 84\n", + " 85\n", " bike_ASC_auto_sufficient_othdiscr\n", " -1.071460\n", " F\n", " \n", " \n", - " 85\n", + " 86\n", " bike_ASC_auto_sufficient_othmaint\n", " -2.808302\n", " F\n", " \n", " \n", - " 86\n", + " 87\n", " bike_ASC_auto_sufficient_school\n", " -2.113469\n", " F\n", " \n", " \n", - " 87\n", + " 88\n", " bike_ASC_auto_sufficient_shopping\n", " -2.566210\n", " F\n", " \n", " \n", - " 88\n", + " 89\n", " bike_ASC_auto_sufficient_social\n", " -1.368071\n", " F\n", " \n", " \n", - " 89\n", + " 90\n", " bike_ASC_auto_sufficient_univ\n", " -1.939783\n", " F\n", " \n", " \n", - " 90\n", + " 91\n", " bike_ASC_auto_sufficient_work\n", " -1.580023\n", " F\n", " \n", " \n", - " 91\n", + " 92\n", " bike_ASC_auto_sufficient_atwork\n", " 15.720170\n", " F\n", " \n", " \n", - " 92\n", + " 93\n", " sr2_ASC_no_auto_all\n", " 0.000000\n", " F\n", " \n", " \n", - " 93\n", + " 94\n", " sr2_ASC_auto_deficient_eatout\n", " 0.588234\n", " F\n", " \n", " \n", - " 94\n", + " 95\n", " sr2_ASC_auto_deficient_escort\n", " 0.000000\n", " F\n", " \n", " \n", - " 95\n", + " 96\n", " sr2_ASC_auto_deficient_othdiscr\n", " 0.660151\n", " F\n", " \n", " \n", - " 96\n", + " 97\n", " sr2_ASC_auto_deficient_othmaint\n", " 0.262153\n", " F\n", " \n", " \n", - " 97\n", + " 98\n", " sr2_ASC_auto_deficient_school\n", " 0.124744\n", " F\n", " \n", " \n", - " 98\n", + " 99\n", " sr2_ASC_auto_deficient_shopping\n", " 0.244098\n", " F\n", " \n", " \n", - " 99\n", + " 100\n", " sr2_ASC_auto_deficient_social\n", " 1.855853\n", " F\n", " \n", " \n", - " 100\n", + " 101\n", " sr2_ASC_auto_deficient_univ\n", " -1.692235\n", " F\n", " \n", " \n", - " 101\n", + " 102\n", " sr2_ASC_auto_deficient_work\n", " -0.338031\n", " F\n", " \n", " \n", - " 102\n", + " 103\n", " sr2_ASC_auto_deficient_atwork\n", " -2.110242\n", " F\n", " \n", " \n", - " 103\n", + " 104\n", " sr2_ASC_auto_sufficient_eatout\n", " 0.862806\n", " F\n", " \n", " \n", - " 104\n", + " 105\n", " sr2_ASC_auto_sufficient_escort\n", " 0.000000\n", " F\n", " \n", " \n", - " 105\n", + " 106\n", " sr2_ASC_auto_sufficient_othdiscr\n", " 0.496846\n", " F\n", " \n", " \n", - " 106\n", + " 107\n", " sr2_ASC_auto_sufficient_othmaint\n", " 0.258179\n", " F\n", " \n", " \n", - " 107\n", + " 108\n", " sr2_ASC_auto_sufficient_school\n", " -1.606266\n", " F\n", " \n", " \n", - " 108\n", + " 109\n", " sr2_ASC_auto_sufficient_shopping\n", " 0.197707\n", " F\n", " \n", " \n", - " 109\n", + " 110\n", " sr2_ASC_auto_sufficient_social\n", " 0.523602\n", " F\n", " \n", " \n", - " 110\n", + " 111\n", " sr2_ASC_auto_sufficient_univ\n", " -1.859427\n", " F\n", " \n", " \n", - " 111\n", + " 112\n", " sr2_ASC_auto_sufficient_work\n", " -1.085746\n", " F\n", " \n", " \n", - " 112\n", + " 113\n", " sr2_ASC_auto_sufficient_atwork\n", " -1.445062\n", " F\n", " \n", " \n", - " 113\n", + " 114\n", " sr3p_ASC_no_auto_eatout\n", " 0.322000\n", " F\n", " \n", " \n", - " 114\n", + " 115\n", " sr3p_ASC_no_auto_escort\n", " -1.812927\n", " F\n", " \n", " \n", - " 115\n", + " 116\n", " sr3p_ASC_no_auto_othdiscr\n", " 0.272169\n", " F\n", " \n", " \n", - " 116\n", + " 117\n", " sr3p_ASC_no_auto_othmaint\n", " -0.803185\n", " F\n", " \n", " \n", - " 117\n", + " 118\n", " sr3p_ASC_no_auto_school\n", " -6.024083\n", " F\n", " \n", " \n", - " 118\n", + " 119\n", " sr3p_ASC_no_auto_shopping\n", " -0.279789\n", " F\n", " \n", " \n", - " 119\n", + " 120\n", " sr3p_ASC_no_auto_social\n", " -1.403690\n", " F\n", " \n", " \n", - " 120\n", + " 121\n", " sr3p_ASC_no_auto_univ\n", " -6.056001\n", " F\n", " \n", " \n", - " 121\n", + " 122\n", " sr3p_ASC_no_auto_work\n", " -0.583127\n", " F\n", " \n", " \n", - " 122\n", + " 123\n", " sr3p_ASC_no_auto_atwork\n", " 0.582663\n", " F\n", " \n", " \n", - " 123\n", + " 124\n", " sr3p_ASC_auto_deficient_eatout\n", " 0.046052\n", " F\n", " \n", " \n", - " 124\n", + " 125\n", " sr3p_ASC_auto_deficient_escort\n", " -0.408188\n", " F\n", " \n", " \n", - " 125\n", + " 126\n", " sr3p_ASC_auto_deficient_othdiscr\n", " 1.047097\n", " F\n", " \n", " \n", - " 126\n", + " 127\n", " sr3p_ASC_auto_deficient_othmaint\n", " -1.349392\n", " F\n", " \n", " \n", - " 127\n", + " 128\n", " sr3p_ASC_auto_deficient_school\n", " 0.714957\n", " F\n", " \n", " \n", - " 128\n", + " 129\n", " sr3p_ASC_auto_deficient_shopping\n", " -0.073370\n", " F\n", " \n", " \n", - " 129\n", + " 130\n", " sr3p_ASC_auto_deficient_social\n", " 1.500724\n", " F\n", " \n", " \n", - " 130\n", + " 131\n", " sr3p_ASC_auto_deficient_univ\n", " -1.727742\n", " F\n", " \n", " \n", - " 131\n", + " 132\n", " sr3p_ASC_auto_deficient_work\n", " -0.852704\n", " F\n", " \n", " \n", - " 132\n", + " 133\n", " sr3p_ASC_auto_deficient_atwork\n", " -2.514658\n", " F\n", " \n", " \n", - " 133\n", + " 134\n", " sr3p_ASC_auto_sufficient_eatout\n", " 0.846860\n", " F\n", " \n", " \n", - " 134\n", + " 135\n", " sr3p_ASC_auto_sufficient_escort\n", " -0.057413\n", " F\n", " \n", " \n", - " 135\n", + " 136\n", " sr3p_ASC_auto_sufficient_othdiscr\n", " 0.588502\n", " F\n", " \n", " \n", - " 136\n", + " 137\n", " sr3p_ASC_auto_sufficient_othmaint\n", " -0.075499\n", " F\n", " \n", " \n", - " 137\n", + " 138\n", " sr3p_ASC_auto_sufficient_school\n", " -1.020193\n", " F\n", " \n", " \n", - " 138\n", + " 139\n", " sr3p_ASC_auto_sufficient_shopping\n", " -0.077571\n", " F\n", " \n", " \n", - " 139\n", + " 140\n", " sr3p_ASC_auto_sufficient_social\n", " 0.506179\n", " F\n", " \n", " \n", - " 140\n", + " 141\n", " sr3p_ASC_auto_sufficient_univ\n", " -1.904710\n", " F\n", " \n", " \n", - " 141\n", + " 142\n", " sr3p_ASC_auto_sufficient_work\n", " -1.469970\n", " F\n", " \n", " \n", - " 142\n", + " 143\n", " sr3p_ASC_auto_sufficient_atwork\n", " -1.652174\n", " F\n", " \n", " \n", - " 143\n", + " 144\n", " walk_transit_ASC_no_auto_eatout\n", " 2.593637\n", " F\n", " \n", " \n", - " 144\n", + " 145\n", " walk_transit_ASC_no_auto_escort\n", " -2.217208\n", " F\n", " \n", " \n", - " 145\n", + " 146\n", " walk_transit_ASC_no_auto_othdiscr\n", " 2.243778\n", " F\n", " \n", " \n", - " 146\n", + " 147\n", " walk_transit_ASC_no_auto_othmaint\n", " 2.564346\n", " F\n", " \n", " \n", - " 147\n", + " 148\n", " walk_transit_ASC_no_auto_school\n", " 21.383749\n", " F\n", " \n", " \n", - " 148\n", + " 149\n", " walk_transit_ASC_no_auto_shopping\n", " 2.106748\n", " F\n", " \n", " \n", - " 149\n", + " 150\n", " walk_transit_ASC_no_auto_social\n", " 1.381465\n", " F\n", " \n", " \n", - " 150\n", + " 151\n", " walk_transit_ASC_no_auto_univ\n", " 8.786037\n", " F\n", " \n", " \n", - " 151\n", + " 152\n", " walk_transit_ASC_no_auto_work\n", " 5.035417\n", " F\n", " \n", " \n", - " 152\n", + " 153\n", " walk_transit_ASC_no_auto_atwork\n", " 2.704188\n", " F\n", " \n", " \n", - " 153\n", + " 154\n", " walk_transit_ASC_auto_deficient_eatout\n", " -0.038963\n", " F\n", " \n", " \n", - " 154\n", + " 155\n", " walk_transit_ASC_auto_deficient_escort\n", " -4.960704\n", " F\n", " \n", " \n", - " 155\n", + " 156\n", " walk_transit_ASC_auto_deficient_othdiscr\n", " 0.953088\n", " F\n", " \n", " \n", - " 156\n", + " 157\n", " walk_transit_ASC_auto_deficient_othmaint\n", " -3.059726\n", " F\n", " \n", " \n", - " 157\n", + " 158\n", " walk_transit_ASC_auto_deficient_school\n", " 4.120708\n", " F\n", " \n", " \n", - " 158\n", + " 159\n", " walk_transit_ASC_auto_deficient_shopping\n", " -0.847657\n", " F\n", " \n", " \n", - " 159\n", + " 160\n", " walk_transit_ASC_auto_deficient_social\n", " 0.974445\n", " F\n", " \n", " \n", - " 160\n", + " 161\n", " walk_transit_ASC_auto_deficient_univ\n", " 3.136255\n", " F\n", " \n", " \n", - " 161\n", + " 162\n", " walk_transit_ASC_auto_deficient_work\n", " 0.653029\n", " F\n", " \n", " \n", - " 162\n", + " 163\n", " walk_transit_ASC_auto_deficient_atwork\n", " -2.998829\n", " F\n", " \n", " \n", - " 163\n", + " 164\n", " walk_transit_ASC_auto_sufficient_eatout\n", " -1.112691\n", " F\n", " \n", " \n", - " 164\n", + " 165\n", " walk_transit_ASC_auto_sufficient_escort\n", " -4.934847\n", " F\n", " \n", " \n", - " 165\n", + " 166\n", " walk_transit_ASC_auto_sufficient_othdiscr\n", " -0.806368\n", " F\n", " \n", " \n", - " 166\n", + " 167\n", " walk_transit_ASC_auto_sufficient_othmaint\n", " -1.547117\n", " F\n", " \n", " \n", - " 167\n", + " 168\n", " walk_transit_ASC_auto_sufficient_school\n", " 0.745909\n", " F\n", " \n", " \n", - " 168\n", + " 169\n", " walk_transit_ASC_auto_sufficient_shopping\n", " -2.203680\n", " F\n", " \n", " \n", - " 169\n", + " 170\n", " walk_transit_ASC_auto_sufficient_social\n", " -0.345376\n", " F\n", " \n", " \n", - " 170\n", + " 171\n", " walk_transit_ASC_auto_sufficient_univ\n", " 0.473116\n", " F\n", " \n", " \n", - " 171\n", + " 172\n", " walk_transit_ASC_auto_sufficient_work\n", " -0.891651\n", " F\n", " \n", " \n", - " 172\n", + " 173\n", " walk_transit_ASC_auto_sufficient_atwork\n", " -3.401027\n", " F\n", " \n", " \n", - " 173\n", + " 174\n", " drive_transit_ASC_no_auto_all\n", " 0.000000\n", " F\n", " \n", " \n", - " 174\n", + " 175\n", " drive_transit_ASC_auto_deficient_eatout\n", " 0.599806\n", " F\n", " \n", " \n", - " 175\n", + " 176\n", " drive_transit_ASC_auto_deficient_escort\n", " -1.153707\n", " F\n", " \n", " \n", - " 176\n", + " 177\n", " drive_transit_ASC_auto_deficient_othdiscr\n", " 0.319931\n", " F\n", " \n", " \n", - " 177\n", + " 178\n", " drive_transit_ASC_auto_deficient_othmaint\n", " -0.299432\n", " F\n", " \n", " \n", - " 178\n", + " 179\n", " drive_transit_ASC_auto_deficient_school\n", " 5.325265\n", " F\n", " \n", " \n", - " 179\n", + " 180\n", " drive_transit_ASC_auto_deficient_shopping\n", " -0.418492\n", " F\n", " \n", " \n", - " 180\n", + " 181\n", " drive_transit_ASC_auto_deficient_social\n", " 1.562720\n", " F\n", " \n", " \n", - " 181\n", + " 182\n", " drive_transit_ASC_auto_deficient_univ\n", " 1.850118\n", " F\n", " \n", " \n", - " 182\n", + " 183\n", " drive_transit_ASC_auto_deficient_work\n", " 0.100816\n", " F\n", " \n", " \n", - " 183\n", + " 184\n", " drive_transit_ASC_auto_deficient_atwork\n", " -998.819600\n", " F\n", " \n", " \n", - " 184\n", + " 185\n", " drive_transit_ASC_auto_sufficient_eatout\n", " -0.969516\n", " F\n", " \n", " \n", - " 185\n", + " 186\n", " drive_transit_ASC_auto_sufficient_escort\n", " -4.601425\n", " F\n", " \n", " \n", - " 186\n", + " 187\n", " drive_transit_ASC_auto_sufficient_othdiscr\n", " -0.378592\n", " F\n", " \n", " \n", - " 187\n", + " 188\n", " drive_transit_ASC_auto_sufficient_othmaint\n", " -2.624948\n", " F\n", " \n", " \n", - " 188\n", + " 189\n", " drive_transit_ASC_auto_sufficient_school\n", " 1.401350\n", " F\n", " \n", " \n", - " 189\n", + " 190\n", " drive_transit_ASC_auto_sufficient_shopping\n", " -2.171894\n", " F\n", " \n", " \n", - " 190\n", + " 191\n", " drive_transit_ASC_auto_sufficient_social\n", " -0.615856\n", " F\n", " \n", " \n", - " 191\n", + " 192\n", " drive_transit_ASC_auto_sufficient_univ\n", " 1.358775\n", " F\n", " \n", " \n", - " 192\n", + " 193\n", " drive_transit_ASC_auto_sufficient_work\n", " -1.004546\n", " F\n", " \n", " \n", - " 193\n", + " 194\n", " drive_transit_ASC_auto_sufficient_atwork\n", " -999.214660\n", " F\n", " \n", " \n", - " 194\n", + " 195\n", " taxi_ASC_no_auto_eatout_othdiscr_social\n", " 0.992300\n", " F\n", " \n", " \n", - " 195\n", + " 196\n", " taxi_ASC_no_auto_escort_othmaint_shopping\n", " 1.893900\n", " F\n", " \n", " \n", - " 196\n", + " 197\n", " taxi_ASC_no_auto_school_univ\n", " -7.000000\n", " T\n", " \n", " \n", - " 197\n", + " 198\n", " taxi_ASC_no_auto_work\n", " 4.729100\n", " F\n", " \n", " \n", - " 198\n", + " 199\n", " taxi_ASC_no_auto_atwork\n", " 4.102100\n", " F\n", " \n", " \n", - " 199\n", + " 200\n", " taxi_ASC_auto_deficient_eatout_othdiscr_social\n", " -3.131700\n", " F\n", " \n", " \n", - " 200\n", + " 201\n", " taxi_ASC_auto_deficient_escort_othmaint_shopping\n", " 0.176600\n", " F\n", " \n", " \n", - " 201\n", + " 202\n", " taxi_ASC_auto_deficient_school\n", " -0.333800\n", " F\n", " \n", " \n", - " 202\n", + " 203\n", " taxi_ASC_auto_deficient_univ\n", " 4.249200\n", " F\n", " \n", " \n", - " 203\n", + " 204\n", " taxi_ASC_auto_deficient_work\n", " -1.476600\n", " F\n", " \n", " \n", - " 204\n", + " 205\n", " taxi_ASC_auto_deficient_atwork\n", " -4.404600\n", " F\n", " \n", " \n", - " 205\n", + " 206\n", " taxi_ASC_auto_sufficient_eatout_othdiscr_social\n", " -3.037400\n", " F\n", " \n", " \n", - " 206\n", + " 207\n", " taxi_ASC_auto_sufficient_escort_othmaint_shopping\n", " -1.805500\n", " F\n", " \n", " \n", - " 207\n", + " 208\n", " taxi_ASC_auto_sufficient_school\n", " -2.429400\n", " F\n", " \n", " \n", - " 208\n", + " 209\n", " taxi_ASC_auto_sufficient_univ\n", " -0.313100\n", " F\n", " \n", " \n", - " 209\n", + " 210\n", " taxi_ASC_auto_sufficient_work\n", " -4.850900\n", " F\n", " \n", " \n", - " 210\n", + " 211\n", " taxi_ASC_auto_sufficient_atwork\n", " -2.880400\n", " F\n", " \n", " \n", - " 211\n", + " 212\n", " tnc_single_ASC_no_auto_eatout_othdiscr_social\n", " 1.685200\n", " F\n", " \n", " \n", - " 212\n", + " 213\n", " tnc_single_ASC_no_auto_escort_othmaint_shopping\n", " 1.860500\n", " F\n", " \n", " \n", - " 213\n", + " 214\n", " tnc_single_ASC_no_auto_school\n", " -7.000000\n", " T\n", " \n", " \n", - " 214\n", + " 215\n", " tnc_single_ASC_no_auto_univ\n", " -2.519000\n", " F\n", " \n", " \n", - " 215\n", + " 216\n", " tnc_single_ASC_no_auto_work\n", " 5.785500\n", " F\n", " \n", " \n", - " 216\n", + " 217\n", " tnc_single_ASC_no_auto_atwork\n", " 4.498200\n", " F\n", " \n", " \n", - " 217\n", + " 218\n", " tnc_single_ASC_auto_deficient_eatout_othdiscr_...\n", " -2.962300\n", " F\n", " \n", " \n", - " 218\n", + " 219\n", " tnc_single_ASC_auto_deficient_escort_othmaint_...\n", " 0.674800\n", " F\n", " \n", " \n", - " 219\n", + " 220\n", " tnc_single_ASC_auto_deficient_school\n", " -0.552400\n", " F\n", " \n", " \n", - " 220\n", + " 221\n", " tnc_single_ASC_auto_deficient_univ\n", " 1.022100\n", " F\n", " \n", " \n", - " 221\n", + " 222\n", " tnc_single_ASC_auto_deficient_work\n", " -0.801300\n", " F\n", " \n", " \n", - " 222\n", + " 223\n", " tnc_single_ASC_auto_deficient_atwork\n", " -3.762600\n", " F\n", " \n", " \n", - " 223\n", + " 224\n", " tnc_single_ASC_auto_sufficient_eatout_othdiscr...\n", " -2.323900\n", " F\n", " \n", " \n", - " 224\n", + " 225\n", " tnc_single_ASC_auto_sufficient_escort_othmaint...\n", " -1.450000\n", " F\n", " \n", " \n", - " 225\n", + " 226\n", " tnc_single_ASC_auto_sufficient_school\n", " -2.837500\n", " F\n", " \n", " \n", - " 226\n", + " 227\n", " tnc_single_ASC_auto_sufficient_univ\n", " 0.208800\n", " F\n", " \n", " \n", - " 227\n", + " 228\n", " tnc_single_ASC_auto_sufficient_work\n", " -4.194600\n", " F\n", " \n", " \n", - " 228\n", + " 229\n", " tnc_single_ASC_auto_sufficient_atwork\n", " -2.798800\n", " F\n", " \n", " \n", - " 229\n", + " 230\n", " tnc_shared_ASC_no_auto_eatout_othdiscr_social\n", " 0.646400\n", " F\n", " \n", " \n", - " 230\n", + " 231\n", " tnc_shared_ASC_no_auto_escort_othmaint_shopping\n", " 0.936100\n", " F\n", " \n", " \n", - " 231\n", + " 232\n", " tnc_shared_ASC_no_auto_school\n", " -7.000000\n", " T\n", " \n", " \n", - " 232\n", + " 233\n", " tnc_shared_ASC_no_auto_univ\n", " -5.811600\n", " F\n", " \n", " \n", - " 233\n", + " 234\n", " tnc_shared_ASC_no_auto_work\n", " 3.242900\n", " F\n", " \n", " \n", - " 234\n", + " 235\n", " tnc_shared_ASC_no_auto_atwork\n", " 3.367200\n", " F\n", " \n", " \n", - " 235\n", + " 236\n", " tnc_shared_ASC_auto_deficient_eatout_othdiscr_...\n", " -4.357600\n", " F\n", " \n", " \n", - " 236\n", + " 237\n", " tnc_shared_ASC_auto_deficient_escort_othmaint_...\n", " -0.386300\n", " F\n", " \n", " \n", - " 237\n", + " 238\n", " tnc_shared_ASC_auto_deficient_school\n", " -1.474600\n", " F\n", " \n", " \n", - " 238\n", + " 239\n", " tnc_shared_ASC_auto_deficient_univ\n", " 3.250000\n", " F\n", " \n", " \n", - " 239\n", + " 240\n", " tnc_shared_ASC_auto_deficient_work\n", " -2.143500\n", " F\n", " \n", " \n", - " 240\n", + " 241\n", " tnc_shared_ASC_auto_deficient_atwork\n", " -4.508900\n", " F\n", " \n", " \n", - " 241\n", + " 242\n", " tnc_shared_ASC_auto_sufficient_eatout_othdiscr...\n", " -3.663800\n", " F\n", " \n", " \n", - " 242\n", + " 243\n", " tnc_shared_ASC_auto_sufficient_escort_othmaint...\n", " -2.436500\n", " F\n", " \n", " \n", - " 243\n", + " 244\n", " tnc_shared_ASC_auto_sufficient_school\n", " -3.721900\n", " F\n", " \n", " \n", - " 244\n", + " 245\n", " tnc_shared_ASC_auto_sufficient_univ\n", " -0.906800\n", " F\n", " \n", " \n", - " 245\n", + " 246\n", " tnc_shared_ASC_auto_sufficient_work\n", " -5.357500\n", " F\n", " \n", " \n", - " 246\n", + " 247\n", " tnc_shared_ASC_auto_sufficient_atwork\n", " -3.539700\n", " F\n", " \n", " \n", - " 247\n", + " 248\n", " joint_walk_ASC_no_auto_all\n", " -0.212747\n", " F\n", " \n", " \n", - " 248\n", + " 249\n", " joint_walk_ASC_auto_deficient_all\n", " -1.960771\n", " F\n", " \n", " \n", - " 249\n", + " 250\n", " joint_walk_ASC_auto_sufficient_all\n", " -3.235216\n", " F\n", " \n", " \n", - " 250\n", + " 251\n", " joint_bike_ASC_no_auto_all\n", " -2.867160\n", " F\n", " \n", " \n", - " 251\n", + " 252\n", " joint_bike_ASC_auto_deficient_all\n", " -6.076415\n", " F\n", " \n", " \n", - " 252\n", + " 253\n", " joint_bike_ASC_auto_sufficient_all\n", " -6.376066\n", " F\n", " \n", " \n", - " 253\n", + " 254\n", " joint_sr2_ASC_no_auto_all\n", " 0.000000\n", " T\n", " \n", " \n", - " 254\n", + " 255\n", " joint_sr2_ASC_auto_deficient_all\n", " 0.000000\n", " T\n", " \n", " \n", - " 255\n", + " 256\n", " joint_sr2_ASC_auto_sufficient_all\n", " 0.000000\n", " T\n", " \n", " \n", - " 256\n", + " 257\n", " joint_sr3p_ASC_no_auto_all\n", " 0.563067\n", " F\n", " \n", " \n", - " 257\n", + " 258\n", " joint_sr3p_ASC_auto_deficient_all\n", " -1.884169\n", " F\n", " \n", " \n", - " 258\n", + " 259\n", " joint_sr3p_ASC_auto_sufficient_all\n", " -2.234826\n", " F\n", " \n", " \n", - " 259\n", + " 260\n", " joint_walk_transit_ASC_no_auto_all\n", " 0.622924\n", " F\n", " \n", " \n", - " 260\n", + " 261\n", " joint_walk_transit_ASC_auto_deficient_all\n", " -5.163448\n", " F\n", " \n", " \n", - " 261\n", + " 262\n", " joint_walk_transit_ASC_auto_sufficient_all\n", " -18.264534\n", " F\n", " \n", " \n", - " 262\n", + " 263\n", " joint_drive_transit_ASC_no_auto_all\n", " 0.000000\n", " T\n", " \n", " \n", - " 263\n", + " 264\n", " joint_drive_transit_ASC_auto_deficient_all\n", - " -5.963221\n", + " -5.963222\n", " F\n", " \n", " \n", - " 264\n", + " 265\n", " joint_drive_transit_ASC_auto_sufficient_all\n", " -8.045285\n", " F\n", " \n", " \n", - " 265\n", + " 266\n", " joint_taxi_ASC_no_auto_all\n", " -4.579200\n", " F\n", " \n", " \n", - " 266\n", + " 267\n", " joint_taxi_ASC_auto_deficient_all\n", " -9.815700\n", " F\n", " \n", " \n", - " 267\n", + " 268\n", " joint_taxi_ASC_auto_sufficient_all\n", " -11.709900\n", " T\n", " \n", " \n", - " 268\n", + " 269\n", " joint_tnc_single_ASC_no_auto_all\n", " -4.491700\n", " F\n", " \n", " \n", - " 269\n", + " 270\n", " joint_tnc_single_ASC_auto_deficient_all\n", " -9.896100\n", " F\n", " \n", " \n", - " 270\n", + " 271\n", " joint_tnc_single_ASC_auto_sufficient_all\n", " -14.015900\n", " T\n", " \n", " \n", - " 271\n", + " 272\n", " joint_tnc_shared_ASC_no_auto_all\n", " -4.300200\n", " F\n", " \n", " \n", - " 272\n", + " 273\n", " joint_tnc_shared_ASC_auto_deficient_all\n", " -11.157200\n", " F\n", " \n", " \n", - " 273\n", + " 274\n", " joint_tnc_shared_ASC_auto_sufficient_all\n", " -13.205000\n", " T\n", " \n", " \n", - " 274\n", + " 275\n", " local_bus_ASC_eatout_escort_othdiscr_othmaint_...\n", " -0.090703\n", " F\n", " \n", " \n", - " 275\n", + " 276\n", " local_bus_ASC_school_univ\n", " -0.065086\n", " F\n", " \n", " \n", - " 276\n", + " 277\n", " local_bus_ASC_work\n", " 0.066895\n", " F\n", " \n", " \n", - " 277\n", + " 278\n", " walk_light_rail_ASC_eatout_escort_othdiscr_oth...\n", " 0.768955\n", " F\n", " \n", " \n", - " 278\n", + " 279\n", " walk_light_rail_ASC_school_univ\n", " 1.681400\n", " F\n", " \n", " \n", - " 279\n", + " 280\n", " walk_light_rail_ASC_work\n", " 0.825557\n", " F\n", " \n", " \n", - " 280\n", + " 281\n", " drive_light_rail_ASC_eatout_escort_othdiscr_ot...\n", " 0.768955\n", " F\n", " \n", " \n", - " 281\n", + " 282\n", " drive_light_rail_ASC_school_univ\n", " 1.681400\n", " F\n", " \n", " \n", - " 282\n", + " 283\n", " drive_light_rail_ASC_work\n", " 0.825557\n", " F\n", " \n", " \n", - " 283\n", + " 284\n", " walk_ferry_ASC_eatout_escort_othdiscr_othmaint...\n", " 0.940124\n", " F\n", " \n", " \n", - " 284\n", + " 285\n", " walk_ferry_ASC_school_univ\n", " 2.020232\n", " F\n", " \n", " \n", - " 285\n", + " 286\n", " walk_ferry_ASC_work\n", " 0.933226\n", " F\n", " \n", " \n", - " 286\n", + " 287\n", " drive_ferry_ASC_eatout_escort_othdiscr_othmain...\n", " 0.940124\n", " F\n", " \n", " \n", - " 287\n", + " 288\n", " drive_ferry_ASC_school_univ\n", " 2.020232\n", " F\n", " \n", " \n", - " 288\n", + " 289\n", " drive_ferry_ASC_work\n", " 0.933226\n", " F\n", " \n", " \n", - " 289\n", + " 290\n", " express_bus_ASC_eatout_escort_othdiscr_othmain...\n", " 0.969232\n", " F\n", " \n", " \n", - " 290\n", + " 291\n", " express_bus_ASC_school_univ\n", " 0.324969\n", " F\n", " \n", " \n", - " 291\n", + " 292\n", " express_bus_ASC_work\n", " -0.516547\n", " F\n", " \n", " \n", - " 292\n", + " 293\n", " heavy_rail_ASC_eatout_escort_othdiscr_othmaint...\n", " 0.770612\n", " F\n", " \n", " \n", - " 293\n", + " 294\n", " heavy_rail_ASC_school_univ\n", " 0.962004\n", " F\n", " \n", " \n", - " 294\n", + " 295\n", " heavy_rail_ASC_work\n", " 0.647730\n", " F\n", " \n", " \n", - " 295\n", + " 296\n", " commuter_rail_ASC_eatout_escort_othdiscr_othma...\n", " 0.727019\n", " F\n", " \n", " \n", - " 296\n", + " 297\n", " commuter_rail_ASC_school_univ\n", " 1.033621\n", " F\n", " \n", " \n", - " 297\n", + " 298\n", " commuter_rail_ASC_work\n", " 0.725503\n", " F\n", " \n", " \n", - " 298\n", + " 299\n", " walk_transit_CBD_ASC_eatout_escort_othdiscr_ot...\n", " 0.525000\n", " F\n", " \n", " \n", - " 299\n", + " 300\n", " walk_transit_CBD_ASC_school_univ\n", " 0.672000\n", " F\n", " \n", " \n", - " 300\n", + " 301\n", " walk_transit_CBD_ASC_work\n", " 0.804000\n", " F\n", " \n", " \n", - " 301\n", + " 302\n", " walk_transit_CBD_ASC_atwork\n", " 0.564000\n", " F\n", " \n", " \n", - " 302\n", + " 303\n", " drive_transit_CBD_ASC_eatout_escort_othdiscr_o...\n", " 0.525000\n", " F\n", " \n", " \n", - " 303\n", + " 304\n", " drive_transit_CBD_ASC_school_univ\n", " 0.672000\n", " F\n", " \n", " \n", - " 304\n", + " 305\n", " drive_transit_CBD_ASC_work\n", " 1.100000\n", " F\n", " \n", " \n", - " 305\n", + " 306\n", " drive_transit_CBD_ASC_atwork\n", " 0.564000\n", " F\n", @@ -3283,321 +3290,322 @@ ], "text/plain": [ " coefficient_name value constrain\n", - "0 coef_nest_root 1.000000 T\n", - "1 coef_nest_AUTO 0.720000 T\n", - "2 coef_nest_AUTO_DRIVEALONE 0.350000 T\n", - "3 coef_nest_AUTO_SHAREDRIDE2 0.350000 T\n", - "4 coef_nest_AUTO_SHAREDRIDE3 0.350000 T\n", - "5 coef_nest_NONMOTORIZED 0.720000 T\n", - "6 coef_nest_TRANSIT 0.720000 T\n", - "7 coef_nest_TRANSIT_WALKACCESS 0.500000 T\n", - "8 coef_nest_TRANSIT_DRIVEACCESS 0.500000 T\n", - "9 coef_nest_RIDEHAIL 0.360000 T\n", - "10 coef_ivt_eatout_escort_othdiscr_othmaint_shopp... -0.017500 F\n", - "11 coef_ivt_school_univ -0.022400 F\n", - "12 coef_ivt_work -0.013400 F\n", - "13 coef_ivt_atwork -0.018800 F\n", - "14 coef_topology_walk_multiplier_eatout_escort_ot... 15.000000 F\n", - "15 coef_topology_walk_multiplier_atwork 7.500000 F\n", - "16 coef_topology_bike_multiplier_eatout_escort_ot... 20.000000 F\n", - "17 coef_topology_bike_multiplier_atwork 10.000000 F\n", - "18 coef_topology_trn_multiplier_eatout_escort_oth... 2.200000 F\n", - "19 coef_topology_trn_multiplier_atwork 2.000000 F\n", - "20 coef_age1619_da_multiplier_eatout_escort_othdi... 0.000000 F\n", - "21 coef_age1619_da_multiplier_school_univ -1.381300 F\n", - "22 coef_age1619_da_multiplier_atwork 0.003234 F\n", - "23 coef_age010_trn_multiplier_eatout_escort_othdi... 0.000000 F\n", - "24 coef_age010_trn_multiplier_school_univ -1.554800 F\n", - "25 coef_age010_trn_multiplier_atwork 0.000722 F\n", - "26 coef_age16p_sr_multiplier_eatout_escort_othdis... -1.366000 F\n", - "27 coef_age16p_sr_multiplier_school_univ_work_atwork 0.000000 F\n", - "28 coef_hhsize1_sr_multiplier_eatout_escort_othdi... 0.000000 F\n", - "29 coef_hhsize1_sr_multiplier_work -0.734588 F\n", - "30 coef_hhsize2_sr_multiplier_eatout_escort_othdi... 0.000000 F\n", - "31 coef_hhsize2_sr_multiplier_school_univ -0.635900 F\n", - "32 walk_ASC_no_auto_eatout 5.125117 F\n", - "33 walk_ASC_no_auto_escort 2.801207 F\n", - "34 walk_ASC_no_auto_othdiscr 3.266595 F\n", - "35 walk_ASC_no_auto_othmaint 1.287299 F\n", - "36 walk_ASC_no_auto_school 18.414557 F\n", - "37 walk_ASC_no_auto_shopping 2.376877 F\n", - "38 walk_ASC_no_auto_social 1.868092 F\n", - "39 walk_ASC_no_auto_univ 6.408967 F\n", - "40 walk_ASC_no_auto_work 5.767216 F\n", - "41 walk_ASC_no_auto_atwork 6.669213 F\n", - "42 walk_ASC_auto_deficient_eatout 3.274605 F\n", - "43 walk_ASC_auto_deficient_escort -0.902047 F\n", - "44 walk_ASC_auto_deficient_othdiscr 2.249408 F\n", - "45 walk_ASC_auto_deficient_othmaint 1.369040 F\n", - "46 walk_ASC_auto_deficient_school 3.257362 F\n", - "47 walk_ASC_auto_deficient_shopping 2.270173 F\n", - "48 walk_ASC_auto_deficient_social 2.870184 F\n", - "49 walk_ASC_auto_deficient_univ 4.505910 F\n", - "50 walk_ASC_auto_deficient_work 2.401042 F\n", - "51 walk_ASC_auto_deficient_atwork 0.925461 F\n", - "52 walk_ASC_auto_sufficient_eatout 1.551690 F\n", - "53 walk_ASC_auto_sufficient_escort -0.811607 F\n", - "54 walk_ASC_auto_sufficient_othdiscr 1.263348 F\n", - "55 walk_ASC_auto_sufficient_othmaint 0.799963 F\n", - "56 walk_ASC_auto_sufficient_school 0.647686 F\n", - "57 walk_ASC_auto_sufficient_shopping 0.731266 F\n", - "58 walk_ASC_auto_sufficient_social 1.707219 F\n", - "59 walk_ASC_auto_sufficient_univ 1.060767 F\n", - "60 walk_ASC_auto_sufficient_work 0.053265 F\n", - "61 walk_ASC_auto_sufficient_atwork 0.677216 F\n", - "62 bike_ASC_no_auto_eatout 0.868071 F\n", - "63 bike_ASC_no_auto_escort -0.716212 F\n", - "64 bike_ASC_no_auto_othdiscr -0.376423 F\n", - "65 bike_ASC_no_auto_othmaint 1.539433 F\n", - "66 bike_ASC_no_auto_school 12.098735 F\n", - "67 bike_ASC_no_auto_shopping 0.834156 F\n", - "68 bike_ASC_no_auto_social 0.020583 F\n", - "69 bike_ASC_no_auto_univ 4.294516 F\n", - "70 bike_ASC_no_auto_work 3.194009 F\n", - "71 bike_ASC_no_auto_atwork -0.907258 F\n", - "72 bike_ASC_auto_deficient_eatout -1.569111 F\n", - "73 bike_ASC_auto_deficient_escort -4.527928 F\n", - "74 bike_ASC_auto_deficient_othdiscr -0.092468 F\n", - "75 bike_ASC_auto_deficient_othmaint -1.518465 F\n", - "76 bike_ASC_auto_deficient_school -0.528068 F\n", - "77 bike_ASC_auto_deficient_shopping -0.875845 F\n", - "78 bike_ASC_auto_deficient_social 0.634521 F\n", - "79 bike_ASC_auto_deficient_univ -0.669235 F\n", - "80 bike_ASC_auto_deficient_work 0.253190 F\n", - "81 bike_ASC_auto_deficient_atwork -0.807408 F\n", - "82 bike_ASC_auto_sufficient_eatout -1.200347 F\n", - "83 bike_ASC_auto_sufficient_escort -5.063108 F\n", - "84 bike_ASC_auto_sufficient_othdiscr -1.071460 F\n", - "85 bike_ASC_auto_sufficient_othmaint -2.808302 F\n", - "86 bike_ASC_auto_sufficient_school -2.113469 F\n", - "87 bike_ASC_auto_sufficient_shopping -2.566210 F\n", - "88 bike_ASC_auto_sufficient_social -1.368071 F\n", - "89 bike_ASC_auto_sufficient_univ -1.939783 F\n", - "90 bike_ASC_auto_sufficient_work -1.580023 F\n", - "91 bike_ASC_auto_sufficient_atwork 15.720170 F\n", - "92 sr2_ASC_no_auto_all 0.000000 F\n", - "93 sr2_ASC_auto_deficient_eatout 0.588234 F\n", - "94 sr2_ASC_auto_deficient_escort 0.000000 F\n", - "95 sr2_ASC_auto_deficient_othdiscr 0.660151 F\n", - "96 sr2_ASC_auto_deficient_othmaint 0.262153 F\n", - "97 sr2_ASC_auto_deficient_school 0.124744 F\n", - "98 sr2_ASC_auto_deficient_shopping 0.244098 F\n", - "99 sr2_ASC_auto_deficient_social 1.855853 F\n", - "100 sr2_ASC_auto_deficient_univ -1.692235 F\n", - "101 sr2_ASC_auto_deficient_work -0.338031 F\n", - "102 sr2_ASC_auto_deficient_atwork -2.110242 F\n", - "103 sr2_ASC_auto_sufficient_eatout 0.862806 F\n", - "104 sr2_ASC_auto_sufficient_escort 0.000000 F\n", - "105 sr2_ASC_auto_sufficient_othdiscr 0.496846 F\n", - "106 sr2_ASC_auto_sufficient_othmaint 0.258179 F\n", - "107 sr2_ASC_auto_sufficient_school -1.606266 F\n", - "108 sr2_ASC_auto_sufficient_shopping 0.197707 F\n", - "109 sr2_ASC_auto_sufficient_social 0.523602 F\n", - "110 sr2_ASC_auto_sufficient_univ -1.859427 F\n", - "111 sr2_ASC_auto_sufficient_work -1.085746 F\n", - "112 sr2_ASC_auto_sufficient_atwork -1.445062 F\n", - "113 sr3p_ASC_no_auto_eatout 0.322000 F\n", - "114 sr3p_ASC_no_auto_escort -1.812927 F\n", - "115 sr3p_ASC_no_auto_othdiscr 0.272169 F\n", - "116 sr3p_ASC_no_auto_othmaint -0.803185 F\n", - "117 sr3p_ASC_no_auto_school -6.024083 F\n", - "118 sr3p_ASC_no_auto_shopping -0.279789 F\n", - "119 sr3p_ASC_no_auto_social -1.403690 F\n", - "120 sr3p_ASC_no_auto_univ -6.056001 F\n", - "121 sr3p_ASC_no_auto_work -0.583127 F\n", - "122 sr3p_ASC_no_auto_atwork 0.582663 F\n", - "123 sr3p_ASC_auto_deficient_eatout 0.046052 F\n", - "124 sr3p_ASC_auto_deficient_escort -0.408188 F\n", - "125 sr3p_ASC_auto_deficient_othdiscr 1.047097 F\n", - "126 sr3p_ASC_auto_deficient_othmaint -1.349392 F\n", - "127 sr3p_ASC_auto_deficient_school 0.714957 F\n", - "128 sr3p_ASC_auto_deficient_shopping -0.073370 F\n", - "129 sr3p_ASC_auto_deficient_social 1.500724 F\n", - "130 sr3p_ASC_auto_deficient_univ -1.727742 F\n", - "131 sr3p_ASC_auto_deficient_work -0.852704 F\n", - "132 sr3p_ASC_auto_deficient_atwork -2.514658 F\n", - "133 sr3p_ASC_auto_sufficient_eatout 0.846860 F\n", - "134 sr3p_ASC_auto_sufficient_escort -0.057413 F\n", - "135 sr3p_ASC_auto_sufficient_othdiscr 0.588502 F\n", - "136 sr3p_ASC_auto_sufficient_othmaint -0.075499 F\n", - "137 sr3p_ASC_auto_sufficient_school -1.020193 F\n", - "138 sr3p_ASC_auto_sufficient_shopping -0.077571 F\n", - "139 sr3p_ASC_auto_sufficient_social 0.506179 F\n", - "140 sr3p_ASC_auto_sufficient_univ -1.904710 F\n", - "141 sr3p_ASC_auto_sufficient_work -1.469970 F\n", - "142 sr3p_ASC_auto_sufficient_atwork -1.652174 F\n", - "143 walk_transit_ASC_no_auto_eatout 2.593637 F\n", - "144 walk_transit_ASC_no_auto_escort -2.217208 F\n", - "145 walk_transit_ASC_no_auto_othdiscr 2.243778 F\n", - "146 walk_transit_ASC_no_auto_othmaint 2.564346 F\n", - "147 walk_transit_ASC_no_auto_school 21.383749 F\n", - "148 walk_transit_ASC_no_auto_shopping 2.106748 F\n", - "149 walk_transit_ASC_no_auto_social 1.381465 F\n", - "150 walk_transit_ASC_no_auto_univ 8.786037 F\n", - "151 walk_transit_ASC_no_auto_work 5.035417 F\n", - "152 walk_transit_ASC_no_auto_atwork 2.704188 F\n", - "153 walk_transit_ASC_auto_deficient_eatout -0.038963 F\n", - "154 walk_transit_ASC_auto_deficient_escort -4.960704 F\n", - "155 walk_transit_ASC_auto_deficient_othdiscr 0.953088 F\n", - "156 walk_transit_ASC_auto_deficient_othmaint -3.059726 F\n", - "157 walk_transit_ASC_auto_deficient_school 4.120708 F\n", - "158 walk_transit_ASC_auto_deficient_shopping -0.847657 F\n", - "159 walk_transit_ASC_auto_deficient_social 0.974445 F\n", - "160 walk_transit_ASC_auto_deficient_univ 3.136255 F\n", - "161 walk_transit_ASC_auto_deficient_work 0.653029 F\n", - "162 walk_transit_ASC_auto_deficient_atwork -2.998829 F\n", - "163 walk_transit_ASC_auto_sufficient_eatout -1.112691 F\n", - "164 walk_transit_ASC_auto_sufficient_escort -4.934847 F\n", - "165 walk_transit_ASC_auto_sufficient_othdiscr -0.806368 F\n", - "166 walk_transit_ASC_auto_sufficient_othmaint -1.547117 F\n", - "167 walk_transit_ASC_auto_sufficient_school 0.745909 F\n", - "168 walk_transit_ASC_auto_sufficient_shopping -2.203680 F\n", - "169 walk_transit_ASC_auto_sufficient_social -0.345376 F\n", - "170 walk_transit_ASC_auto_sufficient_univ 0.473116 F\n", - "171 walk_transit_ASC_auto_sufficient_work -0.891651 F\n", - "172 walk_transit_ASC_auto_sufficient_atwork -3.401027 F\n", - "173 drive_transit_ASC_no_auto_all 0.000000 F\n", - "174 drive_transit_ASC_auto_deficient_eatout 0.599806 F\n", - "175 drive_transit_ASC_auto_deficient_escort -1.153707 F\n", - "176 drive_transit_ASC_auto_deficient_othdiscr 0.319931 F\n", - "177 drive_transit_ASC_auto_deficient_othmaint -0.299432 F\n", - "178 drive_transit_ASC_auto_deficient_school 5.325265 F\n", - "179 drive_transit_ASC_auto_deficient_shopping -0.418492 F\n", - "180 drive_transit_ASC_auto_deficient_social 1.562720 F\n", - "181 drive_transit_ASC_auto_deficient_univ 1.850118 F\n", - "182 drive_transit_ASC_auto_deficient_work 0.100816 F\n", - "183 drive_transit_ASC_auto_deficient_atwork -998.819600 F\n", - "184 drive_transit_ASC_auto_sufficient_eatout -0.969516 F\n", - "185 drive_transit_ASC_auto_sufficient_escort -4.601425 F\n", - "186 drive_transit_ASC_auto_sufficient_othdiscr -0.378592 F\n", - "187 drive_transit_ASC_auto_sufficient_othmaint -2.624948 F\n", - "188 drive_transit_ASC_auto_sufficient_school 1.401350 F\n", - "189 drive_transit_ASC_auto_sufficient_shopping -2.171894 F\n", - "190 drive_transit_ASC_auto_sufficient_social -0.615856 F\n", - "191 drive_transit_ASC_auto_sufficient_univ 1.358775 F\n", - "192 drive_transit_ASC_auto_sufficient_work -1.004546 F\n", - "193 drive_transit_ASC_auto_sufficient_atwork -999.214660 F\n", - "194 taxi_ASC_no_auto_eatout_othdiscr_social 0.992300 F\n", - "195 taxi_ASC_no_auto_escort_othmaint_shopping 1.893900 F\n", - "196 taxi_ASC_no_auto_school_univ -7.000000 T\n", - "197 taxi_ASC_no_auto_work 4.729100 F\n", - "198 taxi_ASC_no_auto_atwork 4.102100 F\n", - "199 taxi_ASC_auto_deficient_eatout_othdiscr_social -3.131700 F\n", - "200 taxi_ASC_auto_deficient_escort_othmaint_shopping 0.176600 F\n", - "201 taxi_ASC_auto_deficient_school -0.333800 F\n", - "202 taxi_ASC_auto_deficient_univ 4.249200 F\n", - "203 taxi_ASC_auto_deficient_work -1.476600 F\n", - "204 taxi_ASC_auto_deficient_atwork -4.404600 F\n", - "205 taxi_ASC_auto_sufficient_eatout_othdiscr_social -3.037400 F\n", - "206 taxi_ASC_auto_sufficient_escort_othmaint_shopping -1.805500 F\n", - "207 taxi_ASC_auto_sufficient_school -2.429400 F\n", - "208 taxi_ASC_auto_sufficient_univ -0.313100 F\n", - "209 taxi_ASC_auto_sufficient_work -4.850900 F\n", - "210 taxi_ASC_auto_sufficient_atwork -2.880400 F\n", - "211 tnc_single_ASC_no_auto_eatout_othdiscr_social 1.685200 F\n", - "212 tnc_single_ASC_no_auto_escort_othmaint_shopping 1.860500 F\n", - "213 tnc_single_ASC_no_auto_school -7.000000 T\n", - "214 tnc_single_ASC_no_auto_univ -2.519000 F\n", - "215 tnc_single_ASC_no_auto_work 5.785500 F\n", - "216 tnc_single_ASC_no_auto_atwork 4.498200 F\n", - "217 tnc_single_ASC_auto_deficient_eatout_othdiscr_... -2.962300 F\n", - "218 tnc_single_ASC_auto_deficient_escort_othmaint_... 0.674800 F\n", - "219 tnc_single_ASC_auto_deficient_school -0.552400 F\n", - "220 tnc_single_ASC_auto_deficient_univ 1.022100 F\n", - "221 tnc_single_ASC_auto_deficient_work -0.801300 F\n", - "222 tnc_single_ASC_auto_deficient_atwork -3.762600 F\n", - "223 tnc_single_ASC_auto_sufficient_eatout_othdiscr... -2.323900 F\n", - "224 tnc_single_ASC_auto_sufficient_escort_othmaint... -1.450000 F\n", - "225 tnc_single_ASC_auto_sufficient_school -2.837500 F\n", - "226 tnc_single_ASC_auto_sufficient_univ 0.208800 F\n", - "227 tnc_single_ASC_auto_sufficient_work -4.194600 F\n", - "228 tnc_single_ASC_auto_sufficient_atwork -2.798800 F\n", - "229 tnc_shared_ASC_no_auto_eatout_othdiscr_social 0.646400 F\n", - "230 tnc_shared_ASC_no_auto_escort_othmaint_shopping 0.936100 F\n", - "231 tnc_shared_ASC_no_auto_school -7.000000 T\n", - "232 tnc_shared_ASC_no_auto_univ -5.811600 F\n", - "233 tnc_shared_ASC_no_auto_work 3.242900 F\n", - "234 tnc_shared_ASC_no_auto_atwork 3.367200 F\n", - "235 tnc_shared_ASC_auto_deficient_eatout_othdiscr_... -4.357600 F\n", - "236 tnc_shared_ASC_auto_deficient_escort_othmaint_... -0.386300 F\n", - "237 tnc_shared_ASC_auto_deficient_school -1.474600 F\n", - "238 tnc_shared_ASC_auto_deficient_univ 3.250000 F\n", - "239 tnc_shared_ASC_auto_deficient_work -2.143500 F\n", - "240 tnc_shared_ASC_auto_deficient_atwork -4.508900 F\n", - "241 tnc_shared_ASC_auto_sufficient_eatout_othdiscr... -3.663800 F\n", - "242 tnc_shared_ASC_auto_sufficient_escort_othmaint... -2.436500 F\n", - "243 tnc_shared_ASC_auto_sufficient_school -3.721900 F\n", - "244 tnc_shared_ASC_auto_sufficient_univ -0.906800 F\n", - "245 tnc_shared_ASC_auto_sufficient_work -5.357500 F\n", - "246 tnc_shared_ASC_auto_sufficient_atwork -3.539700 F\n", - "247 joint_walk_ASC_no_auto_all -0.212747 F\n", - "248 joint_walk_ASC_auto_deficient_all -1.960771 F\n", - "249 joint_walk_ASC_auto_sufficient_all -3.235216 F\n", - "250 joint_bike_ASC_no_auto_all -2.867160 F\n", - "251 joint_bike_ASC_auto_deficient_all -6.076415 F\n", - "252 joint_bike_ASC_auto_sufficient_all -6.376066 F\n", - "253 joint_sr2_ASC_no_auto_all 0.000000 T\n", - "254 joint_sr2_ASC_auto_deficient_all 0.000000 T\n", - "255 joint_sr2_ASC_auto_sufficient_all 0.000000 T\n", - "256 joint_sr3p_ASC_no_auto_all 0.563067 F\n", - "257 joint_sr3p_ASC_auto_deficient_all -1.884169 F\n", - "258 joint_sr3p_ASC_auto_sufficient_all -2.234826 F\n", - "259 joint_walk_transit_ASC_no_auto_all 0.622924 F\n", - "260 joint_walk_transit_ASC_auto_deficient_all -5.163448 F\n", - "261 joint_walk_transit_ASC_auto_sufficient_all -18.264534 F\n", - "262 joint_drive_transit_ASC_no_auto_all 0.000000 T\n", - "263 joint_drive_transit_ASC_auto_deficient_all -5.963221 F\n", - "264 joint_drive_transit_ASC_auto_sufficient_all -8.045285 F\n", - "265 joint_taxi_ASC_no_auto_all -4.579200 F\n", - "266 joint_taxi_ASC_auto_deficient_all -9.815700 F\n", - "267 joint_taxi_ASC_auto_sufficient_all -11.709900 T\n", - "268 joint_tnc_single_ASC_no_auto_all -4.491700 F\n", - "269 joint_tnc_single_ASC_auto_deficient_all -9.896100 F\n", - "270 joint_tnc_single_ASC_auto_sufficient_all -14.015900 T\n", - "271 joint_tnc_shared_ASC_no_auto_all -4.300200 F\n", - "272 joint_tnc_shared_ASC_auto_deficient_all -11.157200 F\n", - "273 joint_tnc_shared_ASC_auto_sufficient_all -13.205000 T\n", - "274 local_bus_ASC_eatout_escort_othdiscr_othmaint_... -0.090703 F\n", - "275 local_bus_ASC_school_univ -0.065086 F\n", - "276 local_bus_ASC_work 0.066895 F\n", - "277 walk_light_rail_ASC_eatout_escort_othdiscr_oth... 0.768955 F\n", - "278 walk_light_rail_ASC_school_univ 1.681400 F\n", - "279 walk_light_rail_ASC_work 0.825557 F\n", - "280 drive_light_rail_ASC_eatout_escort_othdiscr_ot... 0.768955 F\n", - "281 drive_light_rail_ASC_school_univ 1.681400 F\n", - "282 drive_light_rail_ASC_work 0.825557 F\n", - "283 walk_ferry_ASC_eatout_escort_othdiscr_othmaint... 0.940124 F\n", - "284 walk_ferry_ASC_school_univ 2.020232 F\n", - "285 walk_ferry_ASC_work 0.933226 F\n", - "286 drive_ferry_ASC_eatout_escort_othdiscr_othmain... 0.940124 F\n", - "287 drive_ferry_ASC_school_univ 2.020232 F\n", - "288 drive_ferry_ASC_work 0.933226 F\n", - "289 express_bus_ASC_eatout_escort_othdiscr_othmain... 0.969232 F\n", - "290 express_bus_ASC_school_univ 0.324969 F\n", - "291 express_bus_ASC_work -0.516547 F\n", - "292 heavy_rail_ASC_eatout_escort_othdiscr_othmaint... 0.770612 F\n", - "293 heavy_rail_ASC_school_univ 0.962004 F\n", - "294 heavy_rail_ASC_work 0.647730 F\n", - "295 commuter_rail_ASC_eatout_escort_othdiscr_othma... 0.727019 F\n", - "296 commuter_rail_ASC_school_univ 1.033621 F\n", - "297 commuter_rail_ASC_work 0.725503 F\n", - "298 walk_transit_CBD_ASC_eatout_escort_othdiscr_ot... 0.525000 F\n", - "299 walk_transit_CBD_ASC_school_univ 0.672000 F\n", - "300 walk_transit_CBD_ASC_work 0.804000 F\n", - "301 walk_transit_CBD_ASC_atwork 0.564000 F\n", - "302 drive_transit_CBD_ASC_eatout_escort_othdiscr_o... 0.525000 F\n", - "303 drive_transit_CBD_ASC_school_univ 0.672000 F\n", - "304 drive_transit_CBD_ASC_work 1.100000 F\n", - "305 drive_transit_CBD_ASC_atwork 0.564000 F" + "0 coef_one 1.000000 T\n", + "1 coef_nest_root 1.000000 T\n", + "2 coef_nest_AUTO 0.720000 T\n", + "3 coef_nest_AUTO_DRIVEALONE 0.350000 T\n", + "4 coef_nest_AUTO_SHAREDRIDE2 0.350000 T\n", + "5 coef_nest_AUTO_SHAREDRIDE3 0.350000 T\n", + "6 coef_nest_NONMOTORIZED 0.720000 T\n", + "7 coef_nest_TRANSIT 0.720000 T\n", + "8 coef_nest_TRANSIT_WALKACCESS 0.500000 T\n", + "9 coef_nest_TRANSIT_DRIVEACCESS 0.500000 T\n", + "10 coef_nest_RIDEHAIL 0.360000 T\n", + "11 coef_ivt_eatout_escort_othdiscr_othmaint_shopp... -0.017500 F\n", + "12 coef_ivt_school_univ -0.022400 F\n", + "13 coef_ivt_work -0.013400 F\n", + "14 coef_ivt_atwork -0.018800 F\n", + "15 coef_topology_walk_multiplier_eatout_escort_ot... 15.000000 F\n", + "16 coef_topology_walk_multiplier_atwork 7.500000 F\n", + "17 coef_topology_bike_multiplier_eatout_escort_ot... 20.000000 F\n", + "18 coef_topology_bike_multiplier_atwork 10.000000 F\n", + "19 coef_topology_trn_multiplier_eatout_escort_oth... 2.200000 F\n", + "20 coef_topology_trn_multiplier_atwork 2.000000 F\n", + "21 coef_age1619_da_multiplier_eatout_escort_othdi... 0.000000 F\n", + "22 coef_age1619_da_multiplier_school_univ -1.381300 F\n", + "23 coef_age1619_da_multiplier_atwork 0.003234 F\n", + "24 coef_age010_trn_multiplier_eatout_escort_othdi... 0.000000 F\n", + "25 coef_age010_trn_multiplier_school_univ -1.554800 F\n", + "26 coef_age010_trn_multiplier_atwork 0.000722 F\n", + "27 coef_age16p_sr_multiplier_eatout_escort_othdis... -1.366000 F\n", + "28 coef_age16p_sr_multiplier_school_univ_work_atwork 0.000000 F\n", + "29 coef_hhsize1_sr_multiplier_eatout_escort_othdi... 0.000000 F\n", + "30 coef_hhsize1_sr_multiplier_work -0.734588 F\n", + "31 coef_hhsize2_sr_multiplier_eatout_escort_othdi... 0.000000 F\n", + "32 coef_hhsize2_sr_multiplier_school_univ -0.635900 F\n", + "33 walk_ASC_no_auto_eatout 5.125117 F\n", + "34 walk_ASC_no_auto_escort 2.801207 F\n", + "35 walk_ASC_no_auto_othdiscr 3.266595 F\n", + "36 walk_ASC_no_auto_othmaint 1.287299 F\n", + "37 walk_ASC_no_auto_school 18.414557 F\n", + "38 walk_ASC_no_auto_shopping 2.376877 F\n", + "39 walk_ASC_no_auto_social 1.868092 F\n", + "40 walk_ASC_no_auto_univ 6.408967 F\n", + "41 walk_ASC_no_auto_work 5.767216 F\n", + "42 walk_ASC_no_auto_atwork 6.669213 F\n", + "43 walk_ASC_auto_deficient_eatout 3.274605 F\n", + "44 walk_ASC_auto_deficient_escort -0.902047 F\n", + "45 walk_ASC_auto_deficient_othdiscr 2.249407 F\n", + "46 walk_ASC_auto_deficient_othmaint 1.369040 F\n", + "47 walk_ASC_auto_deficient_school 3.257362 F\n", + "48 walk_ASC_auto_deficient_shopping 2.270173 F\n", + "49 walk_ASC_auto_deficient_social 2.870184 F\n", + "50 walk_ASC_auto_deficient_univ 4.505910 F\n", + "51 walk_ASC_auto_deficient_work 2.401042 F\n", + "52 walk_ASC_auto_deficient_atwork 0.925461 F\n", + "53 walk_ASC_auto_sufficient_eatout 1.551690 F\n", + "54 walk_ASC_auto_sufficient_escort -0.811607 F\n", + "55 walk_ASC_auto_sufficient_othdiscr 1.263348 F\n", + "56 walk_ASC_auto_sufficient_othmaint 0.799963 F\n", + "57 walk_ASC_auto_sufficient_school 0.647686 F\n", + "58 walk_ASC_auto_sufficient_shopping 0.731266 F\n", + "59 walk_ASC_auto_sufficient_social 1.707219 F\n", + "60 walk_ASC_auto_sufficient_univ 1.060766 F\n", + "61 walk_ASC_auto_sufficient_work 0.053265 F\n", + "62 walk_ASC_auto_sufficient_atwork 0.677216 F\n", + "63 bike_ASC_no_auto_eatout 0.868071 F\n", + "64 bike_ASC_no_auto_escort -0.716212 F\n", + "65 bike_ASC_no_auto_othdiscr -0.376423 F\n", + "66 bike_ASC_no_auto_othmaint 1.539433 F\n", + "67 bike_ASC_no_auto_school 12.098735 F\n", + "68 bike_ASC_no_auto_shopping 0.834156 F\n", + "69 bike_ASC_no_auto_social 0.020583 F\n", + "70 bike_ASC_no_auto_univ 4.294516 F\n", + "71 bike_ASC_no_auto_work 3.194009 F\n", + "72 bike_ASC_no_auto_atwork -0.907258 F\n", + "73 bike_ASC_auto_deficient_eatout -1.569111 F\n", + "74 bike_ASC_auto_deficient_escort -4.527928 F\n", + "75 bike_ASC_auto_deficient_othdiscr -0.092468 F\n", + "76 bike_ASC_auto_deficient_othmaint -1.518465 F\n", + "77 bike_ASC_auto_deficient_school -0.528068 F\n", + "78 bike_ASC_auto_deficient_shopping -0.875845 F\n", + "79 bike_ASC_auto_deficient_social 0.634521 F\n", + "80 bike_ASC_auto_deficient_univ -0.669235 F\n", + "81 bike_ASC_auto_deficient_work 0.253190 F\n", + "82 bike_ASC_auto_deficient_atwork -0.807408 F\n", + "83 bike_ASC_auto_sufficient_eatout -1.200347 F\n", + "84 bike_ASC_auto_sufficient_escort -5.063108 F\n", + "85 bike_ASC_auto_sufficient_othdiscr -1.071460 F\n", + "86 bike_ASC_auto_sufficient_othmaint -2.808302 F\n", + "87 bike_ASC_auto_sufficient_school -2.113469 F\n", + "88 bike_ASC_auto_sufficient_shopping -2.566210 F\n", + "89 bike_ASC_auto_sufficient_social -1.368071 F\n", + "90 bike_ASC_auto_sufficient_univ -1.939783 F\n", + "91 bike_ASC_auto_sufficient_work -1.580023 F\n", + "92 bike_ASC_auto_sufficient_atwork 15.720170 F\n", + "93 sr2_ASC_no_auto_all 0.000000 F\n", + "94 sr2_ASC_auto_deficient_eatout 0.588234 F\n", + "95 sr2_ASC_auto_deficient_escort 0.000000 F\n", + "96 sr2_ASC_auto_deficient_othdiscr 0.660151 F\n", + "97 sr2_ASC_auto_deficient_othmaint 0.262153 F\n", + "98 sr2_ASC_auto_deficient_school 0.124744 F\n", + "99 sr2_ASC_auto_deficient_shopping 0.244098 F\n", + "100 sr2_ASC_auto_deficient_social 1.855853 F\n", + "101 sr2_ASC_auto_deficient_univ -1.692235 F\n", + "102 sr2_ASC_auto_deficient_work -0.338031 F\n", + "103 sr2_ASC_auto_deficient_atwork -2.110242 F\n", + "104 sr2_ASC_auto_sufficient_eatout 0.862806 F\n", + "105 sr2_ASC_auto_sufficient_escort 0.000000 F\n", + "106 sr2_ASC_auto_sufficient_othdiscr 0.496846 F\n", + "107 sr2_ASC_auto_sufficient_othmaint 0.258179 F\n", + "108 sr2_ASC_auto_sufficient_school -1.606266 F\n", + "109 sr2_ASC_auto_sufficient_shopping 0.197707 F\n", + "110 sr2_ASC_auto_sufficient_social 0.523602 F\n", + "111 sr2_ASC_auto_sufficient_univ -1.859427 F\n", + "112 sr2_ASC_auto_sufficient_work -1.085746 F\n", + "113 sr2_ASC_auto_sufficient_atwork -1.445062 F\n", + "114 sr3p_ASC_no_auto_eatout 0.322000 F\n", + "115 sr3p_ASC_no_auto_escort -1.812927 F\n", + "116 sr3p_ASC_no_auto_othdiscr 0.272169 F\n", + "117 sr3p_ASC_no_auto_othmaint -0.803185 F\n", + "118 sr3p_ASC_no_auto_school -6.024083 F\n", + "119 sr3p_ASC_no_auto_shopping -0.279789 F\n", + "120 sr3p_ASC_no_auto_social -1.403690 F\n", + "121 sr3p_ASC_no_auto_univ -6.056001 F\n", + "122 sr3p_ASC_no_auto_work -0.583127 F\n", + "123 sr3p_ASC_no_auto_atwork 0.582663 F\n", + "124 sr3p_ASC_auto_deficient_eatout 0.046052 F\n", + "125 sr3p_ASC_auto_deficient_escort -0.408188 F\n", + "126 sr3p_ASC_auto_deficient_othdiscr 1.047097 F\n", + "127 sr3p_ASC_auto_deficient_othmaint -1.349392 F\n", + "128 sr3p_ASC_auto_deficient_school 0.714957 F\n", + "129 sr3p_ASC_auto_deficient_shopping -0.073370 F\n", + "130 sr3p_ASC_auto_deficient_social 1.500724 F\n", + "131 sr3p_ASC_auto_deficient_univ -1.727742 F\n", + "132 sr3p_ASC_auto_deficient_work -0.852704 F\n", + "133 sr3p_ASC_auto_deficient_atwork -2.514658 F\n", + "134 sr3p_ASC_auto_sufficient_eatout 0.846860 F\n", + "135 sr3p_ASC_auto_sufficient_escort -0.057413 F\n", + "136 sr3p_ASC_auto_sufficient_othdiscr 0.588502 F\n", + "137 sr3p_ASC_auto_sufficient_othmaint -0.075499 F\n", + "138 sr3p_ASC_auto_sufficient_school -1.020193 F\n", + "139 sr3p_ASC_auto_sufficient_shopping -0.077571 F\n", + "140 sr3p_ASC_auto_sufficient_social 0.506179 F\n", + "141 sr3p_ASC_auto_sufficient_univ -1.904710 F\n", + "142 sr3p_ASC_auto_sufficient_work -1.469970 F\n", + "143 sr3p_ASC_auto_sufficient_atwork -1.652174 F\n", + "144 walk_transit_ASC_no_auto_eatout 2.593637 F\n", + "145 walk_transit_ASC_no_auto_escort -2.217208 F\n", + "146 walk_transit_ASC_no_auto_othdiscr 2.243778 F\n", + "147 walk_transit_ASC_no_auto_othmaint 2.564346 F\n", + "148 walk_transit_ASC_no_auto_school 21.383749 F\n", + "149 walk_transit_ASC_no_auto_shopping 2.106748 F\n", + "150 walk_transit_ASC_no_auto_social 1.381465 F\n", + "151 walk_transit_ASC_no_auto_univ 8.786037 F\n", + "152 walk_transit_ASC_no_auto_work 5.035417 F\n", + "153 walk_transit_ASC_no_auto_atwork 2.704188 F\n", + "154 walk_transit_ASC_auto_deficient_eatout -0.038963 F\n", + "155 walk_transit_ASC_auto_deficient_escort -4.960704 F\n", + "156 walk_transit_ASC_auto_deficient_othdiscr 0.953088 F\n", + "157 walk_transit_ASC_auto_deficient_othmaint -3.059726 F\n", + "158 walk_transit_ASC_auto_deficient_school 4.120708 F\n", + "159 walk_transit_ASC_auto_deficient_shopping -0.847657 F\n", + "160 walk_transit_ASC_auto_deficient_social 0.974445 F\n", + "161 walk_transit_ASC_auto_deficient_univ 3.136255 F\n", + "162 walk_transit_ASC_auto_deficient_work 0.653029 F\n", + "163 walk_transit_ASC_auto_deficient_atwork -2.998829 F\n", + "164 walk_transit_ASC_auto_sufficient_eatout -1.112691 F\n", + "165 walk_transit_ASC_auto_sufficient_escort -4.934847 F\n", + "166 walk_transit_ASC_auto_sufficient_othdiscr -0.806368 F\n", + "167 walk_transit_ASC_auto_sufficient_othmaint -1.547117 F\n", + "168 walk_transit_ASC_auto_sufficient_school 0.745909 F\n", + "169 walk_transit_ASC_auto_sufficient_shopping -2.203680 F\n", + "170 walk_transit_ASC_auto_sufficient_social -0.345376 F\n", + "171 walk_transit_ASC_auto_sufficient_univ 0.473116 F\n", + "172 walk_transit_ASC_auto_sufficient_work -0.891651 F\n", + "173 walk_transit_ASC_auto_sufficient_atwork -3.401027 F\n", + "174 drive_transit_ASC_no_auto_all 0.000000 F\n", + "175 drive_transit_ASC_auto_deficient_eatout 0.599806 F\n", + "176 drive_transit_ASC_auto_deficient_escort -1.153707 F\n", + "177 drive_transit_ASC_auto_deficient_othdiscr 0.319931 F\n", + "178 drive_transit_ASC_auto_deficient_othmaint -0.299432 F\n", + "179 drive_transit_ASC_auto_deficient_school 5.325265 F\n", + "180 drive_transit_ASC_auto_deficient_shopping -0.418492 F\n", + "181 drive_transit_ASC_auto_deficient_social 1.562720 F\n", + "182 drive_transit_ASC_auto_deficient_univ 1.850118 F\n", + "183 drive_transit_ASC_auto_deficient_work 0.100816 F\n", + "184 drive_transit_ASC_auto_deficient_atwork -998.819600 F\n", + "185 drive_transit_ASC_auto_sufficient_eatout -0.969516 F\n", + "186 drive_transit_ASC_auto_sufficient_escort -4.601425 F\n", + "187 drive_transit_ASC_auto_sufficient_othdiscr -0.378592 F\n", + "188 drive_transit_ASC_auto_sufficient_othmaint -2.624948 F\n", + "189 drive_transit_ASC_auto_sufficient_school 1.401350 F\n", + "190 drive_transit_ASC_auto_sufficient_shopping -2.171894 F\n", + "191 drive_transit_ASC_auto_sufficient_social -0.615856 F\n", + "192 drive_transit_ASC_auto_sufficient_univ 1.358775 F\n", + "193 drive_transit_ASC_auto_sufficient_work -1.004546 F\n", + "194 drive_transit_ASC_auto_sufficient_atwork -999.214660 F\n", + "195 taxi_ASC_no_auto_eatout_othdiscr_social 0.992300 F\n", + "196 taxi_ASC_no_auto_escort_othmaint_shopping 1.893900 F\n", + "197 taxi_ASC_no_auto_school_univ -7.000000 T\n", + "198 taxi_ASC_no_auto_work 4.729100 F\n", + "199 taxi_ASC_no_auto_atwork 4.102100 F\n", + "200 taxi_ASC_auto_deficient_eatout_othdiscr_social -3.131700 F\n", + "201 taxi_ASC_auto_deficient_escort_othmaint_shopping 0.176600 F\n", + "202 taxi_ASC_auto_deficient_school -0.333800 F\n", + "203 taxi_ASC_auto_deficient_univ 4.249200 F\n", + "204 taxi_ASC_auto_deficient_work -1.476600 F\n", + "205 taxi_ASC_auto_deficient_atwork -4.404600 F\n", + "206 taxi_ASC_auto_sufficient_eatout_othdiscr_social -3.037400 F\n", + "207 taxi_ASC_auto_sufficient_escort_othmaint_shopping -1.805500 F\n", + "208 taxi_ASC_auto_sufficient_school -2.429400 F\n", + "209 taxi_ASC_auto_sufficient_univ -0.313100 F\n", + "210 taxi_ASC_auto_sufficient_work -4.850900 F\n", + "211 taxi_ASC_auto_sufficient_atwork -2.880400 F\n", + "212 tnc_single_ASC_no_auto_eatout_othdiscr_social 1.685200 F\n", + "213 tnc_single_ASC_no_auto_escort_othmaint_shopping 1.860500 F\n", + "214 tnc_single_ASC_no_auto_school -7.000000 T\n", + "215 tnc_single_ASC_no_auto_univ -2.519000 F\n", + "216 tnc_single_ASC_no_auto_work 5.785500 F\n", + "217 tnc_single_ASC_no_auto_atwork 4.498200 F\n", + "218 tnc_single_ASC_auto_deficient_eatout_othdiscr_... -2.962300 F\n", + "219 tnc_single_ASC_auto_deficient_escort_othmaint_... 0.674800 F\n", + "220 tnc_single_ASC_auto_deficient_school -0.552400 F\n", + "221 tnc_single_ASC_auto_deficient_univ 1.022100 F\n", + "222 tnc_single_ASC_auto_deficient_work -0.801300 F\n", + "223 tnc_single_ASC_auto_deficient_atwork -3.762600 F\n", + "224 tnc_single_ASC_auto_sufficient_eatout_othdiscr... -2.323900 F\n", + "225 tnc_single_ASC_auto_sufficient_escort_othmaint... -1.450000 F\n", + "226 tnc_single_ASC_auto_sufficient_school -2.837500 F\n", + "227 tnc_single_ASC_auto_sufficient_univ 0.208800 F\n", + "228 tnc_single_ASC_auto_sufficient_work -4.194600 F\n", + "229 tnc_single_ASC_auto_sufficient_atwork -2.798800 F\n", + "230 tnc_shared_ASC_no_auto_eatout_othdiscr_social 0.646400 F\n", + "231 tnc_shared_ASC_no_auto_escort_othmaint_shopping 0.936100 F\n", + "232 tnc_shared_ASC_no_auto_school -7.000000 T\n", + "233 tnc_shared_ASC_no_auto_univ -5.811600 F\n", + "234 tnc_shared_ASC_no_auto_work 3.242900 F\n", + "235 tnc_shared_ASC_no_auto_atwork 3.367200 F\n", + "236 tnc_shared_ASC_auto_deficient_eatout_othdiscr_... -4.357600 F\n", + "237 tnc_shared_ASC_auto_deficient_escort_othmaint_... -0.386300 F\n", + "238 tnc_shared_ASC_auto_deficient_school -1.474600 F\n", + "239 tnc_shared_ASC_auto_deficient_univ 3.250000 F\n", + "240 tnc_shared_ASC_auto_deficient_work -2.143500 F\n", + "241 tnc_shared_ASC_auto_deficient_atwork -4.508900 F\n", + "242 tnc_shared_ASC_auto_sufficient_eatout_othdiscr... -3.663800 F\n", + "243 tnc_shared_ASC_auto_sufficient_escort_othmaint... -2.436500 F\n", + "244 tnc_shared_ASC_auto_sufficient_school -3.721900 F\n", + "245 tnc_shared_ASC_auto_sufficient_univ -0.906800 F\n", + "246 tnc_shared_ASC_auto_sufficient_work -5.357500 F\n", + "247 tnc_shared_ASC_auto_sufficient_atwork -3.539700 F\n", + "248 joint_walk_ASC_no_auto_all -0.212747 F\n", + "249 joint_walk_ASC_auto_deficient_all -1.960771 F\n", + "250 joint_walk_ASC_auto_sufficient_all -3.235216 F\n", + "251 joint_bike_ASC_no_auto_all -2.867160 F\n", + "252 joint_bike_ASC_auto_deficient_all -6.076415 F\n", + "253 joint_bike_ASC_auto_sufficient_all -6.376066 F\n", + "254 joint_sr2_ASC_no_auto_all 0.000000 T\n", + "255 joint_sr2_ASC_auto_deficient_all 0.000000 T\n", + "256 joint_sr2_ASC_auto_sufficient_all 0.000000 T\n", + "257 joint_sr3p_ASC_no_auto_all 0.563067 F\n", + "258 joint_sr3p_ASC_auto_deficient_all -1.884169 F\n", + "259 joint_sr3p_ASC_auto_sufficient_all -2.234826 F\n", + "260 joint_walk_transit_ASC_no_auto_all 0.622924 F\n", + "261 joint_walk_transit_ASC_auto_deficient_all -5.163448 F\n", + "262 joint_walk_transit_ASC_auto_sufficient_all -18.264534 F\n", + "263 joint_drive_transit_ASC_no_auto_all 0.000000 T\n", + "264 joint_drive_transit_ASC_auto_deficient_all -5.963222 F\n", + "265 joint_drive_transit_ASC_auto_sufficient_all -8.045285 F\n", + "266 joint_taxi_ASC_no_auto_all -4.579200 F\n", + "267 joint_taxi_ASC_auto_deficient_all -9.815700 F\n", + "268 joint_taxi_ASC_auto_sufficient_all -11.709900 T\n", + "269 joint_tnc_single_ASC_no_auto_all -4.491700 F\n", + "270 joint_tnc_single_ASC_auto_deficient_all -9.896100 F\n", + "271 joint_tnc_single_ASC_auto_sufficient_all -14.015900 T\n", + "272 joint_tnc_shared_ASC_no_auto_all -4.300200 F\n", + "273 joint_tnc_shared_ASC_auto_deficient_all -11.157200 F\n", + "274 joint_tnc_shared_ASC_auto_sufficient_all -13.205000 T\n", + "275 local_bus_ASC_eatout_escort_othdiscr_othmaint_... -0.090703 F\n", + "276 local_bus_ASC_school_univ -0.065086 F\n", + "277 local_bus_ASC_work 0.066895 F\n", + "278 walk_light_rail_ASC_eatout_escort_othdiscr_oth... 0.768955 F\n", + "279 walk_light_rail_ASC_school_univ 1.681400 F\n", + "280 walk_light_rail_ASC_work 0.825557 F\n", + "281 drive_light_rail_ASC_eatout_escort_othdiscr_ot... 0.768955 F\n", + "282 drive_light_rail_ASC_school_univ 1.681400 F\n", + "283 drive_light_rail_ASC_work 0.825557 F\n", + "284 walk_ferry_ASC_eatout_escort_othdiscr_othmaint... 0.940124 F\n", + "285 walk_ferry_ASC_school_univ 2.020232 F\n", + "286 walk_ferry_ASC_work 0.933226 F\n", + "287 drive_ferry_ASC_eatout_escort_othdiscr_othmain... 0.940124 F\n", + "288 drive_ferry_ASC_school_univ 2.020232 F\n", + "289 drive_ferry_ASC_work 0.933226 F\n", + "290 express_bus_ASC_eatout_escort_othdiscr_othmain... 0.969232 F\n", + "291 express_bus_ASC_school_univ 0.324969 F\n", + "292 express_bus_ASC_work -0.516547 F\n", + "293 heavy_rail_ASC_eatout_escort_othdiscr_othmaint... 0.770612 F\n", + "294 heavy_rail_ASC_school_univ 0.962004 F\n", + "295 heavy_rail_ASC_work 0.647730 F\n", + "296 commuter_rail_ASC_eatout_escort_othdiscr_othma... 0.727019 F\n", + "297 commuter_rail_ASC_school_univ 1.033621 F\n", + "298 commuter_rail_ASC_work 0.725503 F\n", + "299 walk_transit_CBD_ASC_eatout_escort_othdiscr_ot... 0.525000 F\n", + "300 walk_transit_CBD_ASC_school_univ 0.672000 F\n", + "301 walk_transit_CBD_ASC_work 0.804000 F\n", + "302 walk_transit_CBD_ASC_atwork 0.564000 F\n", + "303 drive_transit_CBD_ASC_eatout_escort_othdiscr_o... 0.525000 F\n", + "304 drive_transit_CBD_ASC_school_univ 0.672000 F\n", + "305 drive_transit_CBD_ASC_work 1.100000 F\n", + "306 drive_transit_CBD_ASC_atwork 0.564000 F" ] }, - "execution_count": 5, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "tour_mode_choice_coefficients = pd.read_csv(example_dir + 'configs/tour_mode_choice_coeffs.csv')\n", + "tour_mode_choice_coefficients = pd.read_csv(example_dir + 'configs/tour_mode_choice_coefficients.csv')\n", "\n", "tour_mode_choice_coefficients" ] @@ -3613,7 +3621,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -3789,45 +3797,45 @@ " \n", " \n", " 24\n", - " # FIXME no transit subzones so all zones short...\n", + " # FIXME no transit subzones for ONE_ZONE versi...\n", " NaN\n", " NaN\n", " \n", " \n", " 25\n", " NaN\n", - " _walk_transit_origin\n", - " True\n", + " _origin_distance_to_transit\n", + " reindex(land_use.access_dist_transit, df[orig_...\n", " \n", " \n", " 26\n", " NaN\n", - " _walk_transit_destination\n", - " True\n", + " _destination_distance_to_transit\n", + " reindex(land_use.access_dist_transit, df[dest_...\n", " \n", " \n", " 27\n", " NaN\n", " walk_transit_available\n", - " _walk_transit_origin & _walk_transit_destination\n", + " (_origin_distance_to_transit > 0) & (_destinat...\n", " \n", " \n", " 28\n", " NaN\n", " drive_transit_available\n", - " _walk_transit_destination & (df.auto_ownership...\n", + " (_destination_distance_to_transit > 0) & (df.a...\n", " \n", " \n", " 29\n", " NaN\n", " origin_walk_time\n", - " shortWalk*60/walkSpeed\n", + " _origin_distance_to_transit*60/walkSpeed\n", " \n", " \n", " 30\n", " NaN\n", " destination_walk_time\n", - " shortWalk*60/walkSpeed\n", + " _destination_distance_to_transit*60/walkSpeed\n", " \n", " \n", " 31\n", @@ -4207,7 +4215,7 @@ "21 NaN \n", "22 NaN \n", "23 NaN \n", - "24 # FIXME no transit subzones so all zones short... \n", + "24 # FIXME no transit subzones for ONE_ZONE versi... \n", "25 NaN \n", "26 NaN \n", "27 NaN \n", @@ -4299,8 +4307,8 @@ "22 terminal_time \n", "23 dest_density_index \n", "24 NaN \n", - "25 _walk_transit_origin \n", - "26 _walk_transit_destination \n", + "25 _origin_distance_to_transit \n", + "26 _destination_distance_to_transit \n", "27 walk_transit_available \n", "28 drive_transit_available \n", "29 origin_walk_time \n", @@ -4390,12 +4398,12 @@ "22 reindex(land_use.TERMINAL, df[dest_col_name]) \n", "23 reindex(land_use.density_index, df[dest_col_na... \n", "24 NaN \n", - "25 True \n", - "26 True \n", - "27 _walk_transit_origin & _walk_transit_destination \n", - "28 _walk_transit_destination & (df.auto_ownership... \n", - "29 shortWalk*60/walkSpeed \n", - "30 shortWalk*60/walkSpeed \n", + "25 reindex(land_use.access_dist_transit, df[orig_... \n", + "26 reindex(land_use.access_dist_transit, df[dest_... \n", + "27 (_origin_distance_to_transit > 0) & (_destinat... \n", + "28 (_destination_distance_to_transit > 0) & (df.a... \n", + "29 _origin_distance_to_transit*60/walkSpeed \n", + "30 _destination_distance_to_transit*60/walkSpeed \n", "31 NaN \n", "32 (reindex(land_use.TOTPOP, df[orig_col_name]) +... \n", "33 (reindex(land_use.TOTPOP, df[dest_col_name]) +... \n", @@ -4456,7 +4464,7 @@ "88 (odt_skims['SOV_DIST'] + dot_skims['SOV_DIST']) " ] }, - "execution_count": 6, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -4478,15 +4486,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "COEFFICIENTS: tour_mode_choice_coeffs.csv\n", - "COEFFICIENT_TEMPLATE: tour_mode_choice_coeffs_template.csv\n", + "COEFFICIENTS: tour_mode_choice_coefficients.csv\n", + "COEFFICIENT_TEMPLATE: tour_mode_choice_coefficients_template.csv\n", "CONSTANTS:\n", " TNC_shared_IVTFactor: 1.5\n", " TNC_shared_baseFare: 2.2\n", @@ -4560,6 +4568,7 @@ " maxCbdAreaTypeThresh: 2\n", " max_waitTime: 50\n", " min_waitTime: 0\n", + " ridehail_wait_time_multiplier: 1.5\n", " shortWalk: 0.333\n", " short_i_wait_multiplier: 2\n", " upperAM: 10\n", @@ -4684,7 +4693,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -4727,14 +4736,14 @@ " 0\n", " 0\n", " 4\n", - " 2\n", + " 4\n", " \n", " \n", " DRIVEALONEFREE\n", " 0\n", " 0\n", - " 3\n", - " 5\n", + " 4\n", + " 6\n", " \n", " \n", " SHARED2FREE\n", @@ -4747,29 +4756,36 @@ " SHARED3FREE\n", " 0\n", " 0\n", - " 3\n", + " 2\n", " 1\n", " \n", " \n", " TAXI\n", " 0\n", " 0\n", + " 1\n", + " 4\n", + " \n", + " \n", + " TNC_SHARED\n", + " 0\n", + " 0\n", + " 1\n", " 0\n", - " 5\n", " \n", " \n", " TNC_SINGLE\n", " 0\n", " 0\n", - " 6\n", + " 7\n", " 9\n", " \n", " \n", " WALK\n", - " 8\n", + " 9\n", " 2\n", - " 32\n", - " 45\n", + " 34\n", + " 44\n", " \n", " \n", " WALK_HVY\n", @@ -4782,15 +4798,15 @@ " WALK_LOC\n", " 0\n", " 0\n", - " 24\n", - " 12\n", + " 20\n", + " 10\n", " \n", " \n", " WALK_LRF\n", " 0\n", " 0\n", - " 18\n", - " 14\n", + " 17\n", + " 15\n", " \n", " \n", "\n", @@ -4799,19 +4815,20 @@ "text/plain": [ "tour_category atwork joint mandatory non_mandatory\n", "tour_mode \n", - "BIKE 0 0 4 2\n", - "DRIVEALONEFREE 0 0 3 5\n", + "BIKE 0 0 4 4\n", + "DRIVEALONEFREE 0 0 4 6\n", "SHARED2FREE 0 1 1 1\n", - "SHARED3FREE 0 0 3 1\n", - "TAXI 0 0 0 5\n", - "TNC_SINGLE 0 0 6 9\n", - "WALK 8 2 32 45\n", + "SHARED3FREE 0 0 2 1\n", + "TAXI 0 0 1 4\n", + "TNC_SHARED 0 0 1 0\n", + "TNC_SINGLE 0 0 7 9\n", + "WALK 9 2 34 44\n", "WALK_HVY 0 0 4 1\n", - "WALK_LOC 0 0 24 12\n", - "WALK_LRF 0 0 18 14" + "WALK_LOC 0 0 20 10\n", + "WALK_LRF 0 0 17 15" ] }, - "execution_count": 21, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -4826,12 +4843,12 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAALWCAYAAAA3VGCxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde3RU5b3/8c+QMYQQCCEDibkBQZCLIGIoNlYSzBSp9Wi0LSIFiYAUqXK4iKXUG7W0U5RGoSAWaLzWHs6p4t3qiEk8oDUYaGkotx4Q+RHAJNxvIcn+/dHlrI4JJLMZmGcy79darMXe+5nn+c539kI/a+/Z47AsyxIAAAAAwBhtQl0AAAAAAMAfQQ0AAAAADENQAwAAAADDENQAAAAAwDAENQAAAAAwDEENAAAAAAxDUAMAhLVTp07J4XBoz549Rs29bds2derUKeg1AQAiA0ENACJIXFyc70+bNm3Url073/ZLL710wde/5ppr5HA4tHXrVr/9I0eOlMPh0CeffHLBa/i6PXv2aPz48UpKSlLHjh3Vr18/PfbYYzp16tR5zdu7d28dOnQoSFUCACINQQ0AIsixY8d8fzIyMvTGG2/4tn/4wx8Gda36+vom9/fu3VvPP/+8b3vfvn3atGmT4uPjg7p+Sxw4cMAXHsvKynTkyBG9/fbbqqys1Oeff37R6wEA4CsENQCAz8mTJ/XjH/9Yl156qdLS0jR79mydOXNGkrRs2TK53W7f2K/fFjh69GhNmzZNI0aMUPv27fXxxx83ucbYsWP10ksvybIsSdKLL76oUaNGyel0tqgOSZo/f76SkpKUlpamF198sdF7mD59utLT05WcnKz77rtPp0+fbrKWBQsWKDk5WUVFRcrIyJAkde/eXUuXLtXll1/uG/fOO++oZ8+eSkhI0IwZM3z76+vr9cgjjygjI0NJSUmaMGGCjh49KknasmWL33uqqqrSnXfeqeTkZCUkJOj222/3HXv11Vc1cOBAderUSdddd502b97cZL0AgMhBUAMA+DzyyCP629/+pk2bNumzzz5TcXGxFixY0OLXv/jii3rsscd09OhRDRkypMkxPXr0UEZGhoqLiyVJL7zwgu68884W17F69WotXbpUJSUl2rJli9555x2/186YMUN79uzRpk2btHXrVm3btk0ej6fJWrxer773ve/J4XCc832988472rBhg8rLy1VUVOSr/ZlnntGqVav00Ucfafv27Tpw4IBmzpzZ5By33367LMvSli1btH//fv34xz+WJH3yySeaOnWqioqKVF1drXHjxik/P191dXXnrAkA0LoR1AAAPi+99JLmzZsnl8ulpKQkPfjgg3rhhRda/Prvf//7Gjp0qNq0aaO2bdueddydd96p559/Xhs3blRDQ4OuuuqqFtexatUq3X333erTp4/i4uL0yCOP+F5XV1en3//+93rqqafUqVMnxcfHa86cOfrjH//YZB3V1dW69NJLm31fc+fOVceOHdWjRw8NGzZMGzdu9NU5e/ZsdevWTR07dtT8+fP9rhZ+ZefOnfroo4+0dOlSderUSdHR0Ro2bJikf4W9e++9V1dffbWioqI0efJknT59Wp999lmzdQEAWi9n80MAAJHAsizt27dP3bp18+3r1q2b/t//+38tniM9Pb1F437wgx/oZz/7mdq2bdvoalpzdezdu1d5eXl+x76yd+9enTlzRv379/eb799vQfx3iYmJqqysbLbe5ORk399jY2N17Ngx33pfr/PkyZOqqanxe/0XX3yhrl27qkOHDo3m/vzzz7Vq1So9/vjjvn21tbUB9R0A0PpwRQ0AIElyOBxKTk72e4jG7t27lZqaKklq3769Tpw44Tu2b9++Judoifj4eA0fPlwrV65s9BCT5uq49NJL9cUXX/gd+8qll14qp9Opf/7znzp06JAOHTqkw4cPq7q6usk63G63XnnllRbV3JSUlJRGdbZr106dO3f2G5eenq4DBw74At7Xj/385z/31Xvo0CGdOHFCt912m+26AADhj6AGAPC54447NG/ePFVXV+vAgQOaP3++xo4dK0kaNGiQNmzYoIqKCp04cUI///nPz2utJ554QiUlJUpJSQmojlGjRmnFihXatm2bjh075lfHJZdcogkTJug///M/VVVVJcuy9MUXX+j9999vsoYHHnhAlZWVmjhxoi/8ffHFF7rvvvsa/YRAU+644w498cQT2r17t44ePaoHH3xQY8aMaRRYv7pl8t5779Xhw4dVW1ur0tJSSdLkyZO1ePFirV+/XpZl6dixY3r99df9QjEAIPIQ1AAAPj//+c/Vr18/9e/fX4MGDdK1116rBx54QJI0YMAAPfDAA7ruuuvUp08f5ebmntda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e42OrV69Wg6HQ05ni746fdFNmjRJubm5oS4DABBBCGoAgIsmIyNDb7zxhvbv3++3/3e/+526desWoqourtra2lCXAAAIAwQ1AMBF06tXL11zzTV69tlnfft2796t999/X3fddZdv38GDBzV27FhlZGSoXbt2uvzyy7Vw4UL9+/OvCgoK5Ha7fSGvY8eOuuWWW/Tll1/6rbl48WKlpaUpNjZWN9xwg3bv3u13vLm1Hn30Ua1cuVIlJSVyOBxyOBy++isrKzV69Gh16tRJ7dq1U25urtavX++b+6vbLN966y1961vfUkxMjJ555hl16NBBf/jDH/zq2LVrl9q0aaPi4uLzaTEAoJUw8x4TAECrNXnyZM2bN08PPPCAHA6HVqxYoby8PL8raqdPn9aAAQM0c+ZMJSQkaO3atZoyZYo6d+7sF+jKysrUpUsXvfXWWzpy5IjuuOMO3X///XruueckSa+99ppmzJihBQsW6KabbtJHH32k2bNn+9XT3Fr333+/tm/frp07d+qVV16RJMXHx8uyLOXn5+v06dN68803FR8fr1/84hf69re/re3bt8vlcvnWmDVrlhYsWKABAwbokksu0d///nctX75cY8aM8Y1ZuXKlLrvsMuXk5FyQvgMAwowFAMBFMH78eCsvL886efKk1blzZ2vNmjVWXV2dlZqaav3pT3+yioqKrKioqLO+ftq0aZbb7fabz+VyWadOnfLt+9WvfmUlJyf7tq+99lprzJgxfvPMmjXLkmR98cUXLV5r4sSJVk5Ojt8Yr9drSbIqKip8+06dOmUlJydb8+bNsyzLsj788ENLkvX888/7vfazzz6zJFnbtm2zLMuy6urqrLS0NGvBggVnrQkAEFm49REAcFHFxMRo3LhxWr58ud566y3V1dXpP/7jP/zGNDQ0yOPxaNCgQXK5XIqLi9OyZcv0+eef+43r27ev2rZt69tOTU31+/7b5s2blZ2d7feab33rW7bW+rqKigolJiaqX79+vn1t27bV0KFDVVFR4Tf2G9/4ht/24MGDlZWVpRUrVkiS3nnnHe3fv1/jx48/55oAgMhBUAMAXHQ/+tGP9Morr2jBggW66667dMkll/gdX7hwoX71q1/pvvvu0/vvv6+NGzdq0qRJjR7EER0d7bftcDj8vsf21b5zaelaTWlqbsuyGu1v3759o3FTpkzRs88+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DjSa52xrpaen67XXXpMkffrpp6qsrNQrr7wiSVq6dKkeeughzZkzRxUVFZo9e7bmzJmjlStX+s29aNEide3aVR9//LGee+45TZkyRV6vVzt37vSN+ec//6mSkhLdfffdzfYTAGA4CwCAcxg/fryVl5dnWZZljR492ho0aJBVX19vWZZlSbJeeOEFy+v1WpKsiooK3+tOnTplJScnW/PmzbMsy7I+/PBDS5L1pz/9yTemsrLSkmS9++6756yhW7du1i233OLbrq+vtzp06GDddNNNfvs6depkLV68+KzzlJeXW5KsPXv2tLim5cuXW+3bt7dqamp8YzZt2mRJsh577LEWr/XRRx9ZkqydO3f6jUtLS7Nmz57tt2/69OlWjx49/N7/9ddf32iNAQMGWD/72c9823PmzLH69et31poAAOGDK2oAgBbzeDzasmWLnn32Wb/9FRUVSkxMVL9+/Xz72rZtq6FDh6qiosJv7KBBg3x/T05OVlRUlPbv3y9JmjJliuLi4nx/du/e7Rt75ZVX+v7epk0bdenSRQMHDvTb17VrV78rXcXFxbrhhhuUnp6uDh066Fvf+pYk6fPPP29xTZs3b1bfvn2VkJDgG3PFFVcoPj7eb46WrvXvjhw5oj179mjYsGF++3Nycv5/e3ceVlW99///tRHJEFEUTdHEUNGcmhRNMyppPGoeG241U2+tLL2rr5qzOVWKI+VwjNs5PZ1Op+PNMbHOiZvChEoSh9QjaINDhgIihIBM+/eHP/ctMujebllrwfNxXVzX2usDe798swXe67PWZ+mXX35Rbm6uY19ISEiZrx89erTWr1+v4uJiFRUVacOGDcymAUA1QaMGALhmgYGBGjdunGbMmKGcnJxSYzabrczn2+32Mvu9vLzKfF5JSYkkae7cudq7d6/jIyAgwPE5tWvXLvN65e279FzHjx/XE088oVatWumjjz7S999/r61bt0oquxhHZZnK+zdcyZnXKs+Vz2+328t8Tt26dcvse/7555WVlaXo6Ght27ZNmZmZGjZs2FVfDwBgfjRqAACnTJ06VSUlJVqwYIFjX8eOHZWenl7q+rALFy5o165d6tix4zU/d5MmTdSmTRvHh6enp8s5ExMTlZeXp3fffVe9evVSu3btHLNkzujYsaMOHTpU6jq6gwcPKisry6nXutQMFhcXO/b5+vqqRYsW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48dLKn00RpLefvttzZgxw6hoAAADZGRkKDk5WcnJyUpKStLvv/+uDRs2GB3LtK51lmPfvn38Af3/o2auOXPmjObNm6fBgwere/fuKigo0NKlS+Xt7a0xY8bI05P5oquhQrCU1NRUx/YPP/xQaiw7O7uq41hCenq6Nm/erLNnz+rOO+9U//79HT8cFy5cqEmTJhmc0Jx+/fVXbdy4UTabTf/5n/+pv//970pMTFSzZs00duxYtWjRwuiIqCYuv5F6eVhxtKzt27crJSVFycnJqlWrltq1a6fg4GA9+OCDLCZyFcxyOI+auaZJkyZ688039c477ygrK0tff/212rRp41jpHFdHowZLqexCXS7iLd+qVavUvXt3BQcHKzY2VrNnz9bkyZNVr149paenGx3PtP77v/9b/fr1U35+vubOnavnnntOY8aM0e7du7Vu3TqWoofbcDN156WlpalHjx4aPny4/Pz8jI5jKdOnT9e8efNUWFhYZpaDm12Xj5q55qeffpIkDR06VCtWrFCXLl3Uu3dvx35+9l0djRos5cKFC/r5558d95+7tC1dXKYZZWVnZ+uRRx6RdPHI/I4dOzRr1ixNmjSJ5rYSeXl56tq1q6SLt9Po1auXJKlr167629/+ZmQ0VDMPPPBAmX05OTmqW7cu/0crwBF51zHL4Txq5ppNmzY5tgMDA5WVlVVq36xZs4yIZSk0arCUBg0aOG4Oe/n2pccoq7i4WAUFBfLy8pIk3X///WrQoIHeeecdXbhwweB05lVSUuLYvnLVvaKioqqOg2rsk08+0b333qvmzZursLBQ8+bN0y+//KJatWrptddeq/DaGMAVzHI4j5q5prJGLCUlpQqTWBeNGixl9uzZRkewnIceekhHjx5Vhw4dHPu6dOmi8ePHa/PmzQYmM7dHH31U+fn5qlOnjh599FHH/tTUVHXu3NnAZKhuEhIS9NRTT0mS4uLiJF28JubUqVNauXIljRrcilkO51Ez94uIiNCqVauMjmF6NGqwlEOHDlU6fnkzgosqugfTbbfdpjfffLOK01jHww8/XO7+pk2basSIEVUbBtWap6en4xTHvXv3qmfPnvLw8FCLFi1KzewC7sAsh/OoGYxCowZL2bp1a5l9NptNx44dU0ZGhv76178akMr8Dhw4oM8//1ynTp2SJDVv3lyPPfaYOnbsaHAyc6Nu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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2oAAALWCAYAAAA3VGCxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABglklEQVR4nO3dCXhU1cE/4BOICIhgBASDKy5VFLUURXFBBW1rrcUubnUrbmirFa0V993GhaJYtypFa1fbWqpWrU1VaMUFRazLp7gvn7KjiBsF8uec/idfAgmQMMncZN73eebJzJ3J3JOTO3fmN2crqVoqAAAAkBltCl0AAAAAahPUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAOgRSspKQmvvvpqpp777bffDp06dQqLFy9uglIBUAwENYAiEwNE7tKmTZvQoUOH6tu//vWvm2y/e+65Zwo+zz77bK3tQ4cOTdsfeeSRJtt3fd5///1wzDHHhPXXXz+svfbaYauttgoXXHBB+Pjjj1freTfaaKOwYMGC0LZt2zyVFIBiI6gBFJkYIHKXGCjuueee6tvf/e5387KP+lqSttxyy/DLX/6y+vacOXPC448/Hrp3756X/TbE3Llzwy677BI+/fTT8Nhjj4WPPvoo/P3vfw8ffPBBeO2115q9PABQk6AGQPL555+HU089NZSXl6dLvB63RbfddlvYbbfd6u0WePTRR4cTTzwx7LfffmGttdYKDz/8cJ21GoPg73//++og99vf/jYceOCBoV27dqtUjuiqq65KLWDxvl/84he1nj8+7kc/+lEKoD169AjDhw9PQawuP/3pT1Mr2q9+9auwySabpG0bbrhhuPbaa8N2221X/bjKysqwxRZbhLKysvD9738/VFVVpe1LliwJl156adh4443DeuutF4488sjw4YcfpvvefPPNVD+LFi2qDoXf+973Upnj88RWxJx777037LDDDmGdddYJAwcODP/+978dkQAIagD812WXXZZat6ZOnZq6Jz755JMpiKyq3/zmN+Gcc85JLVPLhrqcGFT69OkTHnzwwXQ7tq7FgLOq5XjggQfC1VdfnVq+XnnllRSiajrzzDPDtGnT0u/GEPm///u/4eKLL66zLPF3v/nNb6bunysSg9TkyZNTWe68887wt7/9rTq8xksMpa+//npqkfzBD35Q53McccQR4ZNPPgkvvPBCmDlzZhgxYkTaPmXKlDBs2LBw8803p9bFE044IRxwwAG1gikAxUmLGgBJHJ92/vnnp9ah2BUxjtW64447Vrl2vvGNb4Rdd901BZ/27dvX+7gYzGJAe/nll1M3w9j9cFXLEYNSbJnadtttU8vdhRdeWP17saXrlltuCaNHjw7rrrtuai07++yzw+9+97s6yxGDUWyZW5mRI0em1q7YSrfXXnulEJgr52mnnRZ69+6dxvf95Cc/SfvKtaLVHAd3//33h5tuuim1pq2xxhph0KBB6b5Y3hjOBgwYkMazHXXUUWHNNddMQRWA4lZa6AIAkA3vvfde6saXE6/HbasqdhtcFbEV6/TTTw9du3ZNLU0NKUf8+aUvfanWfTmzZs1KrVY174/hrb7xcnH/MUStTM+ePauvd+zYMbWc1VfOGNJmzJhR6/ffeeedFBxjSFvWW2+9FW6//fZw3XXXVW9buHBhg+odgNZJixoA1d0SY3CoOcV83BbF1qsYgnKmT5++XK3FMVmrIoadr371q+HGG2+sM6itqByxBSwGn5r35XTr1i3NYBm7F8aWuniJY8ZywWpZQ4YMCX/+85/TWLPGqKucpaWlaWzcsgE2jlGL5VlWvC92F82VN15iPR966KGNKhMArYegBkASw0EcCxZbpmbPnp3Gdh1++OHpvu233z4FoNjt77PPPqvV5bAxLr/88jBhwoTqSTxWtRwHHXRQGhf24osvpkBz0UUX/d8b2tIul8cdd1wa/xXHgUVxjFpuTNmyYrfF+fPnp+6GucAVHx+3r8qEHrGcsZvlG2+8kcJg7GZ58MEHp7BWUwyXMZiedNJJYd68eeE///lPmDhxYrovljd2iXziiSdS619cFuCvf/1rGucHQHET1ABIzj333NC/f/8042Hfvn1Dv3790rbctPpx3FhshYozINY3WUhDWqPqe44VlSMGnjgL5N577x0233zz9LOmK664Im3feeedQ+fOnVN541i4usTuiJMmTUpjxuIYsTimbfDgwaFLly7pOVYmTgISWwT32GOPsOmmm6ZxeTW7MNYUx9jF/cR12uLYu2uuuSZtj39nHKcWJyGJXSPjfmMQBYCSqtw8wwAAAGSCFjUAAICMEdQAAAAyRlADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAMAAMgYQQ0AACBjBDUAAICMEdQAAAAyRlADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAMAAMgYQQ0AACBjBDUAAICMEdQAAAAyRlADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAMAAMgYQQ0AACBjBDUAAICMEdQAAAAyRlADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQDIo0022SRceuml6hSA1SKoAZBJ06dPD+3btw89e/YM//nPf2rd9+6774aSkpLwyCOPrPA5zjvvvPT7NS1ZsiSsu+669W6/4IIL8vMHAMBqENQAyKRf/OIX4Wtf+1ro2rVr+Mtf/tKo5xgyZEiYMWNGeP7556u3TZkyJYWyzz77bLnt8+bNC4MHD27UvhYuXNio3wOAughqAGRODFK33HJLOProo8NRRx0Vfv7zn9e6f8MNN0w/99prr9SyFrsb1mWXXXYJHTt2DP/4xz+qtz300ENh0KBBYffdd19u+1prrRV23nnndPv2228Pffr0CWuuuWbYYIMNwrnnnhsWLVpU/fg999wzHHPMManVbv311w+9evWqswyVlZWhS5cuYdSoUY2rDACKkqAGQOY8+OCD4eOPPw5f/epXwxFHHJG6OL7++uu1Wr+iP/3pT+H9998PkydPrvN52rVrF3bbbbflAtnee++dLstuj+Et/s5f//rXMGzYsLTv5557LoWs66+/Plx00UW1nv/OO+8Ms2bNSs8Tf39Zv/71r8PQoUPDjTfeGE4//fTVqhMAiktJ1VKFLgQA1HTggQemVrLRo0en2/vtt1/YYYcdwuWXX149Ri22qj388MOpZWtFrrzyynDZZZeFOXPmhPiWV1ZWFiZNmpRa7WLLWs3tMYjFQBUDW2wli0Es59prrw0jR44MH374YQpzcb/vvfdeeOmll0KbNv/3vWcs97HHHpvG111yySXhj3/8Y9hnn338gwFokNIGPRoAmlhsIbv33ntrtZLFLpA//OEPw8UXXxxKSxv21hXHnJ155pnp+WLXxdgVsm/fvum+NdZYo3p7bMGLY9qiF154IRx88MG1nieGujiu7bXXXgtbb7112valL32pVkjLiV01Z86cGR599NH0GABoKEENgEwZO3ZsCk79+/evtX3x4sXh7rvvDt/85jcb9Hxf/OIX02yOsXtifI7YEhbHteXCV2579+7dw3bbbVf9e7nH5OQ6oNTcHse01Tc2Lrb2xb+lX79+yz0XAKyMMWoAZEbsjnjrrbeGs88+O0ydOrXW5fDDD6+eVCR2PYxiwFqZ2OIVJx3JjSOLY9Nylt2eC1TbbLNNmDBhQq3nmThxYujQoUPo3bv3SvcZW+xiULvrrrvC8ccfXx3yAGBVCWoAZMYDDzwQ3n777XDCCSeEbbfdttble9/7Xvj73/8e3nzzzdCtW7fQqVOnNOlIXG8tTqu/su6Pjz32WHj88cdrBbV4Pbe95rT8Z511VpqopKKiIkybNi2NVbvwwgvT+LVcSFyZXNi77777UtljCAWAVSWoAZAZN998cxgwYEDYaKONlrsvdlOM3RNji1tsJYuzMMYAFScVid0bVySGsM8//zz9/pZbblm9PU6/v84666Q10HLj03KTl8R13OIU/TEkjhgxIpx00kkNXgz7C1/4QgprscUuziC5Ki2AABCZ9REAACBjtKgBAABkjKAGAACQMYIaAABAxghqAAAAGSOoAQAAZIygBgAAkDGlhdz5e++9V8jdZ0JctHX27NmFLkYmqRv14pjxWnKecf7NGu9N6sUx47WUT+Xl5fXep0UNAAAgYwQ1AACAjBHUAAAAMkZQAwAAyJiCTiYCANBYi487oNkrb0Yz76/tLXc38x6BrNCiBgAAkDGCGgAAQMYIagAAABkjqAEAAGSMoAYAAJAxghoAAEDGCGoAAACtdR21e++9Nzz00EOhpKQkbLjhhuGkk04K7dq1y9fTAwAAFI28tKjNnTs33H///aGioiKMGjUqLFmyJEyaNCkfTw0AAFB08tb1MYazhQsXhsWLF6efZWVl+XpqAACAopKXro/rrrtu+PrXvx5OPPHE1N1x++23TxcAAAAarqRqqYb/Wm0LFixIXR5HjBgROnbsGH7605+GnXfeOeyxxx61HldZWZkuUewmGVveil1paWlYtGhRoYuRSepGvThmvJacZ5x/V2TGgQMLVEPNp8efW8ZQEu/Z6sYx0zgrmtMjLy1qzz33XFhvvfVC586d0+0BAwaEadOmLRfUhgwZki45s2fPzsfuW7Ru3bqpB3XjmPF6cp5xDs4U703Z0VI+Kzlm1I1jpnHKy8ubdoxafHG+8sor4fPPPw+xgS4Gt169euXjqQEAAIpOXlrUtthii9TV8cwzzwxt27YNm2yySa2WMwAAAAqwjtpBBx2ULgAAAGRken4AAADyo01+ngYAAIB8EdQAAAAyRlADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAMAAMgYQQ0AACBjBDUAAICMEdQAAAAyRlADAADImNJ8PtnHH38cbrrppvDOO++EkpKScOKJJ4Ytt9wyn7sAAABo9fIa1MaNGxd22GGHcPrpp4dFixaFzz//PJ9PDwAAUBTy1vXxk08+Cf/zP/8T9t5773S7tLQ0rLXWWvl6egAAgKKRtxa1mTNnhs6dO4cbbrghvPXWW6F3797h6KOPDu3bt8/XLgAAAIpCSdVS+Xii1157LZxzzjnhkksuCVtssUXqBtmhQ4dwyCGHVD+msrIyXaKKioqwcOHCfOy6RYstj7GbKOrGMeP15DzjHJwVLeW9acaBAwtdhCbX48+TCl2EVnXMFIK6US8r0q5du6ZvUevatWu6xJAW7bzzzmH8+PG1HjNkyJB0yZk9e3a+dt9idevWTT2oG8eM15PzjHNwpnhvyo6W8lnJMaNuHDONU15e3vRj1NZZZ50U1N577710+7nnngsbbLBBvp4eAACgaOR11sdhw4aFMWPGpKbv9dZbL5x00kn5fHoAAICikNegtskmm6SxZwAAADRe3ro+AgAAkB+CGgAAQMYIagAAABkjqAEAAGSMoAYAAJAxghoAAEDGCGoAAAAZI6gBAABkjKAGAACQMYIaAABAxghqAAAAGSOoAQAAZIygBgAAkDGCGgAAQMYIagAAABkjqAEAALTmoLZkyZLw4x//OFRUVOTzaQEAAIpKXoPafffdF3r16pXPpwQAACg6eQtqc+bMCVOmTAmDBw/O11MCAAAUpbwFtdtuuy0cfvjhoaSkJF9PCQAAUJRK8/EkTz/9dOjSpUvo3bt3eOGFF+p9XGVlZbpEcRxbt27d8rH7Fq20tFQ9qBvHjNeT84xzcKa0lPemGYUuQDNoCf+HlnTMFIK6US+NVVK1VGN/Oec3v/lNmDhxYmjbtm1YuHBh+PTTT8NOO+0UTjnllBX+3nvvvbe6u27x4klt9uzZhS5GJqkb9eKY8VpynnH+XZHFxx1QoBpqPm1vubvQRVgl3rPVjWOmccrLy5u2Re2www5Llyi2qN1zzz0rDWkAAADUzTpqAAAAGZOXFrWattlmm3QBAACgcbSoAQAAZIygBgAAkDGCGgAAQMYIagAAABkjqAEAAGSMoAYAAJAxghoAAEDGCGoAAAAZI6gBAABkjKAGAACQMYIaAABAxghqAAAAGSOoAQAAZIygBgAAkDGCGgAAQMYIagAAABlTmq8nmj17drj++uvDBx98EEpKSsKQIUPCfvvtl6+nBwAAKBp5C2pt27YNRxxxROjdu3f49NNPw8iRI8N2220XNthgg3ztAgAAoCjkretjWVlZCmlRhw4dQq9evcLcuXPz9fQAAABFo0nGqM2cOTO88cYbYfPNN2+KpwcAAGjVSqqWyucTfvbZZ+GCCy4I3/zmN8OAAQNq3VdZWZkuUUVFRVi4cGE+d90ilZaWhkWLFhW6GJmkbtSLY8ZryXnG+XdFZhw4sEA11Hx6/HlSoYuwSrxnqxvHTOO0a9eueYJaDBxXXHFF2H777cP++++/0se/9957+dp1i9WtW7c0EQvqxjHj9eQ84xycFS3lvWnxcQcUughNru0tdxe6CK3qmCkEdaNeVqS8vLzpuz7GvHfTTTelsWmrEtIAAABo4lkfX3755TBx4sSw0UYbhTPOOCNtO/TQQ0O/fv3ytQsAAICikLegttVWW4U777wzX08HAABQtJpk1kcAAAAaT1ADAADIGEENAAAgYwQ1AACAjBHUAAAAMkZQAwAAyBhBDQAAIGMENQAAgIwR1AAAADJGUAMAAMgYQQ0AACBjBDUAAICMEdQAAAAyRlADAADIGEENAAAgYwQ1AACAjCnN1xNNnTo1jBs3LixZsiQMHjw4DB06NF9PDQAAUFTy0qIWw9nYsWPD2WefHUaPHh0effTR8O677+bjqQEAAIpOXoLaq6++Gnr27Bl69OgRSktLw8CBA8PkyZPz8dQAAABFJy9Bbe7cuaFr167Vt+P1uA0AAIACjVGrqqpabltJScly2yorK9MlqqioCOXl5fnYfYunHtSNY8bryXmmcJyDW3C9/PWpQpeAlnbMFIi6US8Fa1GLLWhz5sypvh2vl5WVLfe4IUOGpIAWL/zXyJEjVUU91I16aSjHjHpxzOSH15K6cczkj9eTeiloUNtss83C+++/H2bOnBkWLVoUJk2aFPr375+PpwYAACg6een62LZt2zBs2LBw2WWXpRkg99prr7Dhhhvm46kBAACKTt7WUevXr1+60DCxOyjqxjGTH15P6sUx47XU1Jxn1ItjxmupuZRU1TUTCAAAAC17jBoAAAD5I6gBUFT23HPPcOyxxxa6GACwQro+AtCiHX300eHdd9+tXqdzZebOnRtKS0tD586dV3kfMdi9+uqr4ZFHHmlsMQGgMJOJAEBLsO666xa6CACwUro+AtBqxPmxrr766tC7d+/Qrl27tM7nNddcs8Kuj7nbl1xySejZs2cKcrGV7uOPP073X3jhhWHs2LFhwoQJoaSkJF1uu+22Zv27ACg+WtQAaDVuuOGGcN5554Vrr702ren5j3/8I5x66qlh7bXXDsccc0y9v/fHP/4xfO9730tdG998881wyCGHhI033jhcdNFF4Uc/+lF45ZVXwhtvvBHuuuuu9PguXbo0158EQJES1ABoNSoqKsLJJ58cjj/++HR7iy22CC+//HK47LLLVhjUNtpoozB69Oh0fauttkpB7cEHH0xBrVOnTqFDhw6phS62uAFAc9D1EYBWYf78+WlSkT322KPW9kGDBqVWsk8++aTe391hhx1q3e7Vq1eYMWNGk5QTAFaFoAZAqxLHkC07bm1lYmvZss+xZMmSvJYLABpCUAOgVYjT7W+wwQZp0o+aJk6cGDbddNPQsWPHRj93DHKLFy9e3SICwCozRg2AVuOss84Kp59+ehqbFmdzfOihh8KNN94Yrr/++tV63hj0/vCHP4QXXngh9OjRI01Osuaaa+ap1ACwPEENgBYtdlGMC1hHJ554YppW//LLLw8nnXRS2HDDDdMEIyuaSGRVxN9/+OGHw8CBA9NYuHHjxqUp/AGgqZRUrUrnfQDIqH333TdN/hHDEwC0FsaoAdAizZ49O/zlL39JY9L22WefQhcHAPJK10cAWqTvfOc7aSHq0047LRx88MGFLg4A5JWujwAAABmj6yMAAEDGCGoAAAAZI6gBAABkTEEnE3nvvfcKuftM6NatW5q5DHXjmPF6cp5xDs4K703qxjHj9eQ80zzKy8sbH9RiiLj++uvDBx98EEpKSsKQIUPCfvvtV+sxcSm2uH7NM888E9Zcc820yGjv3r1Xv+QAAABFaKVBrW3btuGII45IwevTTz8NI0eODNttt13YYIMN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AOolqAHQLI4++ugUkL71rW8td9/48ePTfaWlqzR0utnFcdh77rlnoYsBQBER1ABoNhtttFG45557wowZM2pt//nPfx423njjovhPLFy4sNBFAKAFENQAaDZbbLFF2HnnncNtt91Wve3tt98Of//738P3vve96m3z5s0Lhx9+eAp2HTp0CF/4whfCqFGj0nqdNVvo4uyEuZDXuXPn8I1vfCPMmjWr1j6vu+66sMEGG6Q1Pr/85S+n/dW0sn1deOGFYezYsWHChAmp1S9ecuWP64wecsghYZ111km/G1vdnnrqqeW6Wf71r38Nu+22W2jfvn24+eabw9prrx1+85vf1CrHm2++Gdq0aZN+BwCy2ccEgFbr+OOPDxdddFH48Y9/nELMrbfeGgYPHlyrRe3zzz8Pffv2DaeddlooKysLjz76aBg+fHhYd911awW6yZMnh+7du6cgNH/+/HDooYeGH/3oR+H2229P9//lL38JI0aMCFdeeWXYf//9wz//+c9wxhln1CrPyvYVn++VV14Jb7zxRrjrrrvS73Tp0iUFuaFDh6bfv/fee9O2Sy+9NOyzzz7p8d26davex+mnn57KEPezxhprhOeffz7ccsst4bDDDqt+TAyDm2++eRg0aFCT1DsALUycnh8AmtpRRx1VtTSQVX366adVS0NQ1UMPPVS1aNGiql69elX96U9/qho3blxV27Zt6/39U045pWppC1qt51sahqo+++yz6m0/+clPqnr27Fl9e9ddd61aGoZqPc/S0BSbyqreeeedVd7XMcccU7U0QNV6TGVlZXqeF154oXpbLEvc/9Igmm4//PDD6TG//OUva/3u008/nbZPmzYt3Y71sLTVr2ppmKu3TAAUF10fAWhWsfvfEUcckVqUYkvY0pASvv71r9d6zJIlS0JFRUXYYYcdUstUp06dwk033RTeeuutWo/beuutw5prrll9e2noqzX+7cUXXwwDBw6s9TuxC2Jj9rWspQEtdO3aNfTp06d6WyzLgAED0n017bTTTrVu9+vXL/Tv3z+1Jkb3339/KvfS8LnCfQJQPAQ1AJrdCSeckLoRxu6AsXth7A5YUxwjtrR1LJx88slp/NrUqVPTzIvLTsTRrl27WrdjV8qlX0Iut21FVnVfdanrueP+l92+1lprLfe42L0yjnX7z3/+kwJb7Ea53nrrrXSfABQH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2WWXpRkg99prr7Dhhhvm46kBAACKTt7WUevXr1+60DCxOyjqxjGTH15P6sUx47XU1Jxn1ItjxmupRU0mAgAAQMbGqAEAAJA/ghoANMImm2wSLr30UnUHQJMQ1ABYoaOPPjqUlJSEESNGLHdf3P6rX/1KDa6Cf/3rX6m+3nzzTfUFwEoJagCsVIcOHcL1118fpk2bprYyYOHChYUuAgBNTFADYKUGDhwYvvSlL4Uzzjij3sfE9TQPOeSQsM4666Rgt+eee4annnqq+v5HHnkktSj9/e9/D3vssUfo2LFj6NOnT/jb3/62St0MzzvvvHDiiSeGLl26hPXWWy/87Gc/C59//nk4+eSTQ1lZWejVq1faVtO1114bdthhh9CpU6fQs2fPVL5YzoaW6dlnn0110L59+7DllluGO++8c7kyrmhfsRVt9913T9c33XTTtM9YP1Gc0+vqq68OvXv3Du3atUtrk15zzTXL/f3nnntuOOmkk0LXrl3DrrvuGo466qiw7777LleOuERObAUFoGUT1ABYJaNHjw733HNPePjhh5e7L4aNoUOHhpdeeince++94cknnww9evQI++yzT5g9e3atx/7oRz8KZ599dgo//fv3DwcffHD44IMPVrr/6667LmyxxRbh6aefDqecckq6HHjggSn4TJ48OfzgBz9I21588cVavxdD0HPPPRf+/Oc/h7fffjsFqGWtqEyffvpp2G+//VIAfeKJJ8Ltt98errrqqjBz5szlnqe+fcW1Rf/yl7+k67FuYoC766670u0bbrghhdCRI0eGF154IYXheH3s2LG1nnvMmDEpoD722GOpDMOHDw+VlZXhjTfeqH7Ma6+9FiZMmBCOO+64ldYnABkXp+cHgPosbbmpGjx4cLq+NHhULW01qlq8eHG6Hd9G7rjjjqqlgSFdXxo0qn/vs88+q1raslR10UUXpdtLA156zJ/+9KfqxywNLGnbAw88sMJ/wMYbb1z1jW98o/p23P/aa69dtf/++9fatjRMVS0NdPU+z5QpU9L+3n333VUu0y233FK11lprVc2dO7f6MUvDWHrMJZdcssr7+uc//5luLw1WtR63wQYbVC0NZ7W2nXrqqVVLA2itv3/vvfdebh99+/atOuecc6pvLw14VUtbBOstEwAthxY1AFZZRUVFajW77bbbam2PLUGxS17sNpiz5ppr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WWed5bZBXbSO1E29rFwcl/bpp5+GTz75JP0sKysr6rkIVqZk6Qc+X5dRcHE9jV//+tfhwAMPDL17907b4jcu48ePD9/97nfDTjvtVOASFsYf/vCHFd7/ne98p5lKki3qhaacafXKK68sqgqeMGFCagmI33hvuummadvrr78efvWrX4Uvf/nLRdcVlFVXs3Vk2rRp1a0jo0ePLupqVC/Lu/nmm9Nkce3bt09jhnOXTp06Nfv/pyXRokYmxCAWuznGFqP4gSHacMMNw4gRI9JYtWK1oiD22WefNWNJskW90FSKcWbD2OWoc+fO4fe//3145513qs+/Bx10UPjiF79Y4NKRZVpH1Muqir2m/vOf/4SePXuGddddN3Tt2jWstdZaTXZsthZa1Mi82Af+xhtvLHQxCmbu3Llh3rx5afBt7CIau/3Fmdjit+DxG6pipV5oiPglUPymPw5eryl+MbRkyRITZkADaB1RL40RO/HFL4Ni62tshY3XY4tanFgkfjHE8rSoQYbFQHbXXXelb6BiV4qvfvWr4Ze//GXYY489QkVFRaGLVzDqhYYys2H9/vjHP66w7mouZwCR1pG6qZeVjwGO49FiS1r84ixe4kQ0r776qqBWD0ENMr5WTVxfJH7jFN8ATj755LSGWPz2qZipFxrDzIZ1W3PNNZfbFmfwizOyffTRR4IayznnnHNqtY7cc889WkfUywrdd9991S1pcZK42M08fpbZa6+9TCayovetFdwHzSY3m+Gy4htBMY/FateuXfVA2zgjZnl5edGHNPVCY5nZsG5f//rXq6/HWdjiB6rYAjlw4MBa90FNWkfqpl7qFmfx3nnnncNRRx2VZnpk1RijRiaYxa9uxx57bPqwlDNp0qRat4cNG9bE/5lsUi80lJkNV2zBggXpC7N//vOfaXKR/fbbz2xsNLh1JP6MXdvatGlTlLWnXsg3QY3Mi32XN99880IXoyAeeeSRFd5frNNmqxca45lnnklLftSc2XDo0KFFP7PhHXfckZZIGTx4cPjKV76Sps+GFbn99ttTKIsXrSPqhaYjqJFJca2NRx99NF3iYNNinjijvimRn3766bDLLrsUuiiZol6g4Q4++OA0fi+2jNRc8Dt2PY+344dyAJqfMWpkqv9yLpzFbhNx8oyf/OQnaX01QppC/Nlnn031E39utdVWgpp6YRWZ2bB+cemPYlvkG6AlENTIhHPPPTd88sknafzVaaedFtZff/3w/e9/X0hb6sUXXwz/+te/UretzTbbLI0J+NnPflbnTG3FRL3QEGY2rF/NVjQAskNQIxM6d+4c5syZkxZznj9/fgpqPjyEMHz48DTb47777huOOOKI0KFDhxRgiz2kqRcaysyG9Yvn3fpm3o32339/BxxAAQhqZMKPf/zj1KL2+OOPhzvvvDNMnz493S7miUSiAQMGhMmTJ6fZHmN30P79+wuw6oU8zWx4xRVXmNnw/3erjsugxDFpAGSHyUTI7De8MZzE8Vixpe3GG28sdJEKJn54euGFF6q7P8Z1jmKLUr9+/Yp6djb1QkOY2bB+Z555ZgqtAGSLoEbmvf/++6krJCEsWrQoTJ06NQXYf//732Hs2LGqRb2wCsxsuOIeDSYTAcgeQY1MOO+888Ill1ySrl933XXh5JNPrr7Pt731T0Xfrl27ZvjvtCzqhboIIyvuEtqpUycHDkDGGKNGJnz++ee11lCrqZjHTZx++ukrHJN29dVXN2NpskO90FAmJ6qfkAaQTYIamf8QVcwfsEaOHFkdVuOi32eddVaBS5QNI9ULDWRmQwBaGkGNTPj444/Dk08+mWYfi9efeOKJ6oASZ38sVt27d6++vsYaa9S6XczUCw1lZkMAWhpBjUzo06dPeOqpp6qvP/3009X3bb311oUqFtBKlJWVhW9/+9uFLgYArDJBjUw47LDDwjrrrFPoYmTO66+/XmuSjJq3o969ezd3kTJBvdBQxTzWFYCWyayPZMJxxx0XNtpoo7DrrruGnXfeOXTs2LHQRcqEiy66aIX3X3DBBc1UkmxRLzSUmQ0BaGkENTIzfiSuCxYXuY6LOm+xxRZht912C/379y/qKehfffXV0LVr19RtK3rkkUfS+L04Ruuggw4q2tna1AsA0Nq1KXQBIGrTpk3YYYcdwkknnRRuvPHGsNdee6XJRb7//e+HMWPGFG0l3XLLLWkSkejFF18Mv/3tb8OgQYNSi+PNN99c4NIVjnoBAFo7QY3MKS0tDRtssEG6xECy7LpqxdbSmGs1i62NgwcPTl1DDznkkDB9+vQCl65w1AsA0NqZTITMmD17dgojjz76aPjss8/SeLUzzjgjBbZiDiSLFy8Obdu2Dc8//3w4/vjja91XrNQLANDaCWpkwrnnnhvmzp2bWotiGNlss80KXaRMiGH1wgsvDGuvvXYaq5dbqiC2phXzhCvqBQBo7UwmQibE8VcxhJSUlBS6KJkzbdq08MEHH4TtttsutG/fPm177733UqtjsU7PH6kXAKA1E9TIhF/84hcrvH/YsGHNVBIAACg8XR/JhGJuGQIAgGVpUSPzZs2aldYNAwCAYqFFjUyNOYoTisSxal26dAlvvfVWGD9+fHjppZfS2moAAFAstKiRCXfccUeYMmVK2HjjjcOMGTNCv379woMPPhgOPPDAMGTIkDTjIQAAFAstamRCDGlXXHFFCmQLFiwIJ5xwQrj66qvD+uuvX+iiAQBAs2vT7HuEOsSAlms169SpUygvLxfSAAAoWro+kglHH3109WLOVVVVaVxa7nZ05plnFqpoAADQ7AQ1MrPg9Yr06dOnmUoCAACFJ6iROfPnz08/O3fuXOCSAABAYZhMhEyI3R3/+Mc/hgceeCBdj5c2bdqEr371q+Hb3/52oYsHAADNSosamXDvvfeGZ555Js32uN5666VtcZr+W2+9NWy//fZh//33L3AJAQCg+Zj1kUyYOHFi+OEPf1gd0qIePXqEk08+Od0HAADFRFAjExYvXlznmLS4Ld4HAADFRFAjE0pL6x8uuaL7AACgNfIJmEx48803w1FHHbXc9jipyH/+858ClAgAAArHZCIAAAAZo+sjAABAxghqAAAAGSOoAQAAZIygBgAAkDGCGgAAQMb8P6znAsiyyz4qAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -4863,12 +4880,12 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3EAAAJhCAYAAADv1TljAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzde3xcdZ3/8feZmWQmaZNJc0/apC225a5VwBYFESjrbQVFUJQqq6K7pV0Eb+DiLrIi1AW2XMpNVBThJ12FBV1AocDihYulCBZKuS3NtM097UyStpnJzJzfH3Np00zSSTuXc868no9HHjaTuXzTg2ne8/l+Px/DNE1TAAAAAABbcBV7AQAAAACA7BHiAAAAAMBGCHEAAAAAYCOEOAAAAACwEUIcAAAAANgIIQ4AAAAAbIQQBwBAjvzud7+TYRjq7+/P+XOPjIzIMAz9+te/ntLjmpubde2116Y/X7x4sVasWJHr5QEACogQBwAlwjCMST/mzJkjSfrgBz8owzB0ww03jHn85s2bZRiG/vSnP425/ZlnntGZZ56ppqYm+Xw+veMd79DSpUv1wgsvZFxH6vkn+9i8eXM+/gr263//93+1ZMkS1dfXq6KiQnPmzNGnP/1pbdu2rSjryYeHH35YV199dbGXAQA4CIQ4ACgRXV1d6Y8HH3xQkvSXv/wlfdu6devS962oqNAVV1yh7du3T/qcd955p0488USVlZXpnnvu0auvvqo1a9Zozpw5+trXvpbxMffff/+Ytbjdbl1//fVjbmtra8vdN76PSCSS8faXXnpJH/rQh3TUUUfpySef1MaNG/XTn/5UM2fO1PDwcN7WU2i1tbWqqqoq9jIAAAeBEAcAJaK5uTn9UVtbK0lqaGhI39bQ0JC+75lnnqnq6mpdccUVEz5fZ2enli1bpvPPP19r1qzRkiVLNHfuXB177LG68sor9Zvf/Cbj42pra8esRZL8fv+Y29xut0zT1NVXX605c+aovLxc8+bN08033zzue9p7q6AkLV26VB/+8IfTny9evFjLli3TpZdequbmZr3jHe/IuK5HHnlEDQ0Nuv7663X00Udr7ty5OuWUU7Rq1Sodeuih6ft1dXXpC1/4ghobG+Xz+XTYYYfp7rvvHvNcGzZs0Pvf/35VVFTo6KOP1pNPPjnu727p0qWqr69XdXW1TjzxRD399NNj7vPoo4/qyCOPlM/n07vf/e5xFdBNmzbJMAw9//zzY26fNWuWVq5cmfF7TP197L2dcvHixVq+fLn+7d/+TY2Njaqrq9NXvvIV7d69O32fWCymb33rW6qrq1NVVZWWLl2qa665RtOnT5/wdQAA+UOIAwCM4/P5tHLlSt166616/fXXM97nv/7rvxQOh/Xd734349dnzJhxUGv4z//8T1155ZW6/PLL9corr+iiiy7SxRdfrHvuuWfKz3X33Xdr165devLJJ/Xwww9nvE9LS4v6+vq0du3aCZ9neHhYJ554ojZt2qR7771XGzdu1KpVq+T1esfc75vf/Ka+973v6aWXXtKRRx6ps88+O13NGx4e1kknnaRYLKZHH31U69ev1ymnnKJTTz1Vb731liSpo6NDp59+uk444QT99a9/1dVXX60LL7xwyt93tu655x6Fw2H98Y9/1F133aV7771X119/ffrrP/zhD/WjH/1Iq1ev1vr163X00Ufrqquuytt6AACT8xR7AQAAazrnnHN044036pvf/GbGqtrrr7+u6upqzZo1Ky+vv3LlSn3jG9/QF7/4RUnS/Pnz9corr+gHP/iBzj333Ck91+zZs3XDDTfIMIwJ73Puuefq8ccf12mnnab6+nodd9xxOvnkk3XuueeqtbVVkvTzn/9c3d3d+vOf/6ympiZJ0iGHHDLuub7//e/rtNNOS38fc+fO1fr163XSSSfp7rvvViwW0z333COXK/Fe6hVXXKHHHntMd9xxh1auXKmbbrpJbW1tuvXWW+VyuXT44YdreHhYZ5999pS+72wtWLBAP/zhDyVJhx56qD71qU/p0Ucf1Xe+8x1JiUD97W9/W5/97GclSZdccomeeeaZSQMvACB/qMQBACa0atUq/c///I+eeOKJcV8zTTNvr9vb26v+/n594AMfGHP7SSedpDfeeEOjo6NTer7jjjtu0gAnSR6PR3fddZe2bdum66+/XgsWLNDNN9+sww47LL3Vcf369XrnO9+ZDnATWbhwYfrPM2fOlCT19PRIktatW6dAIKDq6mpNnz49/bFu3Tq98cYbkqSNGzdq8eLF6ZAnSSeccMKUvuep2Hu9qTWn1tvT06OBgQEtXrx4zH2OP/74vK0HADA5QhwAYEKLFi3SOeeco69//euKx+NjvnbooYdqcHBQW7duzdvr7xu89g2OLpdr3G2ZAt60adOyfs3W1lade+65uv7667Vp0yY1NTXp+9///oRryqS8vHzc/VN/f/F4XAsXLtSLL7445uPVV1/V6tWrJSW+z/29TirgZfP9T2W9qTXve72z+b4BAIVBiAMATGrlypV67bXXdOedd465/eyzz5bX69WVV16Z8XE7duw44NdsbGxUQ0ODnnrqqTG3/+EPf9CCBQtUVlaWvl9nZ2f666Zp6sUXXzzg192Xz+fTnDlz1NvbK0k65phj9NJLL6WrVAfi2GOP1RtvvKHa2lrNmzdvzEdLS4sk6cgjj9Szzz47Jkj9+c9/HvM8jY2NkjTm+9+2bVt6rbnS1NSkuro6PfPMM2Nuf/bZZ3P6OgCA7BHiAACTam9v19e//nVdd911Y26fOXOmVq9erTvuuEPnnHOOHn/8cW3evFkvvPCCLr/8cp1xxhkH9bqXXnqprrvuOt1555164403tHr1av3kJz/Rv/zLv6Tvs2TJEt199916/PHHtWnTJq1YsULd3d0H9Ho33XSTLrjgAj366KN666239Oqrr+rKK6/UE088oU9+8pOSlO5K+fGPf1xPPPGE3n77bT322GNTGsB93nnnqbm5WR/72Me0du1abd68Wc8++6yuvPJKPfTQQ5KkFStWqKOjQ8uXL9err76qRx99VJdffvmY56mpqdExxxyjq6++Whs2bNC6det03nnnyefzHdD3P5mvf/3ruuaaa7RmzRq98cYbuvbaa/XUU09RnQOAIiHEAQD26zvf+Y78fv+4288//3w99dRTGhkZ0Wc/+1kdeuihOuuss/T222/rxhtvPKjXvPjii3XZZZfpiiuu0JFHHqnrr79eq1atGtPU5Lvf/a6WLFmiT33qU/rgBz+o1tZWffzjHz+g11u8eLGGhoa0bNkyHXXUUXr/+9+vBx98UDfffLMuu+wySVJVVZX++Mc/at68eTr77LN1+OGH68ILL1Q4HM76daZPn64//elPOuqoo/T5z39eCxYs0FlnnaUXX3xR7e3tkqQ5c+bowQcf1FNPPaWFCxfqW9/6llatWjXuue666y55PB4tWrRIS5cu1UUXXaS6uroD+v4nc8kll+j888/XsmXL9J73vEcvvviivva1r+UlMAIA9s8w83kyHQAAONLnPvc5dXR0jNvmCQDIP0YMAACASXV0dOiRRx7RSSedJMMw9N///d9as2aNfvKTnxR7aQBQkqjEAQCASW3dulWf/exn9fLLLysSiWj+/Pm6+OKLdd555xV7aQBQkghxAAAAAGAjNDYBAAAAABshxAEAAACAjRDiAAAAAMBGLN2dsrOzs9hLGKe+vl79/f3FXgYmwTWyB66TPXCdrI9rZA9cJ3vgOllfqV2j1tbWjLdTiQMAAAAAGyHEAQAAAICNEOIAAAAAwEYsfSYOAAAAQOkxTVMjIyOKx+MyDCN9e09Pj8LhcBFXlnumacrlcsnn8435XidDiAMAAABgKSMjIyorK5PHMzaueDweud3uIq0qf6LRqEZGRlRRUZHV/dlOCQAAAMBS4vH4uADnZB6PR/F4POv7E+IAAAAAWEq22wqdZCrfMyEOAAAAADK44YYbdPLJJ2vJkiU67bTT9MILL+iOO+7Q7t27p/xca9asUXd3d07WVTo1SgAAAADI0vPPP6+1a9fqd7/7nbxer7Zv365IJKJly5bpU5/6VNbn1yQpFovpV7/6lQ477DA1Nzcf9NqoxAEAAADAPnp7e1VbWyuv1ytJqq2t1UMPPaSenh6dffbZOuussyRJl156qT7ykY/o5JNP1rXXXpt+/KJFi7Rq1Sp94hOf0AMPPKCXXnpJK1as0GmnnXZAlby9UYkDAAAAgH2cdNJJWrVqlU444QSdeOKJOv300/XlL39ZP/rRj/SrX/1KtbW1kqRLLrlEM2bMUCwW02c+8xlt3LhRRxxxhCTJ6/XqgQcekCT98pe/1L/+67/qXe9610GvjRAHAAAAwLLi994hc8vbiT8bhkzTPOjnNNrmynXOVya9z7Rp0/S73/1Ozz33nJ5++mktW7ZM3/nOd8bd77e//a3uuecexWIx9fT06I033kiHuNNPP/2g15oJIQ4AAAAAMnC73Xrf+96n973vfTrssMP0q1/9aszXA4GAbr/9dj300EOqqanRRRddpJGRkfTXKysr87IuQhwAAAAAy9q7YubxeBSNRgvyum+++aZcLpcOOeQQSdIrr7yiWbNmaevWrRoeHlZtba2GhoZUUVGh6upq9fX16cknn9Txxx+f8fmmTZum4eHhnKyNEAcAAAAA+9i1a5e++93vanBwUB6PR3PmzNF//Md/6IEHHtDSpUvV2NioX//61zrqqKN08sknq729Xccdd9yEz/fpT39al156qXw+n37zm99MqbvlvgwzF5tK86Szs7PYSxinvr5e/f39xV4GJsE1sgeukz1wnayPa2QPXCd74DpZx65duzJuRSxkJa7QMn3Pra2tGe/LiAEAAAAAsBFCHAAAAADYCCEOAAAAAGykYI1Ndu7cqdtuu01btmyRYRhatmyZFixYUKiXBwAAAABHKFiIu/POO7Vw4UJ94xvfUDQaVTgcLtRLAwAAAIBjFGQ75a5du/Tqq6/qlFNOkZToKjNt2rRCvDQAAAAAOEpBKnG9vb2qrq7WLbfcoo6ODh1yyCH6h3/4B/l8vkK8PAAAQFZ+9kKv2mu8OuUQf7GXAqDI2tradNhhh6U/P+OMM7RixYqsH79o0SI98sgjqq2tzfnaChLiYrGY3n77bX3pS1/S/Pnzdeedd+qBBx7QOeecM+Z+a9eu1dq1ayVJK1euVH19fSGWNyUej8eS68IeXCN74DrZA9fJ+rhGuROLm3ro9dd1XHuNPv3e3P6dcp3sgetkHT09PfJ4MkeViW7PNZ/PpyeffPKAH28Yhtxud9br9Xq9Wf/3V5C/gbq6OtXV1Wn+/PmSpMWLF+uBBx4Yd78lS5ZoyZIl6c+tOGyRIZDWxzWyB66TPXCdrI9rlDudgxFFYnH1De7K+d8p18keuE7WEQ6H5Xa7x91e6GHfmV5r0aJFOvvss/XYY48pGo3q9ttv17x587R9+3YtX75cAwMDWrhwoeLxuGKxWNbrDYfD4/77K+qw75qaGtXV1amzs1OStGHDBs2aNasQLw0AAJCVjlCi6VooHCvySgBYwcjIiE477bT0x4MPPpj+Wm1trX7/+9/r85//vG677TZJ0qpVq/Te975Xjz76qP7u7/5O27Zty9vaCtad8ktf+pJuvPFGRaNRNTY26oILLijUSwMAAOzXlmAyxI0U7l1+APv34+d79PaOEUmJLYqmaR70c86d4dP5xzZNeh+fz6fHHnss49c+8pGPSJLe+c536pFHHpEkPfvss/rxj38sKbHDsKam5qDXOZGChbg5c+Zo5cqVhXo5AACAKUlV4kaipsLRuLyegmxYAmBDXq9XkuR2uxWL7aneG4ZRkNcvWIgDAACwskBwzwzb0EhMjdMJcYAV7F0xK/SZuKlYvHix7r//fl100UV64oknFAwG8/Za/HQCAAAlbzRmattgRLNrEu+uh8LW/CURQOHseybuqquumvT+F198sZ577jl96EMf0lNPPaWZM2fmbW1U4gAAQMnrHIooZkpHN1WqIxhWaITmJkCp27JlS8bbn3vuufSf3/Wud+nXv/61pESzk1/+8pfpr11xxRV5WxuVOAAAUPJSWymPbqqUJAVpbgLAwghxAACg5AVCYbkM6YjGRIijEgfAyghxAACg5HUEw2qtKle11y2v22DMAABLI8QBAICSFwiF1Z5sauL3eajEAUWWi1lwdjOV75kQBwAASlo4Glf30Kja/eWSJL/PrWCYEAcUk8vlsuwogXyIRqNyubKPZnSnBAAAJW3rYESmlK7E1fjc6t9VOr88Albk8/k0MjKicDg8ZoC21+tVOBye5JH2Y5qmXC6XfD5f1o8hxAEAgJLWkexMOdu/Zzvl/2131i+JgN0YhqGKiopxt9fX16u/v78IK7IWtlMCAICSFgiG5XEZaqlKbqf0uhUKR0vyTA4AeyDEAQCAkhYIhdXmL5fbldiy5fd5FI1LO0fjRV4ZAGRGiAMAACWtIxhWW3IrpZRobCIxKw6AdRHiAABAydo1GlP/rmj6PJyUqMRJYlYcAMsixAEAgJIVCEYkSe015enb/F4qcQCsjRAHAABKViCU7ExZM347ZZBKHACLIsQBAICS1REMy+cx1DCtLH1btTe5nZKB3wAsihAHAABKViDZ1MS11zDhMreh6eUuzsQBsCxCHAAAKFmBUFjtezU1SfH7PJyJA2BZhDgAAFCSQiNRBUdiY87DpSQGfhPiAFgTIQ4AAJSkVFOT9kwhzudhOyUAyyLEAQCAkpQeL+AvH/e1Gp+b7ZQALIsQBwAASlJHMKxp5S7VVnjGfa3a59ZQOKZY3CzCygBgcoQ4AABQkraEwprt98rYqzNlit/rkSlpiHNxACyIEAcAAEqOaZrqCIUznoeTEtspJQZ+A7AmQhwAACg523dHtTMSzzheQEo0NpEY+A3AmghxAACg5HQEE50pM40XkCR/shJHcxMAVkSIAwAAJSc9XiBDZ0ppr0oc2ykBWBAhDgAAlJxAMKIan1vVvvGdKSVperlLLkMKUokDYEGEOAAAUHICkzQ1kSSXYcjvdWswTCUOgPUQ4gAAQEmJm6YCwcR4gcn4fR7OxAGwJEIcAAAoKb3DowrHzEkrcVKiuQnbKQFYESEOAACUlD1NTfYT4rweGpsAsCRCHAAAKCmBYESS1F6TuTNlit/nZjslAEsixAEAgJLSEQqrodKjyjL3pPfz+9zaHY0rHI0XaGUAkB1CHAAAKCmB4OSdKVNSs+IGw1TjAFgLIQ4AAJSMWNzU1sGIZmcV4hKVuiDn4gBYDCEOAACUjK6hiKJxU237aWoiSTXJShzn4gBYDSEOAACUjI5kZ8qsKnHeRCWODpUArIYQBwAASkYgGJYhaVb15J0ppT1n4kKciQNgMYQ4AABQMjqCEbVUlcnr2f+vQD6PoXK3wXZKAJZDiAMAACUjEMquM6UkGYahGp+b7ZQALIcQBwAASkIkFlfXUETtWTQ1San2eqjEAbAcQhwAACgJ2wYjipuaUojz+9wKhanEAbAWQhwAACgJHcHsO1Om+H0eBanEAbAYQhwAACgJgWBYHpfUUrX/zpQpiTNxMZmmmceVAcDUEOIAAEBJCITCmlnlVZnbyPoxfp9b0bipXaPxPK4MAKaGEAcAAEpCIBRRW032VThJ8nuTs+LYUgnAQghxAADA8XaPxtUzPKrZU2hqIiUqcZIYMwDAUghxAADA8baEEk1Nsp0Rl1LjS1biwlTiAFgHIQ4AADheIDT1zpTS3pU4QhwA6yDEAQAAx+sIhlXuNtQ4rWxKj6tOn4ljOyUA6yDEAQAAxwuEImrzl8vtyr4zpSSVuQ1NK3MpyHZKABZCiAMAAI4XCIbVPsWmJil+n5tKHABLIcQBAABHGwrHtH13dMpNTVL8Pg9n4gBYCiEOAAA4WrqpCZU4AA5BiAMAAI4WCB7YeIEUv5dKHABrIcQBAABHC4TCqixzqb7Sc0CP9/vcGgzHFIubOV4ZABwYQhwAAHC0QDCsNr9XhjG1zpQpNT6PTEnDEapxAKyBEAcAABzLNE11hCKaXVN+wM/BwG8AVkOIAwAAjhUciWkoHDvg8QLSnhAXpLkJAIsgxAEAAMfqSDY1mX2ATU2kRGMTiUocAOsgxAEAAMfakhwvkItKXChMJQ6ANRDiAACAY3UEw6r2utNB7EBML3fLZVCJA2AdhDgAAOBYgVBY7TUH3plSktwuQ1VeNyEOgGUQ4gAAgCOZpqmOYESz/QfemTKlxuuhsQkAyyDEAQAAR+rbGdVINK62gzgPl+L3UYkDYB2EOAAA4EiB0MF3pkzx+9w0NgFgGYQ4AADgSIHgwXemTPH7PBqkEgfAIghxAADAkTpCYdVVeDTde+CdKVP8Prd2jsY1GovnYGUAcHAIcQAAwJECwURnylyo8SUHfoepxgEoPkIcAABwnFjc1NbBiNpz0JlSkqqT1TyamwCwAkIcAABwnJ7hUUViZs4qcalh4SHGDACwAEIcAABwnI4cdqaU9mynDFKJA2ABhDgAAOA4qc6UuZgRJ1GJA2AthDgAAOA4HcGwmqeXyefJza86FR6XylwGZ+IAWAIhDgAAOM6WUDhnVThJMgyDgd8ALIMQBwAAHGU0ZmrbYCRn5+FS/D4PlTgAlkCIAwAAjtI5FFHMVM7GC6TU+NyEOACWQIgDAACO0hHMbWfKFL/PTWMTAJZAiAMAAI4SCIblMqSZ1bmtxPm9HoXCMZmmmdPnBYCpIsQBAABHCYTCaq0qV5k7t7/mVPvcisRM7Y7Gc/q8ADBVhDgAAOAogVBY7TneSintGfjNuTgAxUaIAwAAjhGOxtU9NKrZORwvkOL3pgZ+E+IAFBchDgAAOMaWUESmpPaa3J6HkxIjBiTR3ARA0RHiAACAYwRCic6U+dhO6fclK3FhKnEAiosQBwAAHCMQDMvjMtQyPR+VuESIC1KJA1BkhDgAAOAYgVBYbf5yuV1Gzp+73O1SZZmLM3EAio4QBwAAHKMjGFZ7HpqapPh9bg0S4gAUGSEOAAA4ws5ITP27onk5D5fi93oUDLOdEkBxeQr1QsuXL5fP55PL5ZLb7dbKlSsL9dIAAKAEpJqa5GO8QIrf51b38Gjenh8AslGwECdJl19+uaqrqwv5kgAAoERsCUUk5We8QIrf59Zr/bvz9vwAkA22UwIAAEfoCIbl8xhqmFaWt9fwez0aDMcUN828vQYA7E9BK3E/+MEPJEmnnXaalixZUsiXBgAADhcIhtXm98pl5L4zZYrf51bclIbDMVX7CvprFACkFeynz/e//33V1tYqFArpyiuvVGtrq4444ogx91m7dq3Wrl0rSVq5cqXq6+sLtbyseTweS64Le3CN7IHrZA9cJ+vjGu2xZfAtvX9ubV7/PtoaTEm9MiqqVV9XmfXjuE72wHWyPq5RQsFCXG1trSTJ7/fruOOO05tvvjkuxC1ZsmRMha6/v79Qy8tafX29JdeFPbhG9sB1sgeuk/VxjRJCI1Ht2D2qRp+Z178P1+guSdLm7j5VmdOyfhzXyR64TtZXateotbU14+0FORM3MjKi3bt3p//8t7/9Te3t7YV4aQAAUAJSnSnzOV5AkvzJLZQM/AZQTAWpxIVCIV177bWSpFgsphNOOEELFy4sxEsDAIASEAgmO1P689eZUkqciZMIcQCKqyAhrqmpSddcc00hXgoAAJSgjmBY08tdqq3I7682VeVuGZJCDPwGUESMGAAAALYXCIXV7vfKyGNnSklyuwxVe91U4gAUFSEOAADYmmmaCgTDmp3n83Apfp9boREqcQCKhxAHAABsbfvuqHaOxtXmL0yIq/Z5qMQBKCpCHAAAsLWOYKIzZcEqcV63goQ4AEVEiAMAALaWHi+Q586UKTU+N41NABQVIQ4AANhaRzCiGT63qn0Fabotv8+jnZG4RmNmQV4PAPZFiAMAALYWCIbzPuR7b6lZcYNU4wAUCSEOAADYVtw0tSU5XqBQ/MmKH81NABQLIQ4AANhW7/CowjGzoJW4Gm+iEhcKE+IAFAchDgAA2FZHqLCdKaW9K3FspwRQHIQ4AABgW4HkeIG2AnWmlPaciWM7JYBiIcQBAADbCgQjapzmUWWZu2CvWVnmksdlKEglDkCREOIAAIBtBUJhtRWwqYkkGYYhv9dNJQ5A0RDiAACALUXjprYORgp6Hi7F73NzJg5A0RDiAACALXUNRRSNmwUdL5Di93noTgmgaAhxAADAllJNTajEASg1hDgAAGBLgVBYLkOaWV24zpQpNT6PgiMxmaZZ8NcGAEIcAACwpY5gRM3Ty+T1FP7XGb/XrUjM1EiUEAeg8AhxAADAlgKhsNqLsJVS2jMrbjDMlkoAhUeIAwAAthOJxdU1FClKUxMp0dhEkoKMGQBQBIQ4AABgO1tDEcXN4jQ1kfZU4mhuAqAYCHEAAMB2AqFEZ8qibaf0JipxDPwGUAyEOAAAYDuBYFgel9RaVfjOlNLelThCHIDCI8QBAADbCYTCmlnllcdlFOX1vR6XfB6XgjQ2AVAEhDgAAGA7HcGI2muKU4VLqfG5qcQBKApCHAAAsJXdo3H17hwt2nm4FL/PTWMTAEVBiAMAALayJdnUZHaRxguk+H0eKnEAioIQBwAAbKXYnSlT/F4qcQCKgxAHAABspSMYVrnbUOO0sqKuw+/zaDAcU9w0i7oOAKWHEAcAAGwlEAyrze+Vu0idKVNqfG7FTGlnJF7UdQAoPYQ4AABgKx2hiGYXuTOllKjESWJLJYCCI8QBAADbGArHtGN3VO1FbmoiSdVeBn4DKA5CHAAAsI10UxMLhLgaXyLEMfAbQKER4gAAgG0EgtboTCntvZ2SShyAwiLEAQAA2+gIhlVZ5lJ9pafYS9lrOyWVOACFRYgDAAC2EQiF1e73yjCK25lSktwuQ1VeN5U4AAVHiAMAALZgmqYCoYhmW2ArZYrf61aQEAegwAhxAADAFoIjMQ2FY2rzF3+8QEqNz812SgAFR4gDAAC20JFsamKpSpzPo8EwlTgAhUWIAwAAtpAeL2CpEEclDkDhEeIAAIAtdATD8nvdqvEVvzNlit/n0VAkrmjcLPZSAK9YN/gAACAASURBVJQQQhwAALCFLaGw2ixUhZMSjU0ksaUSQEER4gAAgOWZpqmOYESzLdTUREpsp5SYFQegsAhxAADA8vp2RjUSjVvqPJyU2E4piVlxAAqKEAcAACwv1dRktt9qIS5RiQtSiQNQQIQ4AABgeanxAlY7E1fjpRIHoPAIcQAAwPICobDqKjyaXu4u9lLGmFbuktvgTByAwiLEAQAAywsEw5Y7DydJhmHI7/MoRHdKAAVEiAMAAJYWi5vaEopotgVDnJQa+E2IA1A4hDgAAGBp3cOjGo2barfYeIEUv8/DdkoABUWIAwAAlhZINjWx4nZKSarxutlOCaCgCHEAAMDSUuMF2iw2XiCl2uemEgegoAhxAADA0jqCYTVPL5PPY81fW/w+j0aipkai8WIvBUCJsOZPQwAAgKRAyJqdKVNqkgO/qcYBKBRCHAAAsKzRWFydgxG1W3QrpST5GfgNoMAIcQAAwLK2DUYUM2XZ8QJSYsSARIgDUDiEOAAAYFmBUESSLDteQNorxIXZTgmgMAhxAADAsgLBsFyGNLPayiGO7ZQACosQBwAALCsQCqu1qlxlbuv+yuLzuOTzGDQ2AVAw1v2JCAAASl5HMGzp83Apfp+HShyAgiHEAQAASwpH4+oZHrX0eIEUv9etYJgQB6AwCHEAAMCStoQiMmXtpiYpfp+b7ZQACoYQBwAALCkQCkuSPSpxbKcEUECEOAAAYEkdwbDKXIZaptugEudNVOJM0yz2UgCUAEIcAACwpEAwrFn+crldRrGXsl9+n0cxU9oZiRd7KQBKACEOAABYUiAU1my/9bdSSnsGfgcZ+A2gAAhxAADAcnZGYurfFVWbDc7DSVINA78BFBAhDgAAWE6qqYndKnGDhDgABUCIAwAAlhMIRiRJ7TXWb2oiJc7ESVKQMQMACoAQBwAALKcjFJbP41LDtLJiLyUr1d5EJS7EwG8ABUCIAwAAlrMlGFa7v1wuw/qdKSXJ4zJUVe5i4DeAgiDEAQAAy+kIhW0x5Htv1Qz8BlAghDgAAGApwZGoQiMxtdukqUlKauA3AOQbIQ4AAFhKIJjsTGmzSpzf51GQShyAAiDEAQAAS0mNF7Dbdsoan5vGJgAKghAHAAAsJRCMqKrcpRnJ2Wt24fe5NRSOKRY3i70UAA5HiAMAAJYSCIXV5vfKsElnypTUrLhBqnEA8owQBwAALMM0TQWCYdudh5MSlThJNDcBkHeEOAAAYBkDu6PaORq33Xk4SarxJipxnIsDkG+EOAAAYBnpzpQ2Gy8g7V2JI8QByC9CHAAAsIxUZ8o2G1biqpNn4thOCSDfCHEAAMAyOoIRzfC5Ve21V2dKSZpe7pLLELPiAOQdIQ4AAFhGIBi25Xk4SXIZhvxeN5U4AHlHiAMAAJYQN00FQvYNcVJizACNTQDkGyEOAABYQs/wqCIx05ZNTVL8PipxAPKPEAcAACwh1dTE9pU4zsQByDNCHAAAsITUeIE2f3mRV3Lg/D43jU0A5B0hDgAAWEIgGFHjNI8qy+zXmTKlxuvRSDSucDRe7KUAcDBCHAAAsISOUFjtNj4PJ+0Z+D1IcxMAeUSIAwAARReNm9o2aO/OlNKeEBekuQmAPCpoiIvH4/r2t7+tlStXFvJlAQCAxXUNRRSNS7NtH+I8kkRzEwB5VdAQ9/DDD2vmzJmFfEkAAGADqaYmtt9O6U1U4hgzACCfChbiBgYG9MILL+jUU08t1EvC4sxoVObI7mIvAwBQAObOYZmmOeHXO0JhuQxpZrV9O1NKVOL2ZZom5wOBPChYiPvZz36mpUuXyjCMQr0kLM787S8V//7FxV4GACDPzOB2xb95nvTSXya8TyAYVvP0cnk99j6u7/MYKncbChFcJEkbenbpvPve0Audw8VeCuAonkK8yPr16+X3+3XIIYfolVdemfB+a9eu1dq1ayVJK1euVH19fSGWNyUej8eS67KjHds2K9LbqdoKn1zTpufseblG9sB1sgeuk/XZ4RqFt/6fgtFRVfR2avoEa9061KH5jVWW/16yUVu5WSOme8z3YofrlA/dHSOKm9Ltz/fpF0vbVFlu7fERpXqd7IRrlFCQEPfaa6/p+eef11//+ldFIhHt3r1bN954oy688MIx91uyZImWLFmS/ry/v78Qy5uS+vp6S67LjmJbOyRJA5teljF7Xs6el2tkD1wne+A6WZ8drlH8jU2SpF2b39RIhrVGYnFtC+3W+9oqLf+9ZKOq3FBPaNeY78UO1ykf3uwOqsxlqHsorBuf3KTzj2kq9pImVarXyU5K7Rq1trZmvL0gIe5zn/ucPve5z0mSXnnlFf32t78dF+BQWszRUWl74v+AZm9XTkMcAMBierskJX7eZ7I1FFHctH9TkxS/163tu2lsIiW6jh5S69UhM3z6n007dOLsah1aX1HsZQG2Z++N57Cv/h7JjCf+3NNZ3LUAAPLK7E3+nO/tytjcJBBKdqa0+XiBFL/Pw5m4pM6hiFqqyvWFdzeotsKjm5/t1mhs4gY3ALJT8BB35JFH6tJLLy30y8Jq9n43doJ3ZgEADpH6Ob97pzQ8NO7LHcGwPC6ptcrenSlT/D63QiOxSbtxloJwNK7+XVG1VJWrssytf3xvkzpCYf33xoFiLw2wPSpxKIr0u7Kt7Xv+DABwHDMek/q7pdb2xA0ZfuZvCYU1s9orj8sZHaxrfB5F46Z2jcaLvZSi6hkelbQnnC+aVaX3t1dpzcsD2pqsvgI4MIQ4FEdvl1Q5TcbcBVTiAMDJtvdL0aiMo46RlPlcXEcwotkOOQ8nSdXpgd+lvaWyaygiSWqpKkvf9tVjm+TzGLr5uW7FS7xSCRwMQhyKwuztlBpapKZWaSgkc/euYi8JAJAPycqbccRCyXCNq8TtGo2pd+eo2mqcsZVSSmynlKTQSGk3N+lMhbjpe65tTYVHX3pPozb27dbv3wgWa2mA7RHiUBy9XTKaWmU0tqY/BwA4T7ry1tou1TWM+3m/JZT4Rd9JlbgaX6L5d7DEm5t0DY2qyuvWdO/Y2XCnHOLXO5sr9fO/9ql/12iRVgfYGyEOBWdGR6WBPqmxJfEhcS4OAJyqp0sqL5f8M6TGFpn7dCQOBJ3VmVKiEpfSNRRR615bKVMMw9AF721WzDR12196Sr4BDHAgCHEovNR4gcbWdIijEgcAzmT2dUkNLTJcrsTui33GDARCYZW7DTVNH//Lvl1VexOVOM7ERcZspdxbS1W5PvfOeq3bNqynA+M7lgKYHCEOhdeTCGxGY4sMr0/y1zIrDgCcqqdzzxt2jS3jxgwEgmG1+71yGc7oTClJZW5D08pdJV2Ji8T2jBeYyOmH1eodtT7d/nyPhkp86ykwVYQ4FJzZlwxsqfNwTS2Jd2oBAI6SGi+QOv+85xz0njfuOkIRtTuoqUmK31vaA7+7h0dlamxnyn25XYZWLGrWUDimO1/oLdziAAcgxKHwerqkimnS9CpJktHQQiUOAJwoOV5gTCVOe5qdDIZj2rE7qnYHNTVJqUkO/C5VXYOp8QKTB/RDan365OG1evz/Qnqxa2chlgY4AiEOBWf2dkmNLTJSW2cYMwAAzpQMa0ZTsgJX35QcM5C4fUuyqclsBzU1SfH73CW9nbJrOBHiWvcT4iTpM0fXq7WqTLf+pVvhaGkPSAeyRYhD4fV2yki9Kyvt+TPNTQDAUdKdhxsSP+eNsjKptj69nTIQcl5nyhS/z1PSlbjOwVFVlbvGjRfIxOtxafmiFnUPj+r//a2/AKsD7I8Qh4JKjxdIvSsrpc/GmYQ4AHCW3uR4gZraPbc1taZ/3ncEw6osc6muwlOkBeZPtdetwXBMsXhpts/vGo7sdyvl3o5qqtTfzfPrN5u2682BkTyuDHAGQhwKKzVeoGFPJU4NzYn/ZVYcADiK2btnvECK0dgi9XbKNE0FQonOlIaDOlOm1Pg8MiUNRUqzGtc1OLUQJ0nnvbtRfq9bq5/rUrREwy+QLUIcCmvf8xGSDF9FYswAlTgAcJbkGegxGlulXTtlDg8qEAw78jyctPfA79ILcanxAtmch9vb9HK3/vG4Zr29I6wHX92ep9UBzkCIQ0Glz0eM+0e9me2UAOAgZjwm9XWNOQMt7TkHvWNrl4YicUeOF5D2DnGl19wkNV6geZLxAhM5vr1Kx7dN170b+tWZ7HAJYDxCHAqrNzVeoHrMzUZjK9spAcBJdgwkxwu0jr09+Xmga0CSHDleQEo0NpGkYAlW4rqGsu9MmclXjm1SmcvQzc91KW6yrRLIJOsQ9/DDD2twcDCfa0EJMHv2GS+Q0tgiDQZljjBmAAAcITn/c99KXGrMQGAg8fPeiZ0pJanGW7qVuFSIm+qZuJS6yjL9w3sa9XLvbq19K5TLpQGOkXWI27Bhg5YvX66VK1fq6aef1ujoaD7XBafKsLVG2uuMHFsqAcAR0lvk96nEpcYMBHaZ8nvdqvE5rzOlJE33uuUyEgPNS03XUGK8QFUW4wUmsuQdfh3VWKGfvdCr7btLLwgD+5N1iLvkkkt0yy23aOHChXrooYf01a9+Vbfddps2btyYz/XBQczoqNTfO/48nLSnWyUhDgCcobdTKttnvEBKY4s6Yl7HVuEkyWUYqva6S7KxSedQRM0HWIVLcRmGli9qUSRm6kfrunO0MsA5pvT2V1VVlT784Q/rwx/+sDo6OrR69Wo9+eSTqq+v16mnnqqPfvSj8vl8+Vor7K6/NzFeYN/zEVI62Jk9nXJeo2kAKD1msjPl3uMF0ppatSVWo1MdHOKkxLm4YAlup+weiujwhsqDfp7W6nKd8856/eLFPj0TGNLx7VU5WB3gDFNubLJhwwbdcsst+t73vie/368VK1ZoxYoVevvtt3XVVVflY41wit4JzkcoNWZghtRHJQ4AHCE5Iy6Tvto2jbi9avfFC7yowvL7Sq8SF4nF1bczqpYD6EyZyScOr9XcGV7d/nyPhkt05h6QSdaVuLvuuktPP/20Kisr9YEPfEDXXXedamv3bJGYP3++vvjFL+ZlkXCG9PmIpgyVOElqbEk0PgEA2Fp6vMA7j8349S1VrdJ2qT0akpQ56DmB3+vWmztHir2MgupJjhc40KYm+/K4DC1f1Kxv/75Dd/21Txcsas7J8wJ2l3WIGx0d1Te/+U3Nmzcv8xN5PFq5cmXOFgYH6u2UKirHjRdIMRpbZL78QoEXBQDIufR4gcwBLeDxSxpV285uSYcVdGmF5Pd5Sq4S13mQnSkzmV9XodMPq9UDr27XB+ZU66img9+qCdhd1tspP/nJT6q5eey7H8PDw9q+fXv685kzZ+ZuZXCcxPmI1vHjBVIaW6XQDsYMAIDdJXdeGJnOQEvqiHpVNxLUtAFnzwf1+9zaNRpXJObsbaN76x5KdC8/0BlxE/ncO+vVPL1MNz/XpXC0dP4+gYlkHeKuueaaMYFNkrZv365rr70254uCQ/VmHi+Qkv5aL12oAMDOzOSMuAkrcYOjah/dITl8C31qfEIpVeM6hyKafpDjBTLxelxa9t5mdQ6N6r9eHsjpcwN2lHWI6+zsVHt7+5jb2tvbtW3btpwvCs4z6XiBlNQ7tr3OfmcWAByvrys5XqBu3JdicVNbQxG1u3bLdHgzK3964HfphLiuoUhOt1LubWHLNJ1yiF/3bxzQ2ztK66whsK+sQ1x1dbW6u8dWSLq7u1VVRbtXZGGgLzleYLIQl9iuazIrDgBszezplBqaM44X6B4e1WjcVHulHD8b1J+uxJXOmIF8hjhJ+tJ7GlXldWv1s92Kxc28vQ5gdVmHuJNPPlnXXXed1q9fr61bt+r555/Xddddp1NOOSWf64NTpMcLTNCZUpLhq0yMGaASBwD2ljwDnUkgGJYktc+olHYOydw5VMiVFZTfl6zEhUujEjeaHC/QmqPxAplUed366rFNenP7iH772vb9PwBwqKy7U37iE5+Qx+PRL37xCw0MDKiurk6nnHKK/v7v/z6f64NDpKtrk1XiJKmhhUocANiYGY9Lfd0yjs48XqAjFJYhqa1lRuKG3i5prjN39aRDXIlU4rpzPF5gIu9vr9L/zpyue17q1+JZVWrO8+sBVpR1iHO5XDr99NN1+umn53M9cKqe5HiBKv+kdzOaGDMAALa2Y0CKjkpNEzQ1CYbVNL1MvpZWxZXYemnMXVDYNRZIhcelcrdRMmfiuvIwXiATwzD0T+9t0orfvq1b/tKtK05pm7jzNeBQWYc4KdHcZPPmzRoZGXuYlC2V2B+zr0tqaNn/D9mGluSYgd0yfBWFWRwAIHdS2+cbJghxobBm13il+kbJMBx9Ls4wDPm9boXCpVGJ60qOF8h3iJOk+soynffuBt22rkdPvj2oUw6Z/E1iwGmyDnH333+/7rvvPs2ePVter3fM1whx2K+eThlz5u/3bkZTq0wp8Y96+yH5XhUAIMfSW+Kbxp+JG43F1TkY0aJZVTLKyqXaBsefg64uoYHfXcnxAtU5Hi8wkQ/Nr9FTmwf1k/U9ek/LNNVUTKk2Adha1v+1P/zww7rqqqs0e/bsfK4HDmRGo9JAr3TcB/Z/59SZuT5CHADYUm/nhOMFtg1GFDOVqMRJUqPzz0HX+NwKlkiI68xzZ8p9uQxDyxc166KHN+uO9T361gkzC/baQLFl3Z2yvLxcM2fyfw4cgIFeKR6f8HzEGMkQlx4UCwCwFbO3a8LxAoFQ4sxUuz/xi77R2OLo7ZRSorlJqTQ26RoaLWiIk6Q2v1efPqpOf+oY0l+2OrfTKbCvrEPcZz7zGf30pz/Vjh07FI/Hx3wAk0r+A23srzOlkmMGqmsc/486ADhWT+eEnYg7gmG5DWlm9Z5KnOPHDHgT2ylN09kzzUZjcfXvGlVLHscLTOTMI+o02+/Vbet6tGu0NKqeQNbbKW+55RZJ0uOPPz7ua2vWrMndiuA4Zuq8wyQz4sZobN3zGACAbexvvMCWUFit1eUqcyeaXBmNe52DdvCYgdG4qV0RZ4eLnuFRxU2ptQjt/svchpYvbtYlv+/QXX/t0z+9t7ngawAKLesQt3r16nyuA07W2yX5KvY7XiDFaGyR+cpf87woAEDOpcYLTFKJe0etb88NqS30vV2OHTPg9yV+1dqxe1S+/dzXzjoLNF5gIofWV+jvD52h3762QyfNqdbhjZVFWQdQKFlvp2xoaFBDQ4Pq6urk8XjSnzc0NORzfXAAs7dTamzNfoZLY4sU2i5zZHd+FwYAyK3UeIEMIW4kGlfP8Kjaa/bqcN3QnBgz4OBz0DXJgd/B3aNFXkl+FXK8wETOfVeDGio9Wv1ct0ZjHPeBs2Ud4nbu3KkbbrhB5557ri688EJJ0vPPP6977703b4uDQ/R2ZXUeLi217bKvOz/rAQDkhdmXPM+cYfv8llBYpqTZ/j0hzigrl2bUJzoSO1S6ErfL6SEuomnlLlWVZ/2rZc5VlLl0waJmbR2M6FevDBRtHUAhZP3/tDvuuEOVlZW65ZZb5PEkfiAtWLBATz/9dN4WB/szo1Gpvyf783CSjFQXS87FAYC99HRJnjJpxvjxAltSnSlrxs6aVVOrozsS+5OVuB2Or8RF1FpVnv2umzx5T+t0fXBOte57ZUAdwXBR1wLkU9YhbsOGDfriF7+oGTNmpG+rrq5WKBTKy8LgENuT4wWmVInbc0YCAGAfk40X6AiGVeYy1Dx9bPdCo6HF2ZW45OBrx1fihkfVMr14Wyn39uVjGlVZ5tbqZ7sUizu7KyhKV9YhrrKyUkNDY1sA9/f3jwl1wDg9yfEC2cyIS0qPGXDwO7MA4Ei9nVJT5p0XgWBYs/zlcrv2qdQ0tUjDQzJ3DhdggYVX5napssylHbsjxV5K3ozGTPXtHFVLdeHHC2RS7fPoy8c06vWBET38+o5iLwfIi6xD3KmnnqrrrrtOL7/8skzT1Ouvv66bb75Zp512Wj7XB5tLV9OmUolL3t908DuzAOA06fECE3WmDIXHnIdLSd/fwbsv/D63oytxPTsjipuyTCVOkk6aU61jWqfp7pf61Dvs3L97lK6sQ9wZZ5yh448/Xj/5yU8Ui8V066236thjj9VHP/rRfK4PdtfbmRwvUDOlhxmNrekqHgDABoID0mgk4xno4UhMA7ui48/DSen7O3k+qN/rcXSI6xpMfG+t1dYJcYZh6J+OS8yLu21dt+OHraP0ZD0nzjAMfexjH9PHPvaxfK4HDmP2dkmNLVM/6NzYIj39uMzwiAyvkyfrAIBDJCtpmSpxW0KJBhOzM4W41JgBh1fi+hzc2KRrODkjbro1tlOmNE4v09J3NejH63v11OZBfXBudvNqATvIOsS9/PLLE37tqKOOysli4EC9nTLa3zH1x6Xeye3tktrm5nZNAICcS1fSMlTiAsFkZ8pM2ylTYwYcXImr8Xn0+sDOYi8jbzoHk+MFkk1crOSjC2boD5sH9eP1vXp3y7T0yAfA7rL+L/nWW28d8/ng4KCi0ajq6uq0evXqnC8M9mdGo9JAr3TsCVN+rNHYIlMixAGAXfROPF6gIxSWz+NSw7QJfu1obHF0R2K/z63QyKjipilXkVvw50OqM2Wxxwtk4nYZWrG4RV9/5G39dH2vLn5/9iOPACvLOsTdfPPNYz6Px+O67777VFFRkfNFwSG290qx2JRmxKWlxwx0ynr/JAAA9mX2TDxeIBAMq90/8S/5RmOrzBf+nO8lFo3f51bclIbDMVU7sBLUNRTRoXXW/X1wdo1XnzqyTms2DOikudV6T+v0Yi8JOGhZNzYZ90CXS2eeeaYefPDBXK4HTjLJ+Yj9MSoqpSq/o89IAICj9HVN2Ik4EAxnbmqS0ujsMQN+byK4BcOxIq8k91LjBZqrrHUebl9nH1mnWdXluuW5bu0ejRd7OcBBO+AQJ0l/+9vf5MrwjhsgJd+VlRIzgA5EU6uju5UBgFOY8bjU2yUjw4y44EhUoXAsc1OTpPQsUYe+cef3Jc6KhUaiRV5J7qXGC7RWWaczZSZlbpdWLGpW366o7nmpr9jLAQ5a1jX9ZcuWjfk8EokoEono/PPPz/mi4BB9XZJ36uMFUoyGFpmvvpjjRQEAci64PTFeoGH8m3aBYKIzZaamJmkNe8YMGHPn52WJxZRqphEacV4lrnso0XWzxeIhTpIOb6zUR+bX6H9e26ET51Tr0HrrbgEF9ifrEPfP//zPYz73er1qaWlRZWVlzhcFZzB7OqWmAxgvkNLUKj3zBGMGAMDqkrsmMlXiAsnxApNvp3T2mIE9lTjnhbjOoUTn0VaLb6dM+cK7G/SXbcO6+dluXfeROSpzc/Ie9pR1iDviiCPyuQ44UW+XjIPpLJk6W9HXJc2iQyUAWFW6s2SGM3GBYERV5S7N8E3cfj4xZqDOsSGuqtwtQ4mtpU7TNRTRtDJrjhfIpLLMrWXHNevKp7bq/o0D+szR9cVeEnBAsg5xN910U1YVlRUrVhzUguAMZiwmDfRIx77/gJ/DaGxNjBnoIcQBgKX1dibHC4z/hbgj2dRkv79DNDr3HLTbZchfUebQStyoWqqsOV5gIsfNmq4TZlfpv14e0Pvaq9Q22VZfwKKy7koybdo0rVu3TvF4XLW1tYrH41q3bp0qKyvV1NSU/gAkJebDxWITdirLSnrMgDPfmQUApzB7M48XME1TW0Lhyc/DJRmNLY6txEnSjMoyhcLOq8R1D0XUYpOtlHv7yjFN8nkM3fxct+KmWezlAFOWdSWuq6tLl156qQ4//PD0bZs2bdJ9992nL33pS3lZHGwsdT7iQGbEJe0ZM+DMd2YBwDF6M48XGNgd1c7R+KSdKdMaW6XhQZm7hmVUOm+O14yKMoVGIsVeRk6Nxkz17hzVB+ZUF3spU1ZT4dGXj2nSDc906fdvBPWRBTOKvSRgSrKuxL3++uuaP39sx6h58+bp9ddfz/miYH+TnY+YksYWKnEAYGFmPC71dWWcCZpVZ8qk9OMd+jN/RqXztlP27hxV3LRHZ8pMTp5brXc1V+rnf+1T/67RYi8HmJKsQ9zcuXP1y1/+UpFI4l2kSCSie++9V3PmzMnX2mBnvcnxAtUHNl4gxWhspRIHAFYW3C5FIolK2j46kiGuLdtKnJKdjR1oRoXztlN2pTtT2jPEGYahC97brJhp6ra/dMtkWyVsJOsQd8EFF+i1117Teeedp6985Ss677zztGnTJi1fvjyf64NNmb1dUmPzwR90bmyRgttlhkdyszAAQG71JSpnGStxobBmVHhUnU3nwoamMc/nNDMqy7QzEtdozDlBIRXi7HgmLqW5qlznvqte67bt1J8DQ8VeDpC1rM/ENTY26sorr1R/f7927NihGTNmqL6etqyYQE/nwY0XSEnNHGLMAABYUrpylmlGXDCi2f7sqjRGuVeqrU90JHagGRWJv4fBcFR1lfYNPXvrTI4XyCqkW9jHD63VHzcP6UfP9+iUI9uKvRwgK1lX4iRpaGhIGzdu1MaNG1VfX6/t27drYGAgX2uDTaXHCxzseTg5/4wEANheb5fk8STmvO0lbpoKhMKTD/neV0OLTIdW4moqEu+bO+lcXNfQqJptNl4gE7fL0IrFzRoKx7T6j28XezlAVrIOcRs3btRFF12kP/7xj7rvvvskSd3d3brjjjvytjjYVGq8QIZ3ZaesITlmwKHvzAKA3Zm9nVJDiwzX2GpMz/CoIjEzq6YmKUZTq+TUM3GViUqckwZ+dw1F1GrjrZR7mzvDpzOPqNNDG3v1YtfOYi8H2K+sQ9zPfvYzXXTRRbrsssvkdid+UM+bN09vvfVW3hYHm0pWzYyGHFTiKqclxgw49J1ZALC9CcYLpDtTTqUS19iSHjPgNDMqEmHHKZW41HgBu3amzOTTR9WprcanW/7SrXA0XuzlAJPKOsT19fXp6KOPHnObx+NRLOaMH0bIHbN34vMRB6SxxbHdygDAziYbL9ARSnamE3IwyAAAIABJREFUzPJMnLTXbFEHbqGfkTwH55QOlXYfL5CJ1+PSJafOV8/wqP7f3/qLvRxgUlmHuFmzZunFF18cc9uGDRvU3t6e80XB5nI0XiDFaGxx5D/oAGB7oR3J8QLjQ9yWYESN08pUWTaFphfJ53HifNBp5W55XIZjKnFO6EyZybtn+fWheTX6zabtenOAztiwrqxD3Oc//3nddNNNWr16tSKRiH70ox/plltu0dKlS/O5PthQzsYLpDS2SsEBmeFwbp4PAJAbyZ0XRqYZcaGwZtdMsUrT0DzmeZ3EMAz5fW4FHRbi7DojbjJfeHeD/D6PVj/XpWjcOSMh4CxZh7gFCxbommuuUVtbm04++WQ1Njbqqquu0rx58/K5PtjRBOcjDljquTgXBwCWkq6Y7fMzPxo3tW0wrLYpNDWRkmMGZtQ7dvdFjc+tQYc0NukaiqjSAeMFMple7tY/Htekt3eE9cCr24u9HCCjrObExeNx/fu//7suu+wynXHGGfleE2zMjMWk/m4Z7zk+Z89pNLXKlBLvzM6ak7PnBQAcpJ7OxHiB2rFzYzuHIorGpdlTaWqS0tjiyO2UkuT3ehQKO6MS1zmUaGpi9/ECEzm+rUrHt1Xp3r/1631tVWqtdl7FEfaWVSXO5XKpt7dXpklJGfuxvS8xXiCXlbgG556RAAA7M/u6pPrmceMF0p0pp1iJk5x9DtrvcyvkoEqc087D7eurxzWp3G3o5ue6FOd3YFhM1tspzzrrLN1xxx3q6+tTPB4f8wGk9aTOR+QuxKXHDDj0H3UAsK2ezoydiAOhsFyGNGsKnSnTmlqloZDMXc6b1eX3eRQcidn+TfFoPDFewInn4fZWW+HRP7ynUS/37tbat0LFXg4wRlbbKSXp9ttvlyT94Q9/GPe1NWvW5G5FsDUzdW4twyH3g+Lg7TUAYEemaSbGCxy+cNzXAsGwWqrKVe7O+r3iNKOhJbGFvq9Lmu2sc/d+r1uRmKmRqKmKMvtuQ+wddt54gYmc9g6/nto8qJ+90KtjWqeprtLZ1UfYx35DXDAYVE1NjVavXl2I9cDuejolr0/yz8jp0xqNLTJf/VtOnxMAcBCC2xPjBZoyzIgLRqbemTIlWdkzezplOC3E+RLbTkMjUVWU2TcAdTp0vEAmhmFo+Xub9bWH39Ydz/fo0g/MKvaSAElZbKf82te+JklqaGhQQ0ODfv7zn6f/nPoAUszeLqmhJfcHnRtbGDMAAFaS3B2x7/b5cDSu7uGI2g+kqYkk1afGDDhv94Xfl3jv3O7NTfbMiLNvEJ2K1upynXN0vZ7ZMqxnAkPFXg4gKYsQt+++7VdeeSVvi4ED5Hq8QEpqeyZjBgDAEszULLd9ts9vG4wobkqzD6CpiSQZ3tSYAefNiktV4oI2b26SGi/gd+B4gYmccXit5s7w6vbnezQcsXcIhzPsN8Q5tXUsci8xXqBHRoatNQcr/U6vA9+Zxf9n774D26rO//G/z5VsyVPykGQpiZ1AFiGDECCBAIUWKCN8KN2UMkopM9CWlvb7+bTQXxkthdJBEmahQEtZpbQF0kGYTdIkjEzIgAQsJ5IlL8ny0rrn98e9V7bJtC3p3PG8/ioj1pM6yHruec7zJoQYUjS8z3iBYFzdTDnakzjAtPeg3dpJnMEDv8OJNPxVJZb6jGiXGBbP9yM+kMFj66OiyyHk4HfistkstmzZkvtrWZaH/TUAzJw5M/+VEePpbAOymVwkQF55tZiBEKzzI4MQQvSLR0P7jBdojiVhl9iYRu2Y1w++Ye1YS9QdLRjb6DEDoUQKk+ucossousl1Tpw3vRbPb+3EyROrMctXIbokYmEHbeJcLhfuu+++3F9XVlYO+2vGGC09IQrtfsQ+1k2PFSuvBCqr6SSOEEL0Yj/j88FYEuOqS2GXxvDIzevPxQywcvN8UHbYJZTZJUPfidPiBU5qqhZdihAXzK7Hf1sSuHdtK35z9iQ47CPfwEpIPhy0iVu2bFkx6iAmMHg/ogAncQDgC5hyvIYQQoyGcw5Ew2DT5+z1z4LxJKbXl4/p6zNvwLwxA06boccptXiBQLU1lpp8ksMu4Zr5Dbj5lRY8vbkdF8/1ii6JWBQ9PiD5Ew0DpQ7AVVuQL888fjqJI4QQPYh3AqnkXg/t+tJZRHszaBxtvIAmN0Jvvvd8l9Nu6HHK3GbKSvPHC+zPnIYKfOYwF57f2oldnQOiyyEWRU0cyRseCQHeAsQLaHx+oKudYgYIIUS0iDY+P7yJa4krH/DHtNQEGLxbHTHfhkq3wU/ichlxFj2J03zjaC+qHTYsXduKrMwP/gsIyTNq4kj+tIX3WjWdV9oP9fbWwr0GIYSQg8qNz39ikVUwpjxkG228gIY5HIC7zpTTF9UOm7FP4nrSKLNbK15gX6ocNlxxjA87OwfwwvZO0eUQC6ImjuQFz2aBtsheoa/5lFuYYsIns4QQYijRMGCzA3WeYX+7OZ6Ew8bgzceonS8w2CyaiMtpRzyZhcyNeXoT7k4hUG2teIH9OaGxCseNr8QTG9vRqp5QElIs1MSR/NDiBQrYxOXuSFDgNyGECMWjYcDj2yteIBhLYoLLASkPH/CZ15z3oN1OG2QO9KRk0aWMSrgnhYZKa49SahhjuPJYH2yM4d51rcrCH0KKhJo4kh9avEABxylzMQN0EkcIIWJFQ/scnw/GU2O/D6fRYgb6+/Lz9XTClQv8Nt5IZUbmiPSkERhDBqDZ1JeX4JK5Hmxs7cOru+KiyyEWQk0cyYvcBjFfAU/iAMDrN+W2MkIIMYpcvMAnJi+6k1l09WfQNNbNlKrc1zfZe77LqQV+G2+5SVuvEi/gr7LuZsp9+ewUN2Z4yvDIu1HE+o3XnBNjoiaO5Ec0VNB4AQ3zBkz3A50QQgwlFy8w/CSuRV1q0jjGpSY56tc32704bSGIEU/iQt3KvS86iRtOYgzXzm/AQIbjoXciosshFkFNHMkLHg0XNl5A41VjBlIUM0AIIULkxueHn8Q1x9UmLl/jlB5znsS5tXHKpPFO4sI9arwANXF7Ge9y4Csz67CyOYF1uxOiyyEWQE0cyY9oqLBLTTTaa7RRzAAhhIjAtXvJ3r3jBSpKJNSV2fPyOrmYAZPdg65y2MBg0JO4hBov4LR2vMD+nD+jDk0uB+5fF0Ff2nhNOjEWauLImHFZixcoYEacKvcaJnsySwghhtGmxgvUDo8XCMaTaHQ78juR4fWbbiOxTWKochgz8Ls1kYK/iuIF9qfExrB4QQM6+zN4fH2b6HKIyeXncdlBpFIp/OQnP0Emk0E2m8WCBQvw5S9/uRgvTYqhowjxAhotZiAaAv0IIYSQ4uMRNV7ANngawzlHMJbECY3VeX0t5guAb1ib16+pBy6nDTEDNnGhRAqH1ThFl6FrU+vLsGh6DV7Y1oVPTazGEd5y0SURkyrKSVxJSQl+8pOf4K677sKdd96JDRs2YMeOHcV4aVIMbYWPF9CwikqgsopO4gghRJRoePC+mqprIItESkZjnjZT5nhMGjPgsBlunDIjc0R70nQf7hBcONsDb4UdS9e2IpU1Zh4g0b+iNHGMMTidypObbDaLbDZLR/EmwiNqQ1WMkzgA8AYG72QQQggpGs450BYG8w1/aBfM92ZKFfOZc7mJy2k33GKTtt40shwIULzAQZWVSLj6uAbs7k7h2S0dosshJlW0O3GyLOPGG2/E5ZdfjlmzZmHKlCnFemlSaNEwUFoKuAsbL6BhXn/u9I8QAnBZBt+5TbmfSkghxbuA5MBeD+2a1SauKV+bKTW5EXpzvee7nMY7iQsnaDPlSBwdqMQpk6rx3Hsd+LhrQHQ5xISKcicOACRJwl133YXe3l788pe/RDAYRGNj47B/Z8WKFVixYgUA4I477kB9fX2xyjtkdrtdl3WJ1BVrh+yfgDqP5+D/ch70TJyM3jWvo66qStle9gn0PTIG+j7lT+Lxe9H3/B9Rdub5qLri+3mddKDvk/4V83uUirSgC4BrynQ4hrxmNNmFmrISHD6+Ia+vxysrEAVQ3hNDpcH/HA79Pvlr+9CzIwZXTS1KbMbYMRffrTRxM5saUFth3kYun/893Xi6Cxv+8A4eeLcD939pNmwSTaHlA/1cUhStidNUVFRgxowZ2LBhw15N3GmnnYbTTjst99ft7e3FLu+g6uvrdVmXSNndzUBgQtH+f5ErXQCA9m3vgY1r3Ouf0/fIGOj7lB/yf/4N/vwfgYZx6P/n8xioroV0+nl5+/r0fdK/Yn6P5A+2AQC6HRVgQ15zR2scE6pLClOHuxZ9H+/EgMH/HA79PpVklZPLXXsiqCs3xnjih61dcNolZPviaO83bzOS7/+eLpvrwa9Wh/H46g9w7vTiTCyZndV+LgUC+945UZTHP93d3ejt7QWgbKrcvHkzxo0bV4yXJgXG5SzQ3grmKdJ9OAyNGaB7ccTa+NaN4E/cBxw5F9JP7gHmnQD+7CPgG9aILo2YVTS0V7yAzDmC8RQm5HuUUuMNgJvs/T4X+G2gDZVhihcYlZMnVmNeoAJ/3NiGiBqWTkg+FOUkrqurC8uWLYMsy+Cc4/jjj8e8efOK8dKk0DrbgUwG8BV+M2XOkDsS9KOEWBUPBSHfdwfQMB7SlT8Es5dAuuy7kDvbIT90N6Qf/BysabLoMonJ8GgYqB8eL9DWm8ZARkZTnpeaaJjXD77prYJ8bVG0sOxuAy03CSdSmETxAiPGGMPVxzVg8Yu7cN+6CH5y6nhqhEleFKWJa2pqwp133lmMlyLFpj4dZcXaTImhMQPmejJLyKHi3THI99wClJRAuu4msDIlh4iVOiAt/hHkn90IecltkP7vLrDa4txVJRYRCe+11CQYU04X8h4voPEGgO4YeH9f7s+60bnUk7iYQZabZGWOSE867zmAVuGpKMFFR3nw0NtRvPFxN06Z5BJdEjEBY9ymJbqV2xhWhIy4YTx+020rI+RQ8FQS8rLbgUQM0uKbwOq8w/45q66BdN3NQGoA8pJbwQfMla9FxMnFC3yyiYsXJl5Ak3s9E20l1k7ijDJOGVXjBfwULzBqZ02pwbR6J373TtRwm0mJPlETR8YmosYLuGqK+rLMF6CTOGI5XJbBf/9b4KMdkL55A9ikfUe1sHGNkK78IRAKQn7wl+BZY3xQJDqnxQvsIyOuvtyOilLbfn7hGKlZcblMUhOoKJFgl2CYD/MULzB2Nolh8Xw/+tNZPPxOVHQ5xASoiSNjwtvCgMcPJhX5j5LHD3S2g6eSxX1dQgTif3sC/O2VYF+4BOzoEw7477Ij54J97Spg89vgT/+uSBUSU1OnHz65yKo5nizYKRwA5f0eMNWDO8YYqh3GCfwOJ9IAgAA1cWPS6Hbgi0fW4Y2Pu/HOnh7R5RCDoyaOjE0ktNf9iKLQngS3RYr/2oQIIK9aAb78WbCTzgA74/xD+jXSp84EO+Nz4K+9BPmVFwpcITG73IbIISdxWZljdzyFxkJtpgTAHE7AXZtrIs3CSIHfoUQKTrsEt7NAp60W8sUj6zC+uhT3rWtFf1oWXQ4xMGriyKjl4gWKfR8OQ+9ImOfJLCH7w7dtAv/DMuCIOWBfu2pEm83YFy4BjloA/vTD4BvNteGPFFk0DNhsw+IFwj0ppGWOpgI2cQAAr/nuQbucdsQMcieO4gXyp8QmYfGCBrT3ZfDExjbR5RADoyaOjJ4WLyDiJE5tHM32Q52QT+Lh3ZDv+zngDUC66odg9pEtFWaSDdLlNwCNh0F+6C7w4M4CVUrMjkdDQH3DsHiBFm0zZSHHKaHmg5ponBIA3A6bYRabKE0cjVLmyxGecpw11Y0Xt3dhe3u/6HKIQVETR0ZPux9RzIw4FauoBCqqlMUqhJgUT8QhL7kFsNmVKIHyylF9HeZwQlr8Y6CiUtlY2dWR50qJJUT3jhdojifBAExwFfgDvtevxAyYaNuqUcYptXgBug+XXxcd5UFtuR1L14SRznLR5RADoiaOjFrufoRHwEkcoIzXmGjlNCFD8XRKiRKIdUK69kdgnoYxfT3mroV03U3AQD/kpbeCD9DTX3LoOOdAdB/xArEkfJUlcNgL+3EiN7ZvoukLl9OOZJZjIKPve1EUL1AY5SU2XH1sA4LxFP7yPj1YIyNHTRwZvagaL+CuFfLyzOtXFqsQYjKcc/BH7wF2boN02XfADp+el6/Lxk+CdMUPgJaPIf/ubuVeKyGHojumxAt88iQuliz8fThg8HVN1cRpWXH6Po2jeIHCOXZ8JU5qqsIzWzrQEqdt22RkqIkjo8ajguIFNN4A0NUOnk6JeX1CCoT//U/g694EO/8isGNOzOvXZrPmgV1wBbBxHfgzj+T1axMTUx+YDV1klc7KCCVSBb8PByDXxHETPbhzO5X7rXq/F6fFC1ATVxiXH+NDmZ1h2dpWyJzGKsmhoyaOjN4+7kcUldcPcA60tYqrgZA8k1e/Cv7i02ALTwM764sFeQ3p1LPBTvsf8FdegPzaSwV5DWIuudH1Ie/5e7pTkDkKGi+gYQ4n4KoFTDRCP3gSp/cmLgWnnaGG4gUKwu2047J5Pmxt68c/P4iJLocYCDVxZFS4nAXa9r4fUUy5hSomGq8h1sa3bwF/fCkwbRbY168u6Dpv9qVvAHOOA3/yIfDNbxfsdYhJREJKvECdN/e3gnFlCqIo45QA4PODm2iZVbVDbeKS+h6nDKmbKSleoHBOnVSNoxrK8fj6NrT1pkWXQwyCmjgyOl0darxA8TdT5mjjNSZbO02sibfugXzvzwBPA6Sr/xfMXtglAkr0wPeACRMhP3AXeMtHBX09YnDRMFDnGxYv0BxLwsZQtK2FzOM32UmcMk6p96y4cCJNo5QFxhjDNfMbIHOOB95qVRYJEXIQ1MSR0cndjxB4EldRpcQM0EkcMTie6FaiBCQJ0vU3KxEaRcCcZZAW3wSUlSvRAzHakEb2jUdDwCfiZILxJALVpSixFemExhcA4l2miRlw2iU47UzXi02UeIEU/JW0mbLQfJWluHCOB2/t6cXK5oTocogBUBNHRiUXsi3yJA5QYgaoiSMGxtNp5QSusz0vUQIjxWrqlOiBvh7IS24DTw4U9fWJ/inxAq37jBcoylITVe71o+a5B+1y2nV9J65NjRcIVNNJXDEsmlaDKXVOPPR2BN1J/f65IPpATRwZnWgIKBEXL6BhXj+dxBHD4pyDP74E+PB9sG98G2zyEULqYI2HQbriRqDlI4oeIHvrjgHJ/mFLTQYyMiI96eLdhwMGHxqaaITe5dB34HdIixeopCauGGwSw7XzG9CTyuL370ZFl0N0jpo4Mipc3UwpLF5A4/UDnW0UM0AMib/wFPia18HOuxDScScLrYXNPhbsK5cDG9aC//lRobUQnVEflA09iWuJJ8FRnM2UOeoptZmmL1xOO+I6PnHJxQvQSVzRTKpx4vwZdXh1Vxwbwr2iyyE6Rk0cGR01I044b0CJGWiPiK6EkBGR17wO/sKTYMd/GuycL4suBwAgfWYR2KcXgb/8N8iv/0N0OUQncsujhozPB2NKMHFRxymdZUrMgJlO4pw2XY9TUryAGF+ZVYdAVSnuXdeKgYwsuhyiU9TEkRHLxQv4xDdxuSfDJgqAJebHd7wH/tg9wNSZYBdfq6vV3ewr3wRmHQP+5APgW94VXQ7Rg2h4n/ECJRJDQ7EXXngbTHUS53baER/I6HYbYZjiBYQotUlYPL8BkZ40ntzULrocolPUxJGRy8ULiG/itG1pZvqhTsyNR0OQ7/sZUOeDdE3howRGikk2SFd8Hwg0QX7gF0g37xRdEhEtEtpnvMAEVylsUnE/3DNvwFT3oF1OG7Ic6E3p87QllEijge7DCXGkrxyfnezG37d14oOOftHlEB2iJo6MXO5+hODNlFBjBsorTTVeQ8yL9yYg33MrAEC6/iblz68OMWe5srHSWYbY7d8Hj3eJLokIxNvCez20C8aTxb0Pp/H61ZgBc3yodamB3zEdBn5nZY5obwqBKn09aLKSS+Z64HLasWxtKzKyPk9riTjUxJER49rooh5O4gDAF6CTOKJ7PJOGfO/PgY4IpGt+pIuHIAfCaushLb4Jcncc8tLbwJNJ0SURATjnQCQMNiQjrieVRUdfBk1FvA+nydVhkvd8LfBbj/fi2nrTyMigoG+BKkptuOpYHz7qSuKvWztFl0N0hpo4MnJtYTVeoE50JQAA5qGYAaJvSpTAUmDHFrBLrgebMkN0SYeENR0O1w0/BZo/hPzIr8BlfY58kQJKqPECQxZZtWhLTUScxGl1tJnjPd+lLgzRY8xAuEfZTBmgJk6oBROqcPyEKjy1qR17umkTNxlETRwZMR4JAZ4G8fECGp8WM5AWXQkh+8Rfegb8v6+BnXsBpAWniC5nRJzHnQT25cuAd/8L/pfHRJdDii2ijs8PWWTVHC/+ZsocdQKEm2SZlZ5P4kJqw9BA45TCXXmsD6V2hnvXhiHrdAkOKT6dfAonhhIND1s1LZzXr8YMtIquhJC9yOveBP/bE2ALTgE796uiyxkV9pn/ATvlbPB/PQ/5zX+JLocUUW5Ufcj4fDCegtMuwVNhL3o9SsxAjWmmL6od2kmc/pq4cE8KDhtDbVnxv89kuJoyO74x14st0X6s2BkXXQ7RCWriyIhwWQbaWoeFvoqWu1tkkh/qxDz4h1vBf/9bYMoMsIuvM+yabsYY2Fe/BcycB/7EfeDvrxddEimWaEiNF/Dl/lYwlkSTW+Daea9/MLvO4OwSQ1WphJgexym7KV5AT0473IVZvnI8+m4UHX00eUSoiSMj1dUBZNLKCKNemGy8hpgDb2uFvOx2oLYe0jX/B1Zi7JEkZrNBuuJGwD8B8v2/AN8TFF0SKYZoGKjzDosXCMaSYkYpVczrB6LmmbxwOe2IJ/V4EpempSY6whjDtfMbkJY5Hnw7IrocogPUxJGRUZ9+Mo9+mjhWWa3EDJjkojsxPt7bA/meWwDOIV13s/Jn1ARYWTmk624GSh2Ql9wC3k3RA2bHo6Fh4/OxgQziyayYpSYabwCId5onZsBpQ7fOTuKyMkekJwU/3YfTFX9VKS6YVY81LT34bzAhuhwiGDVxZERy9yN8OroTByjjNXQSR3SAZ9KQ778DaGtVwrwbxokuKa9YnQfS4h8DiRjkpbeDpyh6wKw450A0PGx8PhgTuNRElaunzRyncS6nHTGd3Ylr71PiBWgzpf6cd0QtDqtx4IG3WtGT0tefG1Jc1MSRkYmGdBUvoGHeAN2JI8JxzsH/eB+wbRPYxYvBps4UXVJBsIlTIF3+feDjDyA/8muKHjCrRAwY6B92EhdUN1M2iT6JA3KTIUbncth0N04ZSih3rmicUn9sEsPiBX7Ek1k8tj4quhwiEDVxZER4NKyveAGN1w90tlPMABGK//M58FUrwBZ9BdIJnxZdTkGxuQvAvngp8M5q8L/+QXQ5pBDUB2PDT+JSqHLY4Hba9verCs/bAGDIZIjBuZ12JJJZZGX9rI4PJ5R4ARqn1KfDa504b3ot/v1hHJsjvaLLIYLo7JM40b1IaNiqad3w+QEuA+102ZeIwd9eCf6Xx8GOOxnsf74mupyiYKd/DuzkM8H/8RzklS+LLofkGY9o4/NDMuJiSTS5xG4sZM5yJWbAJCP01WpD3K2j07hQguIF9O6C2fVoqCzBsrWtSGZoGsKKqIkjh2wwXkBn9+EwZNGKScZriLHwndsgP/IbYPIRYJdeb5mV3IwxsAuuAGbMBf/jveBbN4ouieRTNAxIElDrBaCMCwfjSUwQeB8ux+MHN8kyK5dTy4rTz3KT1gTFC+idwy7h2vkNCCfSeHpzu+hyiADUxJFDp8UL6PIkTmkszTJeQ4yDt0eUKAF3rRolYK07JMxuh3TlDwDfOMj33wEe3i26JJIv0RBQ7wOzK6cx7X0Z9KVlsffhVMznByLmeL93O5T/f/W03CSUSNMopQHMbqjAaYe78PzWTuzqHBBdDikyauLIodPiBfTYxFVUAeUVdBJHior3qVEC2YwSJVDlEl2SEKy8AtL1NwM2O+R7fgqeiIsuieQBj4aHPbRrUZeaCI0X0Hj8SsxA0vgfXPV2EjcYL2CtB1JG9Y25XlQ7bFi6Nqyre5Wk8KiJI4csd8qlx3FKxgBvgE7iSNHwTAby/b8AoiFIV/8vmH+86JKEYnVeJXog3gV52e3g6ZToksgYKPECoWHj8806iBfQMC3mxgTv+S6nchKnlw2VWrwANXHGUOmw4YpjfdjZmcTft3WKLocUETVx5NBFw4C9BKjRV7yAhnn9prnoTvSNcw7+p/uBrRvBLloMNn226JJ0gR02DdI3vwvs3Ab++99S9ICRJeJqvMCQzZTxJGrL7KhyCNxMqdHqMkETV1EqwcaAuE7GKcNqvABlxBnHCROqMH98Jf60qT23WZSYHzVx5JDxaEif8QIab0CNGaA3MFJY/N/Pg//n32BnfwnSws+ILkdX2LyFYJ+/BPyt/4D//U+iyyGjlRufH3oSl0KjSycf7NUmjptghF5iDNVOu27GKUMUL2A4jDFceawPdonh3nWtykk6MT2dfhonuhQN5xaI6JJXiRnI0mkcKSD+7mrw5x4DO/YksPMuFF2OLrEzPw924ungLz0DefUrosshozA4Pq80SzLnaIkn9XEfDmrMQLXbFCdxAOB26ifwO5xIoZTiBQynrrwEFx/lwabWPry6i+4lWwE1ceSQDMYL6HCpiUqrLRveI7gSYlb8ow8gP/wrYNJUJUpAr6fSgjHGwC68GjhiDvjjy8C3bxZdEhmpiBovUKfEC0R60khluS42U+Z4A6Y4iQMAl8Omm5O4MMULGNZnp7gxw1OGR96NItavjz9PpHDoEwg5NLEOIJ3S5VKTHLW2TLhFcCHEjHhHFPLSW4HqGkjX/gisVEcfZnWI2e2Qrvoh4PVDvvfn4K0UPWA9HERIAAAgAElEQVQobWGgzpuLFwjqaKmJhnn9pjmJcznturoTF6BRSkOSGMO1CxowkOF48O2I6HJIgVETRw5NRMfxAppKJWYgSzlVJM94Xy/kJbcC6TSk628Gq3aLLskQWHklpOtuAmw2yPfcAp7oFl0SOUQ8Eho2Pt+sxgvoIuhb4/UDMXPEDFQ7bbrIicvKHK09adpMaWDjqx34yqw6rAomsHZ3QnQ5pICoiSOHhLfpN15AwxgDPH5k6SSO5BHPZiE/eCfQuhvS1f8PzD9BdEmGwjwNkK79EdDVAfnen4Gn06JLIgfBOQfawmCeIZspY0l4K0pQVqKjjw3az6M245/GuR12DGRkJDNiN7oq8QKcmjiDO/+IOjS5HXhgXQR9afEPB0hh6OjdmOhaRN/xAhrmCyDbSnfiSH5wzsGffAB4bz3YhVeDHTFHdEmGxA6fDnbZd4EP3wd/9B7anKZ3iTjQ3zfsJC4YS6HJra8P9synNpkR4zdxg4HfYj9wa/ECtJnS2EpsDIvnN6BrIIPH17eJLocUCDVx5JDwaFjf8QIarx/ZtlbwDD3tJ2PHX/4b+Bv/BDvzC5BOOkN0OYYmHXsi2Oe+Dr7uDfAXnhRdDjkQ9Z6ZNj6fkTn2JJK6ug8HYEjMgImauKTYZRRaxhhlxBnf1PoyLJpWg398EMP70T7R5ZAC0PkncqIb0dCw0Ffd8gYAWQba6UIvGRu+fg34n38PzDsB7PyLRJdjCuzsL4Gd8BnwF56CvOY10eWQ/chtfFTHFUOJFDIydBMvoBmMGTD+hkqXU1kgI/okLqTGC9RQvIApXDjHA29FCZatbUUqK3ZUl+QfNXHkoHLxAnrOiFPlFq+YYLyGiMObP4T8u7uBiVMgXfZd/Z9AGwRjDOyia4Bps8AfWwK+4z3RJZF9iQ6PF9A2U+oqXkDj9ZviJM6tnsTFBMcMhBPKUhOJ4gVMwWmXcM38BuzuTuHZLR2iyyF5Rp9MyMFp8QIeg5zEAeBtxn8yS8TgnW2Ql9wGVLkgLaYogXxj9hJIV/8vUO9TFp1E6L9V3YkOjxdojiUhMWBctf5G7Jg3YKqTuG7hd+JSdB/OZOb6K3DqpGo8914HPu4y/iZXMoiaOHJw2v0IA5zEobIKrLySTuLIqPCBPiVKIDUA6bqbwaprRJdkSqyiEtJ1NwOMKdEDPRQ9oCc8Gh42Ph+MJ+GvKkWpTYcfGUwSM+C0S3DYGOJJcU2cFi9A9+HM57J5PlSW2rB0bSuyMi2WMgsdviMTvRm8H6H/kzjGGGyB8aYYryHFxbNZyA/cBYSCkK76Idi4RtElmRrz+iFd+39AZxTyfT+n6AGd4JwD0ZBywqUKxlL6W2qiMVHMgMtpFzpOSfEC5lXtsOHyY3z4oGMAy3d0iS6H5Ak1ceTgolq8QL3oSg6JrWG8KcZrSPFwzsGffgjY8g7YhVeBzZgruiRLYJNngF36bWDHe+CPL6XoAT3o6VbiBdSHdsmMjNYe/cULaHL3oE3w4M7ltAldbELxAuZ2UlMV5gUq8MeNbYj0pESXQ/KAmjhyUDxikHgBld0/Aehoo5gBcsj4Ky+Av7Yc7IzzIZ18puhyLEWa/ymw874GvuY18JeeFl0OUe8oauPze7pTkLn+NlPmaDEDJhihdzlsiAs8idPiBegkzpwYY7j6uAYADPeti9BDMxMwxqdyIlZb2BCjlBqbfzzAKWaAHBq+cR34Mw8DcxeAfeES0eVYEjvnK2DHnwr+tz9BXvuG6HIsLTeKri6yalY3U+p1nJKVlQNVLtOMU4o9iVPiBWopXsC0PBUluPgoD9aHe/HGx3QX2eioiSMHxGUZiIYHR1YMwOYfr/wPE4zXkMLiwZ2QH/ol0Hg4pG9+zzCnzWajRA8sBqYeCf7ob8E/fF90SdYVDSnxAvVqvEA8CbvE9H064wuYYsupy2lDPJkRdkISSqThr6R4AbM7c4ob0+rL8Lt3okJPfsnY0ScWcmCxTiVewGuAzZQqu9rEcboXRw6Ad7YrmygrKiEt/jGYQ58nDVbBStTogVov5GU/o+VEouTiBZR7UcFYEuOrS2GX9PvBnnn8pnho53bakZGB3rSYUOZwIgV/Nd2HMzubxLB4fgP601k8/E5UdDlkDKiJIwemNkJGOolj1W6grMIUP9RJYfCBfshLbwUG+pUoAXet6JIIAFZZDen6mwHOIS+5Bby3R3RJlrOveAHd3ofT+AJArAM8mRRdyZi41MBvESOVWryAv1LHJ64kbxrdDnzpyHq88XE33tlD77NGRU0cOaDc03AjZMSpGGOA12+Ki+4k/7icVUYo9zRDuvIHYOMnii6JDMF8AUjX/B/QHlGiB2hBUdEo8QKD4/N96SyivRk0unT+wV5rOg1+L24w8Lv4I24dfRlkZI6ADgPdSWF84chaTHCV4t51rehLiw2ZJ6NDTRw5sGgIsNuBmjrRlYwI8/oN/wOdFAZ/5hFg01tgF1wBNnOe6HLIPrCpR4Jdch2wfTP4H+6lLWrF0tMN9Pfmxudb4sq2Qr2fxOUy7Qw+Qu9yKCdxMQGB3yF1M2VDJY1TWkWJTcLi+X509GXwxMZ20eWQUaAmjhwQj4YBjx9MsokuZWS8fqA9Sk/xyTDyqy+Cv/IC2GnnQTrlbNHlkAOQFpwKdu5XwVe/Ar78WdHlWIM6eaGdxGmbKZt0upkyR4sZMPgI/eA4ZfFP4rR4ATqJs5bpnjKcPdWNl7Z3YXt7v+hyyAhRE0cOLGqseIEcb0CNGaBLu0TBN70F/tTvgDnHgX3pUtHlkEPAzr0AbP6nwP/6R8hv/Ud0OaaX2/ConmwF40k4bAxenZ/O5GIGDN7EVTuUcUoRd+IoXsC6vn6UB3XldixdE0Y6S1MPRkJNHNkvLstAm7HiBTS5mg0+XkPyg7d8BPnBXwITJkH61veNd7JsUYwxsEuuBybPAH/kN+A7t4kuydzawgAbEi8QU5aaGGLlvNdv+JO4EhtDRakk5iSuh+IFrKq8xIarj2tAMJ7Cc+93iC6HjAA1cWT/Yp1AKmXMkzh1EYvRf6iTseOxDiVKoLwC0nU/BnM4RZdERoCVlCiLTmrqIC+7HbytVXRJ5hUJAfXD4wUm6H2UUsW8AaV+g3M57IgJOIkLdafQUKXvE1dSOMeMq8TJTdV4dks7gnFjb3m1EmriyP61afcjjLOZMqeyGigrp5M4i+PJAchLbgP6eiFddxOY21gLeoiCVVVDuv4nQDYL+Z5bwPtoJXYhaHegAWVDYtdAFk1ug9yR8vpNETPgdtoQL/JiEy1eIKDnQHdScN88xosyu4Rla1oh0zIpQ6AmjuzX4P0I453EKTEDATqJs7BclEDLR5CuvBFswiTRJZExYA3jlBO5tlbI9/8CPFP8kTMzy8UL+JT3+6C2mdIgJ3G5GByDbyV2OW1FH6fU4gX81MRZmttpx2XzfNjW3o9/fhATXQ45BNTEkf2LhpV4gdp60ZWMCvP6DX/RnYwef/ZRYOM6sK9eDjbrGNHlkDxg02aCXbwY2LoR/In7KHogn3oSaryA1sSpmyl1Hi+gGbwHbez3fJfTXvTFJuEepWH30zil5Z06qRpH+Svw2Po2tPXSdm+9oyaO7BePhoD6BuMugaCYAcuSX18OvuJvYJ85F9KnF4kuh+SRdMKnwc75MvjKl8H/+RfR5ZiHOnqujc8HY0lUlErG2Vbo0WIGjD1C73LakEhmkZWL94Ai1K01cXQSZ3WMMVxznA+cczzwVis9KNM5auLI/kXDgyMqRuT1U8yABfEt74A/+SAw+1iwL18muhxSAOy8C8GOPQn8L4+Bv7NKdDmmkBs9H5IR1+hyKKPpBsDKK0wRM+By2MEBJFLFO41r7Umj1MZQV26Qhp0UlK+yFBfO8eCtPb1Y2ZwQXQ45AGriyD7l4gU8xrsPp8ktZDH4HQly6PjujyE/cCcwromiBEyMMQb2jW8Dh0+H/PCvwXdtF12S8UVDaryA8hQ+GE8a5z6cxgQxA+5c4HfxmrhQIoWGyhKKFyA5i6bVYEqdEw+9HUF3kRftkENHTRzZt3iXEi/gM24Tpz1R5iZYO00Ojsc6IS+5BXCWQVp8E5izTHRJpIBYSSmka38EuGshL70NvD0iuiRji4aBOg+YvQRdA1n0pGTD3IfTmOEetMupBX4Xb7lJOJGiUUoyjE1iWDy/AT2pLH7/Lr236hU1cWTfcvcjDNzEVbnUmAFj/1AnB8eTA5CX3gb09ihRAgZdxkNGhlW5IF13M5DJqNEDvaJLMiweCQFD7sMBQKNR4gU03gDQ1W7omAGXehJXrKw4mXO0JtLUxJG9TKxx4vMz6vDqrm5sCNN7qx5RE0f2KTeSYuRxSsYAj9/wF93JgXFZhvzwr4DgLmWEsvFw0SWRImL+8ZCu/n9ANAT5AYoeGI1cvMCQ+3CAgeIFNNpDx3bjBsK7HNo4ZXH+HHf0ZZCWOWXEkX368qw6BKpKce+6VgxkZNHlkE+gJo7sWyQE2OxAnUd0JWPCfAE6iTM5/txjwPo1YF++DGzOcaLLIQKwI+aAff0a4P0N4E8+QBvVRkqLF/ANxgu4nLbcaJ9RMG0Rl4FH6CsdNkiseHfiQgmKFyD7V2qTsHh+AyI9aTy5qV10OeQTqIkj+8TbwoDHZ/zFEB4/0BGlp/MmJb/5T/B/Pw926tlgnzlXdDlEIOnE08HO+gL4m/8C//dfRZdjLNr4vEdpgppjSTQZ7RQOGIwZMPAyK4kxVDtsiCeL8zMrnKB4AXJgR/rKceYUN/6+rRMfdPSLLocMQU0c2bdoOHc/wtB8fkCWgQ6KGTAb/t568CfuB2bOA/vKtwyzCp0UDvvcRWDzFoI/9yj4u/8VXY5h5MbnfX7InKMlnkKjwZaaACaKGShi4Hc4QfEC5OAuPsoDt9OOpWtakSlihiE5MGriyF4+eT/CyHK/B7oXZyp8TzPkB34BBBohXXkjmM3gJ8YkL5gkgV32HWDiFMgP3w3+0QeiSzKGaDgXL9DWm8ZAxnibKXO8fsNvJHY5bUVbbBKmeAFyCCpKbbjqWB8+jiXx1/c7RZdDVNTEkb3FO4FU0hwncervwejZQWQQ7+6CvORWoNSpbKJ0losuiegIK3VAWvwjoMoNedlt4B1tokvSv2goFy8QjCnjdYZbaqJiXr/hs0HdDnvRFpuEKF6AHKL5E6pwQmMVntrcjj3dKdHlEFATR/YlovwANMNJHKpcgLPM0BfdySCeTEJeejuQiEO67sdgtcZevEMKg1XXQLr+ZiCVhLzkFvD+PtEl6RqPhnObHZvjymbKCS6DfrD3+oHOdvCUsWMGihGwTPECZKSuOMaHUjvDvWvDkGmBlHDUxJG95Fbym6CJY4wB3oChL7oTBZdlyI/8Gvj4A0iXfw+sabLokoiOsUAjpKt+CIRbID94J3i2OONpRqOMz4fAhmTE1ZfbUVFq0BFlbYKkzbgBxS6nDX1pGalsYVe6a/ECtJmSHKqaMjsuO9qLLdF+vPxhXHQ5lkdNHNlbNKzEC5jklIN5/XQSZwL8+T8A764G++KlYHMXiC6HGACbMRfswquBLe+CP/UgRQ/sS28C6OvNPbQLxpPGvQ8Hc9yD1qIdCr3cRNtMSRlxZCQ+c5gLs33leHR9FB19adHlWBo1cWQvPKrGC5hlWYQ3QDEDBif/59/g/3wO7OQzwU7/nOhyiIFIJ38W7LPng7/+D/AVfxddjv6oD7iYN4CszLE7njLsfTgAuWbUyPegXU4t8LuwTVyI4gXIKDDGcM38BmRkjgffNu6JtxlQE0f2Fg3l8nZMwUsxA0bGt24Ef+I+YMZcsAuuoCgBMmLs85cARx8P/uwj4BvWiC5HV3Kj5l4/wj0ppGVuyHgBDSuvBCqrjX0S59BO4gr74DGcSKNEongBMnL+qlJcMLsea1p68N9gQnQ5lkVNHBkmFy/gM8FmShXzaeM1xn0ya1U8FIR83x2AbxykK38AZqcPG2TkmCRBuuwGoGky5IfuBm/+UHRJ+hEZjBcIxpRlIIY+iQMAX8AcJ3EFXm4STqTQUEXxAmR0zptei8NqHHjgrVb0FGERD9kbNXFkuFy8gMlO4jBkYQsxBN4dg3zPLUBJCaTrb1aCfAkZJeZwQFr8Y6CyGvKS28A7KXoAgPJwq7YerESJF2Aw8GZKFfP4jX0SpzZxsYKfxKXoPhwZNZvEsHiBH/FkFo+up0knEaiJI8NFtXgB85zEocqtxAwY+Mms1fBUEvKy24FEDNLiH4PVeUWXREyAudTogWQ/5CW3gg9Q9ACPhgB18iIYT6KhqgQOu8E/GviMHTNQZpdQamMFvRMnc47WHooXIGNzeK0TnzuiFi/vjGNTa6/ocizH4O/UJN94xDzxAholZsBPJ3EGwWUZ/Pe/BXZth3TZDWCTpoouiZgIG9cE6cofAqEg5Ad/SdED0XBuo2NzLGn8UUpg8E63QWMGGGNwOWwFvRPX0ZdBKsvRUEnxAmRsvjqrHg2VJbh3XSuSmcLGYpDhqIkjw7WZK15Aw7wBOokzCP63J8DfXgn2hUvA5p0guhxiQmzm0WAXXAlsfhv86d+JLkcY3tMN9PUA3gDSWRmhRMrQ8QKa3J3uNuM+uHM57QU9icvFC1TTSRwZG4ddwrXzGxBOpPHU5nbR5VgKNXFkGB4JA/UmihfQeP1Ae4RiBnROXrUCfPmzYCedAfbZz4suh5iYdMpZYKefB/7aS5BfeUF0OWLkxuf92NOdgsyBCWY4idPuQUeM++DO5bQVdLFJOKHke/krqYkjYze7oQKnHe7CX7d2YlfngOhyLIOaODJcNGyqUcocb0CJGeiky7d6xbdtAv/DMuCIOWBfu4qiBEjBsS9eChw1H/zph8E3viW6nKLLjZh7A2hWN1Oa4iQuFzNg5CbOXtBxylAihRKJob6CNv6S/PjGXC9cDhuWrg0jK3PR5VgCNXEkh3MOtA3ejzCT3O/JwE9mzYyHd0O+7+eANwDpqh9SlAApCibZIF3+PaDxMMgP3QUe3Cm6pOKKDokXiKdgYzDPtkKD34N2O22ID2SVn8sFEE6k4KukeAGSP5UOG6441oednUn8fVun6HIsgZo4MijeBSQHcpvKTMWnxQxQE6c3PBGHvOQWwGaHdN1NylN0QoqEOZyQFv8IKK9UNlZ2dYguqXgiQ+IF4kmMqy5Fic0cH+qNfg/a5bQhLXP0F2hRRDiRovtwJO+On1CF+eMr8adN7bl7l6RwitLEtbe346c//Sm++93v4oYbbsDy5cuL8bJkpNSnlsxjvpM4VLkBR5mhs4PMiKdTSpRArBPStT8C8zSILolYEHPXQbr+JqC/H/LSW8EH+kWXVBS8bXB8PhhLotEEo5Q5Xj/Q1Q6eNuYHyWqHMo1QiOUmuXgB2kxJ8owxhiuP9cEuMdy7trVgJ8lEUZQmzmaz4aKLLsKvf/1r3H777fjXv/6F3bt3F+OlyQjkTqlMeBLHGAN8fjqJ0xHOOfij9wA7t0G67Dtgh08XXRKxMDZ+EqQrbwRaPob8u7vBZQtED0RCYL4ABjIyWnvS5ogX0Hj9AOdAW6voSkbFXcDAby1egDLiSCHUlZfgkrkebIr04ZVdcdHlmFpRmriamhocdthhAICysjKMGzcOnZ00L6s70RBgs5kuXkDDPH46idOR3id/B77uTbDzLwI75kTR5RACNusYsAu+BWxcB/7MI6LLKSjem1DiBTx+tMSVpSZmOoljXvVhpEHf813Owp3EaWNu1MSRQjljshtHesvw+3ej6OqnreCFUvTtAdFoFB999BEmT55c7JcmB8GjYaC+wXzxAhpfANiwBjyTocUZgsmrX0Xvs78HW3ga2FlfFF0OKZL2vjTWtvQgUcDV6WNWNx/8VDv4h9sx7R+vYd5Zp4quqDAi6vi8L4CgtpnSbCdxUH6uGfGWn0s9iStME6fEC5hmiQ3RHYkxXDO/Ad956WM89HYEPzhpnOiSTKmon2QHBgZw991349JLL0V5efle/3zFihVYsWIFAOCOO+5AfX19Mcs7JHa7XZd15UNHRxuk8Y2oMfjvb3/fo/7DpqA7m0UNz8BeT3evREltWY+uPyxF6ex5cH/7JrASupehZ2N9z4smknjtw3a89kE7NocTeayskJqASU0oa0viryWlqHRViy7ogEbzPep/7x10A6iZOgNtH3OU2iQcOdEPm2TElmcf6usRrXLBGe9CtU5+po3k+1SdkQHsRNpWmvfPHLFtCZTYGKY1Npjn+51HZv6cV0z19cDFx2Xx8JogYrwMkz0Vefva9D1SFK2Jy2QyuPvuu3HSSSdh/vz5+/x3TjvtNJx22mm5v25v11/ye319vS7rGivOOeRwC9jh0w3/+9vf94iXKx/Eura/B1biLHZZBABv3QP55z8E6hvguvF2dMRpXl7vRvOe19GXxupgAiubE9jWriwJmVTjwIVz6rGwsRqBKv037js278APNjvw57+8gkXnniS6nAMazfdI3rkdYAxddge2hVsxwVWCrk5zbebkngb0t3yElE5+po30+1RRIiHUmcj7z+SdkTh8Feb7fueLWT/niXDqeAf+YGN4Yt0uXDs/f0vzrPY9CgT2vauiKE0c5xz3338/xo0bh0WLFhXjJclIafECJsyIyzH4eI3R8US3EiUgSZCuvxlSZTUwYJ03YbPTGrdVwQS2timN20T3YOM2zmDrzKfNnoYpb7+Jl9pKcFY2C5vZxsyjYaDWo8QLxJKY1bD3dIzRMa8ffMd7ossYNZfThu4CLDZpTaTpPhwpiiqHDadOcuG1j+K4+Cgvqhwmex8VrChN3Pbt2/Hmm2+isbERN954IwDgggsuwNFHH12MlyeHQt3amLsMbkbVWswAbagsNp5OQ77vZ0BnO6Tv3UZRAiax38Ztdj1OaKrC+Gpj37E6Z0IpfhN1Y+PazTj6hKNEl5NXPKrEC/Sksujoz5jrPpzGGwDWvgGeToGVGK9pcTnteb8TJ3OOcE8KR/nN17QTfTp7qhv/+jCGl3fG8PkZdaLLMZWiNHHTp0/HM888U4yXIqPEtQ1eJj6JY4wB3gaKGSgyzjn440uAD94H+9b3wSYfIbokMgZa47Y6mMD7auPWZKLGbaiFJx+NR5/chBe2d+PoE0RXk2fRMNgxC9ESM99mypyhMQOBRtHVjJjLaUO4O53Xr9nZT/ECpLgm1jgxy1eOf+zownnTa+keZh7Rij6iiIaVeIE6r+hKCop5A+AtH4kuw1L4i0+Dr3kd7LwLIR13suhyyCh09KXx35YEVjUrJ24cSuP2tdn1WNhYhfFmPMUBUOooxWcrEng6FcCej1owbtIE0SXlBe9NAL0JwBtAsxov0GTCJo55A+CA8vPNiE2cw46tyfwGz4e6KV6AFN8502pwx5t78NaeHiyYUCW6HNOgJo4AUE/i6nzmjRfQeP1KzEA2a/7fqw7Ia98A//ufwI7/NNg5XxZdDhkBrXFb91oIm0LdSuPmcuACkzdun/TZk2bizy9Hsfy/O/AtkzRxg+PzfgRjSZTZJdSXm/DjQO4edMiQ96BdThsSySyyMs/b6UVrj3Ky5zfAciFiHseNq4S3wo4Xt3dRE5dHJnzXJqMSDSs5ambnCwDZLNARNfXoqB7wD94Hf/S3wNSZYBdfq4yzEl3r7M/gv8EEVjZ3507cDqsrx1fVxm2CRRq3oeoaPFgob8Krch0uTPSgvKpSdEljxtWMOPgCaH4vhUZ3qSn/+2QVlUBllWHvQbucNsgc6Ellc+HfYxXqTsEuMdSXUxNHiscmMZw1pQaPbWhDcyxpypN/EaiJI+CcK/cjps4UXUrBMY9/cLyGmriC4dEQ5HtvB+p8kK75XzA7fWDQK61xWxXsxvtRpXFrdJXmGre5h4+z1CrnfTlnzji8+R7w6hvrsWiRvuMGDkk0DDAG1PsQjDVj/njjN6b75fEb9h60y6F8RIsP5K+JC/ek0FBZQveSSNGdPtmNJze346XtXbhmPi03ywdq4gjQHTN/vIBGPW1UxmtoO2oh8N4E5HtuBQBI198EVkGjE3rT1Z9Rt0p+onGbpSwnabTgiduBTJ09FYe/uwrLozZzxA1EQ0CtB/GshO5k1tRPxZkvAP7B+6LLGBWXU/lzFhvIoBH5+R6FuylegIhR5bDhUxOr1bgBDyopbmDMqIkjgDpaw6zQxFHMQEHxTBryfXcAHRFIN9xm7sgKg9Eat9XBbrynNm4TqHE7JJIkYdH4Evy2zY2N67bg6OPniC5pTLR4gaCZN1NqPH7Dxgy4nYMncfmgxQvMoXgBIsiiaTV4eWccL++M4XyKGxgzauIIeJva0FjgAzfFDBSOEiWwDNi+GeybN4BNmSG6JMvr6s+oWyWHN25fmVWHhY3V5v7wnmcnnnw0Hn1qE17a1o2jjxddzRip8QLNahNnyow4jS+gxAy0RwC/sRbTaCdx3cn8NHFavECATuKIIBNrnJjpLcPyHTH8D8UNjBk1cUQ5ibNAvECO1w/sbhZdhenw5c+C//dVsHMvgLTgFNHlWFasP4PVLUoA9/vRPsgcGF9NjdtYlTpLcUZ5N/6cakDo490ITBwvuqRRGYwX8CMYT6LKYcs1C2bEvOo96EjIcE1cZakNElPGKfMhnKB4ASLeomm1uOM/e/D2nh7Mp02VY0JNHFFGC60QL6Bi3gD4hrUUM5BH8lv/Af/rH8EWnAJ27ldFl2M5MfXEbeUnGrcvzazDidS45c1ZJ8/EX15uw/LV23G5QZu4wXiBAIKRFJpc5txMmePV7kGHDRczYJMYqhy2vI1ThhMUL0DEO258JerL7XhxRxc1cWNETRxRMuKscB9O4/UrMQOdbYCHNiSNFf9wK/gjvwGmzAC7+DpzfyDUkdiAtlUygfc+0bgtbKxGo9k/nAtQ1+DF8fJmvCLX4Ws9vSivrBBd0ohpo+Tc04DgjiROmVQtuKLCYhWVQEWVsmAujMkAACAASURBVMzFgNwOO+LJ/J3EUbwAEc0mMZw9tQaPb2hDMJakh4xjQE2cxSnxAq2WiBfQMG9gcLyGmrgx4W2tkJfdDtTWQ7rm/8BK6MNBIWmN2+pgAlvUxm1cdSm+eGQdTmyixq0YFs0OYOX7DK+//i7ONmLcQCQEMIb2Sg/60kFrLLTxGjhmwJm/k7hQguIFiD6cPtmNpza346UdXbj6OPocNlrUxFlddwxI9isbvKxCPXXkbcYbr9ET3tsD+Z5bAM4hXXczWKW5n+iLEh/QlpPs3bgtbKxCk9tBjVsRTZszDYevX4WXojacKcuQJEl0SSPTFgZq6tHSIwOAqeMFNMzrB/9wq+gyRqXaacOuzoG8fK1wIk2jlEQXqh02nDyxGq/tiuOiORQ3MFrUxFmddj/CZ6EmzlUDOJy5aAUycjyThnz/HUBbK6QbbgFrGCe6JFPJNW7BBLZElMYtUEWNmx5IkoSzx9mxpL0Gm9ZtwVELZosuaUR4JAT4AmiOq/ECljiJCwDr3gRPpw03LeBy2vNyEidzjnAihTkNFC9A9GHRtBqs2BnHK7viOO+IWtHlGBI1cRbHtXsCFroTxxgDPMYdrxGNcw7+x/uAbZvAvvEdS43iFlJ8IIM1LT1YGeymxk3nTvrUXDz21Ht4YWscRy0QXc0ItYXBjl6IlngStWV2azwB9/rVmIFWw22odDts6E3LSGdllNhGf+rbpcYL0GZKoheTapw40luGl3Z0YdG0GhrzHQVq4qwuGlbjBXyiKykuH8UMjBb/53Pgq1aALfoKpBM+LbocQ9Mat1XBbmzONW4l+MKMOpzYRI2bXjmcTpxRFsdz6QaEm/fA32SMk2je2wP0JACfH82xlGUWCjCfeg86GjZcE+fSAr+TWdSXj76JC6nxApQRR/TknGk1uPM/IbwT6sFx42lT5UhRE2d1kRBQ57Xcqn3m9YNvWEcxAyPE314J/pfHwY47Gex/via6HEPqHshgze4erGzeu3Fb2FSFidS4GcJZJ8/EX15pw/LV2/BNgzRx2vi87PGjZXsSZ01xCy6oSLR70JGQ4e5Baxl+8YHsmLZKUrwA0aMF46tQV27Hi9u7qIkbBWriLI63hXM5Opbi8QPZDMUMjADfuQ3yI78BJh8Bdun11GiMgNa4rWruxia1cfNXleDz6okbNW7GU+/34vjMZqzI1uECg8QNaOPz0coGpLID1jmJq6gCyiuVpS4GM9jEjS1mQIkXAMULEF2xSQxnT6nBHza2IRhPWuOObh5RE2dhnHMgEgabPEN0KUU3bLyGmriD4u0RJUrAXatGCdBIzsF0J7NY05LYZ+O2sLEKk2qocTO6RXP8WPW+hNffWI+zzzlRdDkHFw0DjKG5xAVgwFofmHwBZamLwbi1ccoxLjcJJ1LwVZbSvSOiO2dMduGpze1Yvr0LV1HcwIhQE2dlCTVewIoncdp4TTQEduRcwcXoG+9TowSyGSVKoMoluiTdyjVuwQQ2tfZS42Zy0+dMx6T1q7A8IhkjbiAaAmrq0NKjNAQTLNTEMY8ffKfxYgZyJ3FjDPwOJdII0Cgl0aFqp12JG/gojq8f5UFlKV1xOVTUxFlZRI0XsNBmyhxXLVDqyN0RIfvGMxnI9/8CiIYgfeenYP7xokvSne5kFmtbElg5pHFrqKTGzQokScKigB1LOmqw6a0tOGq+vuMGeFQZnw/GkvBVlqCsROdNZz75/MBb/zFczECZXUKJxMZ0EsfVeIHZFC9AdGrRtBq8siuOV3ZS3MBIUBNnYbkV+1bKiFMxxgCv35DjNcXCOQf/0/3A1o1gl34bbLq+P6AWk9a4aSduWbVxO/+IWixsqsZh1LhZxkmnKHEDL22N46j5oqs5iGgI7OgTEIylrDVKCagxAzLQHgEM9DCKMQaX04bYGJq4TjVegDZTEr06rNaJGZ4yLKe4gRGhJs7KoiFAkoBar+hKxPAGgBDFDOwP//fz4P/5N9jZX4K08DOiyxEukcxi7e4EVjYPb9w+R42bpTmcTpxeFsdf0g1obd6DBp1uqtTiBdKeAHZ3JnHs+ErRJRUV82r3oEOGauIAZaRyLItNBjdTUhNH9OucaTW4a2UI74Z6Lff+NFrUxFlZNAzU+8Ds1vxjwLx+8I0UM7Av/N3V4M89BnbsSWDnXSi6HGG0xm1VcwIbhzRu5x1Ri4WN1Ti8lho3Apx14pF4/rV2LF+9HZfptInTRsdbXeOQ7QAmuCz2gT53DzpsvJgBh31M45SDGXHGGSMl1rNgQhXqyux4cUcXNXGHyJqf3gkAdd20Fe/DabwUM7Av/KMPID/8K2DSVCVKQO/LGvKsJ5nFmk80bj5q3MgBeMb5sCCzBSuytbigtw9lFfq7e6TFCwSd9QBSaLJIvICGVVYrMQNR443Qu5w2tMSTo/71FC9AjMAuMZw51Y0nNrZjdzyJ8VYb+R4FauIsinMORK0ZL6AZHK+hmAEN74hCXnorUF0D6dofgZVa401Ua9xWBxPYEB7euJ3QWIXJtU5q3MgBnTOrAau32fDGG+/izLN1GDegnsQFeTkklsK4aoudxAHKPWgDLrNyOe2IJ7PgnI/qfYjiBYhRfHayG89s7sBLO7pw5bH0uexgqImzqkQMGOi39kmcb8h4DcUMgPf1Ql5yK5BOQ/r+7WDVbtElFVSPNioZVE7cMjLgraDGjYzOjLlHYNLGVXixVcIZeowbiIaB2noEezIIVJWi1Kaz+oqAeQOGjRlIZTn6MzLKS0Y++h9OpOGvpFM4on8upx0nTazCq7vi+PocDyoobuCAqImzqqgWL2DBjDhNLmbAeOM1+cazWcgP3gm07ob07f8PzD9BdEkFsb/G7dxptVjYRI0bGT1JknB2wIZlHbXY8s57mH3sLNElDcOjIcDjRzCWxMQap+hyxPAaM2ZAC/zuHsiOuInT4gVmUbwAMYhzptbi1V3deHVXHOdOp7iBA6EmzqK4mhFn5ZO4XMyAAcdr8olzDv7kA8B768EuXgx2xBzRJeVVTyqLdbt7sLK5e0jjZqfGjeTdyZ+ai8ef3ooXtsQw+1jR1XxCNIzU0QsRTqRx8sRq0dWI4TNmzIDLoQV+Z9FQNbJf29mfQTLL4a+04PgsMaTJdU5Mry/DSzu6cM60Gkj083m/qImzqmhYiReos2i8gMbrB0JB0VUIxV/+G/gb/wQ78wuQTjpDdDl5oTVuq5q7sWFI47ZoWi0WNlZhSh01biT/nGVlOL0shr+mG9DaEkLDBH1MOvC+HqCnG3tqm8BjQKPFlppomMc/eA/aSE2cehIXG0XMgBYvELDiHUhiWIum1eCXq5S4gWPG0abK/aEmzqqiIaDOa9l4AQ3zBsA3vgUuZ8Ek681e8/VrwP/8e2DeCWDnXyS6nDHZV+PmKafGjRTXWQtn4K+vd+Afq7biG1/VRxOXW2pS7gNiQJNVt775lO8Hj4YMFTPgcqoncaOIGQir8QJ0J44YyfGNVah9144Xt3dRE3cA1v4Eb2E8Gs79QLM0LWagw3oxA7z5Q8i/uxuYOAXSZd81ZJRAbyqLtbt7sDrYjfXhPmRknmvcTmiswlRq3EiRecc34LjMe2rcQD+cFWWiSwKPqPECNhfsUta6oc8VVUB5Ra6pNYrBJm7kJ3EhNV7AU0FNHDEOu8Rw1hQ3ntjUjt3dSYyvtuiDp4OgJs6ClHiBENjh00WXIlwuZqDNWjEDvLMN8pLbgCoXpMXGihLo1U7chjRu9eV2nDPVjYVN1dS4EeHOneXDmm12vP7Guzjz7IWiy1He3wAE0yUYX22z7Kp55R50IJeZZxSlNglldmmUJ3FpeCsoXoAYzxlT3Hh6SweWb+/CFRQ3sE/UxFlRIq7EC9BJXG6xC4+EwWZYI2aAD/QpUQKpAUjfvROsukZ0SQc12LglsD7cS40b0bUZc2egaeNqLG+FPuIGImGgph7B7jSO8Fp7SyHz+sF3bRddxoi5nLZRj1MGqugUjhiP22nHSU1VeGVXN75+lGdU8RpmR02cFalPIZmFN1PmuGuB0lLDjdeMFs9mIT9wFxAKQvr2T8DGNYouab/60tpWyeGN29lT3TixqRpT6py0tYrokiRJWORnWNZZhy3vvI/Zx84UWg9vC6PP14i2vgzOtOp9OI03ALy1EjyTBrMbp7lxOe2IJUc2TpmLF/BZu3EnxnXOtBq89lE3XtlJcQP7Qk2cBeVW6ls5I07FGAM8fsON14wG5xz86YeALe+AXXSNLk8etcZtVTCB9aFepGWOOrVxW9hYjan11LgRYzj5lKPx2DNb8dJ7XcKbOERC2D1X2Tzb6LbofTiNd0jMQINxNlS6nTa09qRH9Gty8QJWvQNJDG9KXRmm1ZdhOcUN7BM1cVYUoXiBYXwBINQiuoqC46+8AP7acrAzzod08pmiy8nZX+N25lQ3TqTGjRiUs6wMpzti+FvGj8juMHzjxUw+aPECQdd4oAdosmi8gIZ51ZiBSNhQTZzLacP29v4R/ZpWNV7AT+OUxMAWTavB3atCWB/qxTzaVDkMNXFW1BameIEhmMcPvsncMQN84zrwZx4G5i4A+8IlostBXzqLf22L4l/vKTkwaZmjrkxp3BY2VmFafRk1bsTwzjrxCPzt9S78Y+VWXPpVQePrWrxASS0cNkZbCtUJFN5msJgBhx3dySxkzg/5vTGkxgsE6CSOGNjxE6pQU2bHSzu6qIn7BPoUb0E8Esot9CBQTuIyGaCzHaj3ia4m73hwJ+SHfgk0Hg7pm98TFiXQl87iLfXEbVjjNsWNhU3UuBHz8Y3347jM+3g5W4Ov9vfDWVb8uAFtfD7Iy9HoLqX/xirVmIGIse5Bu5w2yBzoScmodhzaw8ZwIgUbo3gBYmwlNoYzp7jx5KZ27OlOYRwF1+dQE2cxnHOgLUzxAkPkxmuiIdM1cbyzXdlEWVEJafGPwRzFHaXqS2fx9p5erGzuzjVutWrjdvbsCWgoSdKHSmJq5xzpw5oddrz5+rs44ywBcQPqfd+WAYajA9YepQSG3oM2WhOnfFyLD2QOuYkLJdLwVVK8ADG+Mye78eyWdizf0YVvHWOuz2ljQU2c1STiQH8fncQNpY3XRM0VM8AH+iEvvRUY6If0w1+AuYuz2Ulr3FYFlcYtlVUat89OcePExipM8ygnbvX11Whvby9KTYSIMnPeDDRtXo0Xw8BpIuIGomF0109A10DW8vfhNMwXMFzMgDsX+J3FBNeh/ZrWnhTdhyOm4C6z48TGaryyM44L59SLLkc3qImzGvXpI6OMuEGuGiVmwGDjNQfC5awyQrmnGdJ1N4GNn1jQ1+tPy3hrT8+wxq2mzI4zJit33KZ7aFSSWJMkSTi7geG+rjq8v/59zJxX3E2VPBpGi38qAKCRmjiF12+4mAHt9C0+cGgxA1q8wEyL5wIS81g0vQavf9yN13Z14xI/ncYB1MRZTm6VvodO4jRMkpTxmjYTNXHPPAL8/+3de3yT5cE38N+dtE3apk3SpknTQiuHAiJQQQ7SgpxRET6bTJjMR7c92xDRsc3Xzfl+3u3jJj46Dw+gg+nYxpRtTpniAZExPIAUlLOcjwqtJDQ9Nz03ua/3jzsJLT0fkzv5ff+SpkkuuM2d/HJd9/U7uh/SPcsgjbqpT57DH9z25FfiYJPgNmeoMuPG4EakmD5tHDb+6zTeO1ba7yEOLifyx+YAADKMvJYEgLL6QmU1AybfcsryThZ+l9V5UedhvQCFj6zkWAxL1mPLmTLcmyOCPZyQwBAXaVy+egEL6wWasdoB59fBHkWvkD/aAvHhe5BmfwOa6fN69bFrG2Uc8M24XRvccjMScD2DG1EL+vhYzNaV4l1PKlyXr8CantovzytqqgF3BfJjrYgXGiTF8i0faHodtHpqBhJ0WkgAKjpZ+O2sVHam5HJKCifzh5vxv3uc2J9fjiHxwR5N8PGMHmlc/noBntibkqxpEMcOqL5mQBzdD/HPPwHZEyEt+l6vPObV4ObGQUeVEtz0WswZYkRuZiKDG1En3J57Pd7dWY4Pdp/Ed7/dPyEOvtUFBZoEZBp0yqYe1OQ6aPXUDGg1EhJ0WlR0cibOWeUPcZyJo/CRk5GIDYdc2HTEgV/mckklQ1yEES4nNzVpjdWu+poBUfAV5D8+BwwcBM2PHulRGK3zKMFt96VWgltGIkakxHLHM6IuSB2YhvGNp/Efjwnf7qe6AeFyQgDIb4zGFF4Pd5UhAYiND1wjrhZGvbbT18Q53Y3QSoCV9QIURpS6ATNeO1YMx2gz0iK8boAhLoIIIQCXA9Lg6UEeSeiRbGlXl9eoMMSJ8hKlSiAuHpof/z9IOn2XH8Mf3PLy3Thw+Wpwmz3EiCkMbkQ9tmBUCvadjcaunYcx97acvn/CQgfKYhJR5QEyjAxxfpIkAVY7hMo2szLqozo9E+dwN8BmiOY5m8LOrVkmbDpRgq1ny/DDCK8bYIiLJFWVvnoB7kzZgm+jF+FyQBp5Y5AH0zWivg7yiyuBmmpoHn0akim50/et88g4eLkKu5sEN5MvuOVmKEsl+SGAqHeMuukGZBzbi60OuX/qBlxO5NuyAAAZpsj+xvpaktUOcfFcsIfRJUadFhfL6zv1u053A5dSUlgyx0ZhZpYFH35Zgu9kWxAXrd5LYHqKIS6SFCo7U0pcTtmSKUmpGVDZ8ppAlUDBV8oM3MBBHd7HH9z8M271vuA2a7ARUzIZ3Ij6ikajwR2pAn8oS8HJI6cxatzIPn0+4XKgIGUMAM7EtWBLAw7kqapmwNTJ5ZT+eoEbWC9AYequG9Ow/UwRPv6yEncMNwd7OEHDEBdBhD+gcCauhUDNgNpC3Ka/Al/sg7RkKaTR49v8vXqPjAOOKuRduhrcjHotZg42IjczASNT4hjciPrBtGnj8Oq/zuD9o6V9HuLgciI//VaY9FoY9Xy7bybF7qsZcAGp6cEeTacY9VGoapDR6BWI1rZ9vi731QukcSaOwtQNqQnIStZj69ky3D7MFLGbq/GsHklcDkBivUCbrHbgyuVgj6LT5E+2Qux4B9KsBdDMnN/idgY3otATGx+H2TFleM+bCtflQljT++aaDlFbo9QLxJhZ8t2Kq9dBO1QU4pRlY5X1HiTHtT176HCzXoDC3/zhZqza48QXV2ow1h6ZfQMMcZHE5QQsrBdoi2S1q6ZmQBw/CPHaH4HR4yEt/u/Az+s9Mg46lF0lrw1uORkJuMHK4EYUbPNyhuPdTyuwbfcJ3PftProw3+WEDAkF3ljM4VLKlqz+66CdqqkZMOqUj2wVdd52Q5zTzXoBCn+5GQnYcMiF98+UMsRR+BMuZ2ADD2qFNU2pGSgrAZJDd7ZSfH0R8svPAGmZ0Cx9BA2yhINfVwaucavzCBh1WswYbEQugxtRyEnNTMeEj8/gPx4jvl1XB52+67vJdkS4HCjSm1AnJM7EtcaQ6KsZcAR7JJ3mn4mrqG9/h0rWC1AkiNZqcGuWCW8cK4nYjXwY4iKEUi/ghHTzsGAPJWRJVruyvKbQEbIhTpSXQn7xt6iPTcCRRb9A3oGyZsFt+iAGNyI1uON6C/adj8GnnxzG7Nsm9/4TuJwoiFdKxbmpSUuBmgEVXQftv66xo81NnKwXoAhxW5YZ/zqu1A384KbIqxtgiIsUVZVAbTWLvtvj2/BFuJwhWTNQV1ODg3/5G/bYb8MB2xjUHXbDqNNi2nXKNW6jGNyIVGPMhFEYeGIvtjhkzOyLuoFCB/KTld1qWS/QOrXVDARm4jroinNE6KwERZ6k2CjkZiRix4UKfGdMCmKj+7i2JcQwxEUK37eNEnembJspCYiOCanlNfUeGYec1ci7WIn9l0pRZ5uLRK2MaYNMDG5EKqbRaDDPJvByeQpOf3EaI8f27k6VosiJ/KRpSImLiugepXZZ7aqqGYiP1iBKA5S3MxOn1As0sl6AIsb8EWbsulSJT76qwO3DIqtugCEuQghfRxxn4tomaTQhsbzGH9z2XHJj3+Uq1HlkJKIRU50HkTsyHWNun83gRhQGZkwfh43/OostR0t6PcSh0IH89BReD9cea5qqagYkSYJRF9XuTJxSLyBzZ0qKGMOS9RiapMeWM2W4LcukLJWOEAxxkaLI6asXiLw1w12SYgcK+79moMEr45CjGnn5buz7WgluCTotpl2XiMkVp3HDv1YjatptkObNjqgTFFE4U+oGSrDFm4oihwspab1zLa6orYG3yo2vpXiM5fVwbQpcB13kVEWIA5QllZX1bc/E+XemZEccRQpJkjB/uBmr9yp1AzdG0E6VDHGRotABJKeoYslIMEk2O8Tx/qkZaBrc9n9dhVpfcLvlugTkZiRitC0OmlNHIP9lNXDDWEh3/4gBjijMzMsZgfc+rcC23cdx7+KZvfOgLieu6JPhgYYzce2x+a6DLnRAGh3ksXSSUR+F8nZm4hysF6AINCUzARsOu7DlTBlDHIUf4XIGNu6gdljtfVoz0OCVcbjJjJs/uE31BbdRtjhE+ZZKisuXIL/8O8A+EJqlP4ek5XUtROHGnpmOmz46g+0eIxb3Ut2AcDmRH6+sushkiGubIRGIjQtcM64GRr0Wlysb2ryd9QIUiaK1Gtw61IRNx0twxd2A1Aj5EoMhLgIE6gUmsV6gI5I1TVle43L2WohrK7hNyUxAbqYy4xZ1zTVuorIM8otPADE6aH78a0ixvEidKFzNvz4Zj1/Q4dOdhzH71l6oG3A5kB+fCgnAgMTI+DDTHUrNQBpECG1m1RGTPqrdigGnuwFW1gtQBLoty4Q3Tyh1A/8dIXUDDHGRoMqt1AvYuKlJh3wbv4hCB6Trs7v9MA1eGYd9m5N87g9uMZp2g5ufqK+H/PsnAXc5ND9/ClJySrfHQUShL3viaAw4+Rm2Xvb2Tt2Ay4l8cybsCdHQRUXWlttdpbaagUSdFvVegTqPDH0rx9bpbuD1cBSRkuOikZORgB0XKrAkQuoGGOIige9bRimFyyk7ZEpWagaKur68ptHbfFfJmkYluOVmJiA3IwFjUuPbDG5+QpYh/2UVcPEcNA88Bum6rG7+RYhILTQaDeZZZfyxIgVnjp7F9TeO6NHjCZcD+bZJGMhNTTpmtQMH8yA8HkhRof+R6GpXnAd6Q/OwJoSAw92I61kvQBHqjuFmfHrJHTF1A6F/xqIeC2yZz5m4DkkaDZCSerWSoQONvhk3/1LJmkYZhhgNcjI6H9yaEps3Aof2QFr0fUhjb+7uX4OIVGbG9LH425vnsOWLkh6HuMYiF5zpicjl9XAds9oBWQZKXIGNTkKZSa98bCuv88JmaH5bha9eII31AhShRlhiMSRJj/fPRkbdAENcJHA5WC/QFda0dmsGeju4+cmfbofY9iakW26DNOebPfkbEJHKxBniMSu6BFu9qSi54kJyaveuyRW1NbjsiYYsaZDBmbgOXb0O2qGKENd0Ju5agZ0pDVxOSZHJXzewZq8TRwtrkJ0a3jtVMsRFApeT9QJdIFntEMcPQsiyMjMHJbgdcdYgL78SnzcJbpMHJmBKZgJG2+IRre3+Nz7i1BcQf/8DMHIspCVLw/7bIyJqaV7OcGzZXYkPdh3Hf3W3bqDIifz4VADcmbJT/NdBu5xQw1nXqFM+trVW+B3oiONmNhTBpmQm4K+HXHj/TBlDHKmfKHQE3qioE2x2wNOIxpJiHG2Iw+5Lldj3dRWqG2XE+4Kbf8atJ8HNTzjyIf/hacCWDs39v1DFdRlE1PvSrhuAcR9/hO2eRCyua0CMvusfxkWhEuKiJHaFdUqCUakZ6OQS+mALzMTVtwxxDncjNBKQwnoBimAxWg3mDjXhXydKUFjVAFsYz0zz02KYu1ovMC3YQ1GFRq/AkZh05I1YjM8/LEGNtxTxMRpMGpiAKb0Y3PxEZTnkF34LREdDs+LXkOLC+1sjImrf/BHJ+M2XOuzedQgz53bjulhfvUBaQnSvnqvClSRJQIodohubWQWDLkoDfZSm1eWUTncDbIbobi3nJwontw8z4c2TJdh6thzfH9f7nb+hgiEu3PnrBTgT16ZGr8AXV6oDSyWrG6IRZ7kBN+uqkDvxemT3cnDzEw31kNf6qgQe+R9IfVAuTkTqkj1xFNJPfY4tX3swvTt1Ay4nChImIsvc89LwSCHZ0lRVM2DSa9tcTsnr4YiUuoHJAxPwnwvlWDLG0modRzhgiAt3/noBa+hfsN2frgY3Nz7/2o3qBhnx0RpMGmhAzkADRj/1I8RMvxWa9Al98vxCliE2rAG+PAPNsl9CGsQidiICtFot5lm9WF9hxdmjZzGiiztV1hYVoTDdjNnc1KTzUtRXM3DtTJwQAk7WCxAFLBhuRl6+Gzu/qsStWaZgD6dPhP7ZinokUC/AmTg0egWOXqnG7laCW25GYrMZN68l5eq/XR8Q7/wd4sBuSN/6LqSbcvrseYhIfWZOG4u/vXUeW74o6XKIK3A3AgAyuKlJ59nUVTNg1EehqLqx2c8q6ryo9ciwG3g9HBEAjEiJxWCzDlvOlGLuUGNYbhjHEBfuXM6IrhfwB7e8fDc+axLcJg4wYEpmIrJT4xCtbWWa3Wrvswvd5bwdEFs3QZo6F9KtC/vkOYhIveISDJgVXYIPvKkouVKE5NSUTt1P1NUgH8p1tdyZsvMkq91XM+BURYhL1GlxrqSu2c8CO1NyMxsiAFfrBl747AqOFdZgTBjuVMkQF+5cDiDJAik6cr6d83hlHHJUYfclZcatqkFGXLQGkwYoM2432tsIbk1I1jSI44ea1Qz0BnH6KMTGtcD12ZC+sywsvxkiop6bN3kYtuypxrZPj+OeRTM6dyeXsjNljCRg5Q6Fnee73EC4HJBwU5AH0zGTPgqVdR7IQkDjew8JdMQxxBEFTL0uEX89XIQtZ8oY4kh9hMsZEUspPfLVGbfPvz4Pd70Hcf4Zt04Gt2asSs0AykqA5M59C94RceVrxF/DVwAAGLFJREFUpUrAmgbNskdVce0FEQVH+qCBGPfJR9jemIhF9Q2I0XXiw7nLiYJ4GwbEa6DlDoWdl2AE9LHKTJwKGPVaeAVQ3SAjQadUDjh99QJWLqckCvDXDbx1MjzrBvgpMowp9QIOSBNvCfZQ+kSz4Fbghts343bLkGTcZIvBWHt814JbE1eX1zh6JcQJd6VSJaDVQvPjX0GKM/T4MYkovM0fnoTffqVX6gbmdFw3IAodyI/PQHYyN7foCkmSAGsahEslXXG+4FZR5wmEOIe7AdZ41gsQXev2YUqI++BsOb4XZnUDDHHhrNoN1FQrO2+FidaCW2yUb6lkZgLG2uNht1lRXFzcsycKLK9xQro+u0cPJRobIK97Eigvheb/rISUktqzsRFRRLhx0miknd6HrQWNmNmJ368qKkKpbgwykhjiukqy2iHyLwR7GJ1i1Csf3SrqvBhgVH52paqBSymJWmG5pm5AF0Z1Awxx4cy3MYekggu12+ORBY4V1mD3pcoWwS3HF9xiujnj1iZzMhAV3ePlNUIIiL++CJw/Bc39v4A0pGs7zRFR5NJqtZhn8eBPbivOfHEaw7PbP3/kl9UDViCT9QJdZ00DDu1RRc2ASe+biatXagaEEHBUNmLE4NhgDosoZN3hrxu4WIm5Q8OnbiC0z1TUI6JIvfUC/uCWd6kSnzUJbhObzLj1enBrQtJogJTUHi+vEe++BrFvJ6Q774U0fkovjY6IIsXM6WPx983nseVIScchrk45J7JeoBusvpqBUldgJUaoajoTBwAV9b56Ac7EEbVqZEosBpl12HKmDHOGhE/dAENcOCt0ApIEWNSxfM/bZMbts6+r4K73Qu9fKpmRgLFpfRvcWrCl9WgmTt77McSWf0LKnQ3p9rt6cWBEFCniEw2YGVWCf8s2fL+wGEk2S6u/J+pqkK9JQCy8sMTxrb2rJJvvOuhCZ8iHuMTANXFKiHNWcmdKovb46wZe/OwKjrtqMNoWHjtV8kwfzlxOICklpOsF/MEtL78SewuuBjdlV8kgBLcmJKsd4sThbtUMiLPHIV55ERg+GtJ/PRA23/oQUf+bN3kY3t9bjX/vOoYlbdUNuK6gID4VGbEyzzfd4VuxIlxOhPq/nlYjIUGnRXmdspzSWaUUfzPEEbVtaqZSN/D+mTKGOAp9wuUIyaWUTYPbZwVVqGwS3HIzlKWSIXHhqTUNaGwAykuApM7vUCkKHZDXPQWkpELzwGOQokI3RBNR6BsweCDG7vwI2xoT8a026gZEoQOXDKm4mdfDdU+CyVczoJ4dKivqlZk4R2WDUi/AbkCiNumiNJg7xIjNp0rhqmoMizoOhrhw5nJCmhAa12H5g9uefDf2FrivBrf0q9e4hURwayJQM1Do6HSIE1WVkF/4DSBJ0Kz4NaR4VgkQUc/NH5aEJy7qsefTw5g+e1KL28sLi+COvh6ZNmMQRqd+Ss2AXelWVQGjXouKwEycUi8QrQ31OUSi4Lp9mBmbT5Xig3Nl+O5Y9dcNMMSFKVFVCdRUBXVtv1cWOO6qQd6lpsFNwsT0BORkJmBcCAa3Zvw1A0WdqxkQjY2Q1/0PUFrMKgEi6lVjbx4N+5l9eD+/EdNbuT2/pAqIAjIs/OKouyRrmqpqBvLL6wEATjfrBYg6IyU+GpMGJOA/58tx92j11w0wxIUr37eJUj8vp2wa3D4rcKPCF9wmpBuQm5kY+sGtKX/NQGHH38wKISBefRE4dxLSjx6BNPT6fhggEUUKpW6gEX92W3H26FkMGzOs2e35VTJgYr1Aj1jtwOG9qqgZMOqUmTghBJzuRgy3sF6AqDPmDzdjb4Ebuy5WYo7K6wZC+yxF3RbYGr8fOuK8ssAJVw3y8t3Ym39NcMtIxLg0FQW3Jq7WDHQixG15HeKzTyB94x5oJt7SD6Mjokgza/o4/P3tC3j/SHHLEOeJQaJogNHXIUbdYE0DvF5V1AyY9FFwN8gorfWgplFGGmfiiDrlBmssrjMpdQOzVV43wBAXrlz+egFbnzx8s+BW4EZFnRLcxqcbMEXFwa0Fqx0oaj/EyZ/vhHj3H5Amz4R0x+J+GhgRRZr4RANmaouxXbbhe0XFMKcodQNybQ3yo83IiG5Q9QeSYAtcB+0K/ZoBf1g/U1wLgDtTEnWWJEm4Y7gZaz+/gpOuWtxgiwv2kLqNIS5cFfrrBXrvxO4Pbnvy3djjC246rYQJvl0lb0ozhEdwa0KypUGcPNJmzYA4dxLir2uAYaMg3fcgP0ARUZ+64+YsbP2sBv/eeQx336XUDXicBciPT8UMgwjy6FTO5qsZKHRCGhXksXTAH+JOFzHEEXXVtOsS8ephF947U8YQR6FHFDl7pV6gaXDbW+BGuS+4jfftKjk+DINbMyl2X81AKZDUvGRXuByQ1z0JJNugWc4qASLqewOGZODGXR9jW6MBC311A85Ll1EbpUeGhUspeyTBBOhiO1x9EQqMeuXj2+niWtYLEHWRLkqDOUNNePtUKYqqG5Gi0tcPQ1y4KnR0u17AKwucLLq6q2TEBbcmJFuab3mNo1mIE9VuyC88AQDQrPgVpPiE4AyQiCLO/CwjVl6Kw97dhzFt1iR8ebkEgB0Z6ZYO70ttkyQJsNkhCkO/K84/E3ehtI71AkTdcHuWGW+fKsUHZ8twn0rrBhjiwpCodvvqBTo/E9ducMtIwE3pBugjJLg14/s3FC4npBFjlP/2NEL+w9NASSE0D6+EFOLXThBReBk3ORupZ/fj/Uv1mAbgy1JlSV1mSmJwBxYGpBQ7RMFXwR5Gh0w65eObRwZSuZSSqMushmhMHGDA9gsV+LZK6wYY4sKR71vEjsKFVxY4VVSLvPxK7MlXgluM1r85SQQHt6bMFqVmwLfbp1IlsBY4cwzSDx6GlDUyyAMkokij1WoxL7kBf6my4dyxs7hYAyTFVMOg43LKHrOlAUc+g/B6IWlD998zPkYDrQR4BZCWoM6lYETBNn+4GZ8VVOHTS5WYPUR9dQP9EuLWrVuHQ4cOwWg04vnnn++Pp4xogS3xW5mJaxrc9ua7UdYkuOVmJGA8g1sz19YMiK2bIPZ+BGnBEmhunh7cwRFRxJo1fSz+8c6X2HK4CPkiDplSbbCHFB6sdqVmoMTVK9eV9xVJkpCoj0JZrYebmhB10yhrHDKNSt3ArMHqqxvolxA3ffp03HbbbVi7dm1/PB25HEq9QEoqACW4nW4y4+YPbjelGTAlk8GtQ1Y74HJC3v8pxNt/g3TzdEgL7g72qIgoghmMCZiuLcYOORWSXmBUbHmwhxQWJGuT66BDOMQBgEmvRVmthx1xRN0kSRLmj/DVDRTV4garunaq7JcQN3LkSLhcrv54KgKUwGG24HSZB3mXSrGnoApltZ5AcPPPuMVGM7h1hmS1Qxw/BPGX1UDWSEj3/Vh139YQUfi5Y9JQbPvcdz2cWR/k0YSJptdBB3koHTH6ls+mcjklUbdNuy4Rrxx24f0zZQxx4UpUlkO89keU63SQ6+uDPZw2yQD+Up2KPTc8iLL/5PuCWzxyMxIZ3LrLmgZ4PYDVDs3y/wspmm+YRBR8GUMzkf3px/gixo6MVHOwhxMeEpWaAfHxVsjnTvbqQ/f254dE3ThootKR8toLkBH6HYHSt74LyWIL9jCImtFFaTBniAnvnFZf3UBIhbgdO3Zgx44dAICnn34aFkvobJfshYwyZwG8kgSNCN2TpQbA5bQbcYMpCnNyhyNnUBLiYkL34uy+EBUV1av/73hypsN9dB8S7v85otIzeu1xI11vHyfqGzxOoW3pLVnYsPs8xk2cD30sZ+N6Q+Xs+Wg4sg9wFvTq4/b254fJhmgYYkuhK8rvtcfsS6b4eESp4FzCc17o6+1jdM/NBuQVVKFGEwuLRT0bnEhC9E8icblc+N3vfteljU0cjtDrarFYLCguLg72MNolhIjo5X5qOEbE46QWPE6hj8dIHXic1IHHKfT1xTGShYAmRD87p6W1vts819aFoUgOcEREREREXRGqAa49/bKccvXq1Th58iTcbjeWLVuGxYsXY+bMmf3x1ERERERERGGlX0LcT3/60/54GiIiIiIiorDH5ZREREREREQqwhBHRERERESkIgxxREREREREKsIQR0REREREpCIMcURERERERCrCEEdERERERKQiDHFEREREREQqwhBHRERERESkIgxxREREREREKsIQR0REREREpCIMcURERERERCrCEEdERERERKQiDHFEREREREQqwhBHRERERESkIgxxREREREREKsIQR0REREREpCIMcURERERERCrCEEdERERERKQiDHFEREREREQqwhBHRERERESkIpIQQgR7EERERERERNQ5nInrol/+8pfBHgJ1gMdIHXic1IHHKfTxGKkDj5M68DiFPh4jBUMcERERERGRijDEERERERERqYj28ccffzzYg1CbwYMHB3sI1AEeI3XgcVIHHqfQx2OkDjxO6sDjFPp4jLixCRERERERkapwOSUREREREZGKRAV7AKHowQcfhF6vh0ajgVarxdNPP93sdiEENmzYgMOHD0On02H58uWc1u1nDocDq1atCvzZ5XJh8eLFuOOOOwI/O3HiBJ555hlYrVYAwKRJk3DXXXf1+1gjzbp163Do0CEYjUY8//zzAICqqiqsWrUKRUVFSElJwc9+9jMYDIYW9z1y5Ag2bNgAWZYxa9YsfPOb3+zv4UeM1o7Txo0bcfDgQURFRcFms2H58uWIj49vcd+OzpHUO1o7Rm+88QY+/PBDJCYmAgCWLFmCcePGtbgvX0v9p7XjtGrVKjgcDgBATU0N4uLi8Oyzz7a4L19L/aO4uBhr165FeXk5JEnC7NmzMW/ePL43hZi2jhPfm9ogqIXly5eLioqKNm8/ePCgePLJJ4Usy+LMmTPiscce68fR0bW8Xq/44Q9/KFwuV7OfHz9+XDz11FNBGlXkOnHihLhw4YJ4+OGHAz/buHGj2Lx5sxBCiM2bN4uNGze2uJ/X6xUPPfSQuHLlimhsbBSPPPKIKCgo6LdxR5rWjtORI0eEx+MRQijHrLXjJETH50jqHa0do9dff12888477d6Pr6X+1dpxauqVV14RmzZtavU2vpb6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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAJhCAYAAAD496mqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAADHjUlEQVR4nOzdB3zcdf0/8Nf3LrnMy07aJk2696SFtnQwpJYhisoGURRURED8KYoD/f+cCChamcrSn+whosiwoNJSCpQCXdDdJG3aZieXndx9/5/395KQtEmbcXff9Xr6iClpmnxy197d+/temq6AiIiIiIiIHMVj9gGIiIiIiIgo8hjsERERERERORCDPSIiIiIiIgdisEdERERERORADPaIiIiIiIgciMEeERERERGRAzHYIyIiiqFTTjkFV155ZVS+9v/7f/8PEydOHNSfeeihhxAXF9f93//5z3+gaRr27dsX6eMREVGMMdgjIqIjyIv9o72NHTu2O3CR//7d737X68/v3bvX+PiaNWt6ffyNN97AZz/7WYwYMQKJiYmYMGECPve5z2HDhg193gtdX/9ob/K9YqW5uRk33XQTJk2ahKSkJGRnZ+OEE07AypUrY3aGaFu8eDEOHDiA/Px8s49CRETDxGCPiIiOIC/2u97+9re/GR976623uj/29ttvd3+uBD3/+7//i+rq6qPekg8++CCWLVuG+Ph4PPzww/jggw/w+OOPG4HjN77xjT7/zDPPPNPrLF6vF7/97W97faywsDDi92BbW1ufH//a176GP//5z7j11luxdetWvPrqq/j617+O2traiJ/BLD6fDyNHjoTHw5cIRER2x0dyIiI6grzY73rLysoyPpabm9v9Mfl1F8nUpaWlGQFff8rKyoxAScoXJcBbvnw5xo0bh+OPPx4/+9nP8Nxzz/X55+R79zyLSE9P7/7vuro6fOpTn0Jqaqrx9slPfhI7d+7st0RRSHmiZASlXLFn2eLzzz+PpUuXGhnHP/zhD32e59lnn8UNN9yAT3/608b558yZg8svvxw/+tGPen2e/Izz5883vpZk/84880zU1NT0+pyf/vSn3bevfI3GxsZev//YY49h7ty5xteQgPh//ud/en1Oa2urcZvK7ZGZmWn8Wj7Wk3xdua17+stf/mL8vP05vIyz67//9a9/4aSTTkJycjKmT5+Ol156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bKCfYgP9FP3oo9hAP9WjQAsAAAAAxCFG9gAAAAAgDiX63YBYNnv2bLVr106BQEAJCQl69NFHj3verGqxaNEirV69WikpKbrzzjvVt29fn1rbNu3du1e///3vm74/ePCgZsyYoalTpzb97G9/+5see+wxde7c2X5/ySWXaPr06RFva1vz1FNPadWqVcrIyNATTzxhf1ZWVmb769ChQ8rNzdXPfvYzpaWlnfTaNWvW2GMrFAppwoQJmjZtWqSb32b76LnnntPKlSuVmJioLl262M+1Dh06nPHnI8LbT0uXLtWyZcuUnp5uv7/hhht00UUXnfRajiV/+8l83pnzlHHs2DG1b99ejz/++Emv5XiKjMOHD+vJJ59UMBiU4zg2DXDKlCmcm2Kknzg/tcCss4ez413kuMXFxS0+710QuQ8//LDrXZC6GzdudB988EHeah/V1dW5M2fOdL2A77iff/nll+4jjzziU6vaLi/Idrdu3eree++9TT/zPqjdV155xX5tHs33p+rHu+66y92/f79bU1Pj3nfffe7u3bsj1u623kdecODW1tbar03/nKqPTufzEeHtpxdffNF97bXXvvF1HEv+91Nzixcvdl966aVTPsfxFBlHjx61fWR4wbc7Z84ce37h3BQb/cT56dRI4wyjwsJCjRs3zt51KCgoUHl5uYqKisK5S3yDdevWKS8vz44YwX+DBw8+adTu888/1+WXX26/No/m+xNt2bLF9qMZVTKjS6NHjz7l7yE8fTRkyBA7UmeYzzXvpMtbHYX9dDo4lqKnn7zrMX3yyScaM2ZMhFuF5rKyspoysFJTU9WtWzf7Gce5KTb6ifPTqZHGeY68kTv7+N3vfvekqj/mDy8nJ6fp++zsbPsz80eKyFu+fHmLJ9JNmzbpF7/4he2bm266ST169Ihw62B4I0FNx4d5LCkpOemNMceQOZYama83b97MG+iD999/3wbbZ/P5iPB7++239dFHH9mLoptvvvmkQINjKXps2LDBpnd27dq1xd/heIosM+1j+/bt6t+/P+emGOmn5jg//R3B3jn45S9/qU6dOtkPgV/96lfKz8+3d+6a36k7kRnlQ+R5aWd2ntGNN9540nN9+vSxcynM/CIzn8LMl5g3b54PrcTp4LiKDi+//LId4Rs7duxZfT4ivCZNmtQ099hL6dSSJUvs/MrmOJZi42akwfEUWZWVlXZe5S233GLnUZ4Ojqfo6SfOT8cjjfMcmAsZw9yNGzFihE2Jac6MOJhJpI2OHDnCqJ5PTJEcE9RlZmae9Jz5gDCBnmEKGNTV1Z1yRAnhZ46lxlRn89hYXOLE48ocS404riLvgw8+sDdP5syZ0+INrG/7fER4mc86UxzH/DNFjLZu3XrS73AsRQdzzvnss8++cZSc4ymyN4dNAGFuZJmCbQbnptjoJ4Pz08kI9s7hbkJFRUXT11988YV69ux53O8MHz7cptCYuz0mTdAEFaRwRt9dU1PNqfGOnLkgNRUeO3bsGMnmodkx8+GHH9qvzaMJEk7Ur18/7du3z6ZumA/7FStW2NchMkz1xtdee03333+/rTJ8tp+PCK/m88NNIHGq1HSOpeiZT25GvpunpzfH8RQ55lrg6aeftnPArrnmmqafc26KjX7i/HRqLKp+lg4cOKDf/va3TXflLrvsMl133XV65513mlJozB/jwoULtXbtWiUnJ9sUGnNyRWRVVVXpjjvu0Pz585uG+Zv301tvvWW/Nylppp/M3JaBAwfSTWE2d+5crV+/XqWlpfauqVkSwwR3phS5GRE3813vvfdeO8/IzC1asGCBHnzwQftak267ePFiG5iPHz/eHnuITB+98sorNshunP81YMAA3Xbbbcf1UUufj4hcP5klZXbs2GFHXk1RKtNH5mYjx1J09dOVV15pS8ib48icjxpxPPnjq6++0kMPPWRvTjVmLZhlS0z/cG6K/n4ySzJxfjoZwR4AAAAAxCHSOAEAAAAgDhHsAQAAAEAcItgDAAAAgDhEsAcAAAAAcYhgDwAAAADiEMEeACCumCU7zNIDsebll1+2a0edDVO+/89//nMrtwgAEOsS/W4AAABn4qabbmr6urq6WomJiQoE6u9dmvXkfve738XkG8pahACA1kawBwCIKc8991zT17Nnz9btt9+uCy+80McWnTuz+HxCQoLfzQAAxBmCPQBAXGkeAC5dulRff/21Hf0rLCxUbm6ufv7zn+vTTz/V66+/rqSkJM2aNUtDhgyxrz127JgWL16s1atXy3EcjR8/XjNmzGgaOWzObHv37t32OfP7Xbt21R133KHevXvb548ePapnn31WGzZsULt27TR16lRNmTLluNea/a9cuVI333yzjhw5ov3792vOnDn2d0x7X3jhBbsds82ZM2eqe/fu9rnt27fblM99+/Zp2LBhtq0AAJyIOXsAgLhmgqlx48Zp0aJF6tOnjx5++GG5rmuDpeuvv15//OMfm353/vz5doRt3rx5euyxx7R27VotW7asxW2bgOzSSy+1Qd2YMWP0+OOPq7a2VqFQSL/5zW9skLZgwQI99NBDeuONN7RmzZrjXjtq1CjbrrFjxx633b179+oPf/iDbrnlFj3zzDM2oDPbM9s2/8x+zGvMfs3+TfAKAMCJCPYAAHHtvPPO09ChQ20QZ4KrkpISTZs2zY72mQDt0KFDKi8vVzAYtMGYCbDMSFxGRoYdjVuxYkWL2+7bt6/dptnWNddco5qaGm3evFlbt261+5k+fbp9rkuXLpowYcJx2yooKNDIkSPtyGBycvJx2zW/ZwI8MzppXv+9733Pzk/cuHGjNm3aZNM+TdvMc2b//fr1C9v7BwCIXaRxAgDimgnaGpmgKj09vSktszHIqqysVFFRkQ2iTJGXRmYEMDs7u8VtN3/ObNN8b7ZjmEcTODYyo32DBg065WtPZF5rUk6bbzsnJ8emdJqvO3XqdFzqpnkOAIATEewBANAQfJmRsoULF552sRQzz655MGe+z8rKsq/v3LmzTQc9G2Ybu3btOi7oPHz4cFOQZ4I+87PGgM/sNy8vj34EAByHNE4AABoCLFOoZcmSJbZQiwneTMGU9evXt/j+bNu2zc6XMyOCZk6eKbgyYMAA9e/fX6mpqXr11Vdt+qXZlgnetmzZclrv9ejRo23Rl3Xr1tk5en/5y1/stgcOHGjTP83o3ptvvmn3a/Z/utsFALQtjOwBANDgrrvu0vPPP28XZq+oqLBz7a699toW35/hw4fb+XVmUXMzsmYqfZrRQeP++++3gaOpDmoCtvz8fP3whz88rffa/O7dd99tC7A0VuM022vc9n333WcLv5iF1M3cPjP3DwCAEzleGoh74g8BAMA3M8snNF8qAQCAaEMaJwAAAADEIYI9AAAAAIhDpHECAAAAQBxiZA8AAAAA4hDBHgAAAADEIYI9AAAAAIhDBHsAAAAAEIcI9gAAAAAgDhHsAQAAAEAc+j9TH6WtwJ2LIwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] @@ -4900,7 +4917,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -4910,30 +4927,22 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 20, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\programdata\\anaconda3\\envs\\asimtest\\lib\\site-packages\\matplotlib\\colors.py:527: RuntimeWarning: invalid value encountered in less\n", - " xa[xa < 0] = -1\n" - ] - }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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+ao1teqNk8OAqgLRe4183pSUeDK9X1RVo4zRQhIauQIwAz1LrIXKEgAAgDyippWoQMDJQUm7cr/IHlpg4nX1XGGibqNuS1ACAFAISwAAAOBYJT6RPfXeI10HJgFPqpFrmRauAACgEJYAAADA0dRqNntVpEKRHZX5kvp1hR4TBgYAsCx6lgAAAMDxCjypCpMljUlpjaXmIA0IJPUllfNhShIA63Niw207o7IEAAAAedOvRfUlUdUkI4qTMoagBADQBSpLAAAAkDe8WwMTjuACALpDZQkAAADyCkEJAKAnVJYAAAAAAGAyF0mupVBZAgAAAAAAQFgCAAAAAADQOSpLAAAAAAAACEsAAAAAAAA6R4NXAAAAAABMRn9Xa2EaDgAAAOBgf/nHPPlsVa3ZwwAAZ1aWJBIJmTp1qlRVVennHa1bt07uvvtuWbVqlZx44oly3HHHbbvuhRdekNdee01fBmn48OFy7rnnit/vl8cff1zmzZunX15eXq5fru5befbZZ/WfcbvdMnnyZNl3330N+nUBAACA/PHavC/l1r/PkUeeK5N/3DFZBvcrNntIAOCsypLZs2fL0KFDO72upKREDzWOPfbY7S6vq6uTl156SaZPny633XabHri89957+nUqULn11lvllltukf3331+efvpp/fK1a9fqt7n99tvl6quvlvvvv1//OQAAAADpW72hSS6+KbWPvam2Sc687klpDkbYhABgVFhSW1srCxYskCOPPLLT61VlyNixY8Xj8ex0nQo6IpGIxONx/byyslK/vKioaNttwuGwXmGizJ07Vw499FDx+XwyYMAAGTRokKxYsSKdYQIAAADQtISics7/PS0tbeFt22PJFxvkkltfkFicA5GAFanPxE47OX4azoMPPiiTJk2SYDCY0Z2raTWq2uScc87Rp97ss88++qndrFmz5K233tKDk2uvvXZbNcq4ceO2uw912Y5eeeUV/aSoypXq6uqMxmYmr9drq/HCGDzv+YnnPT/xvOcnnvf8ZMXnPZ5MyiVXPSLLVm3c6brXPvhcbnzgbbl9yk/FY/MPMmay4vMOIMdhyfz58/XKkdGjR8vixYszuvOWlha9UmTGjBl6IKKm1qhw5IgjjtCvP+mkk/ST6lHy8ssvywknnCBJ7cU9HRMnTtRP7WpqajIam5nUC6udxgtj8LznJ573/MTznp94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\n", "text/plain": [ "
" ] @@ -4980,7 +4989,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/activitysim/examples/example_mtc/notebooks/getting_started.ipynb b/activitysim/examples/example_mtc/notebooks/getting_started.ipynb index 0cc8c608e..83940aa18 100644 --- a/activitysim/examples/example_mtc/notebooks/getting_started.ipynb +++ b/activitysim/examples/example_mtc/notebooks/getting_started.ipynb @@ -85,8 +85,6 @@ "copying output ...\n", "copying README.MD ...\n", "copied! new project files are in C:\\projects\\development\\activitysim\\activitysim\\examples\\example_mtc\\notebooks\\example\n", - "the copied example can be run with\n", - " activitysim run -w example\n", "C:\\projects\\development\\activitysim\\activitysim\\examples\\example_mtc\\notebooks\\example\n" ] } @@ -112,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -136,26 +134,29 @@ "INFO - SETTING output_dir: output\n", "INFO - SETTING households_sample_size: 100\n", "INFO - SETTING chunk_size: 0\n", + "INFO - SETTING chunk_method: hybrid_uss\n", + "INFO - SETTING chunk_training_mode: training\n", "INFO - SETTING multiprocess: None\n", "INFO - SETTING num_processes: None\n", "INFO - SETTING resume_after: None\n", + "INFO - SETTING trace_hh_id: 982875\n", + "INFO - ENV MKL_NUM_THREADS: None\n", + "INFO - ENV OMP_NUM_THREADS: None\n", + "INFO - ENV OPENBLAS_NUM_THREADS: None\n", + "INFO - NUMPY blas_info libraries: ['cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", + "INFO - NUMPY blas_opt_info libraries: ['cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", + "INFO - NUMPY lapack_info libraries: ['lapack', 'blas', 'lapack', 'blas']\n", + "INFO - NUMPY lapack_opt_info libraries: ['lapack', 'blas', 'lapack', 'blas', 'cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", "INFO - run single process simulation\n", - "INFO - open_pipeline\n", - "INFO - Set random seed base to 0\n", - "INFO - Time to execute open_pipeline : 0.032 seconds (0.0 minutes)\n", - "INFO - init_trace file_name mem.csv\n", - "INFO - trace_memory_info #MEM pipeline.run before preload_injectables rss: 0.11GB used: 7.28 GB percent: 45.9%\n", + "INFO - Time to execute open_pipeline : 0.038 seconds (0.0 minutes)\n", "INFO - preload_injectables\n", - "INFO - Time to execute preload_injectables : 0.073 seconds (0.0 minutes)\n", - "INFO - trace_memory_info #MEM pipeline.run before run_models rss: 0.11GB used: 7.28 GB percent: 45.9%\n", + "INFO - Time to execute preload_injectables : 0.016 seconds (0.0 minutes)\n", "INFO - #run_model running step initialize_landuse\n", "INFO - Reading CSV file data\\land_use.csv\n", - "INFO - land_use index name: zone_id\n", "INFO - loaded land_use (25, 24)\n", - "INFO - initialize_landuse - annotating land_use SPEC annotate_landuse\n", + "INFO - initialize_landuse.annotate_tables - annotating land_use SPEC annotate_landuse\n", "INFO - Network_LOS using skim_dict_factory: NumpyArraySkimFactory\n", - "INFO - trace_memory_info #MEM network_los.load_data before create_skim_dicts rss: 0.12GB used: 7.3 GB percent: 46.0%\n", - "INFO - allocate_skim_buffer shared False taz shape (826, 25, 25) total size: 2065000 (1.97 MB)\n", + "INFO - allocate_skim_buffer shared False taz shape (826, 25, 25) total size: 2_065_000 (2.1 MB)\n", "INFO - _read_skims_from_omx data\\skims.omx\n", "INFO - _read_skims_from_omx loaded 826 skims from data\\skims.omx\n", "INFO - writing skim cache taz (826, 25, 25) to output\\cache\\cached_taz.mmap\n", @@ -163,201 +164,57 @@ "INFO - get_skim_data taz SkimData shape (826, 25, 25)\n", "INFO - SkimDict init taz\n", "INFO - SkimDict.build_3d_skim_block_offset_table registered 167 3d keys\n", - "INFO - trace_memory_info network_los.load_data after create_skim_dicts rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - created placeholder accessibility table (25, 0)\n", - "INFO - trace_memory_info pipeline.run after initialize_landuse rss: 0.13GB used: 7.3 GB percent: 46.0%\n", "INFO - #run_model running step initialize_households\n", "INFO - Reading CSV file data\\households.csv\n", - "INFO - households index name: household_id\n", "INFO - full household list contains 5000 households\n", "INFO - sampling 100 of 5000 households\n", "INFO - loaded households (100, 7)\n", "INFO - tracing household id 982875 in 100 households\n", - "INFO - register households: added 1 new ids to 0 existing trace ids\n", - "INFO - register households: tracing new ids [982875] in households\n", "INFO - Reading CSV file data\\persons.csv\n", - "INFO - persons index name: person_id\n", "INFO - loaded persons (167, 7)\n", - "INFO - register persons: added 2 new ids to 0 existing trace ids\n", - "INFO - register persons: tracing new ids [1875721, 1875722] in persons\n", - "100 unique household_ids in persons\n", - "100 unique household_ids in households\n", - "INFO - initialize_households - annotating persons SPEC annotate_persons\n", - "INFO - initialize_households - annotating households SPEC annotate_households\n", - "INFO - initialize_households - annotating persons SPEC annotate_persons_after_hh\n", - "INFO - trace_memory_info initialize_households after shadow_pricing.add_size_tables rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info pipeline.run after initialize_households rss: 0.13GB used: 7.3 GB percent: 46.1%\n", + "INFO - initialize_households.annotate_tables - annotating persons SPEC annotate_persons\n", + "INFO - initialize_households.annotate_tables - annotating households SPEC annotate_households\n", + "INFO - initialize_households.annotate_tables - annotating persons SPEC annotate_persons_after_hh\n", "INFO - #run_model running step compute_accessibility\n", "INFO - Running compute_accessibility with 25 orig zones 25 dest zones\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 25 choosers\n", + "INFO - compute_accessibility Running adaptive_chunked_choosers with 25 choosers\n", "INFO - Running chunk 1 of 1 with 25 of 25 choosers\n", "INFO - Running compute_accessibility with 25 orig zones 25 dest zones\n", - "INFO - trace_memory_info compute_accessibility.add.od_df rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info compute_accessibility.add.temps rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info compute_accessibility.add.variables rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info compute_accessibility.del.temps rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info compute_accessibility.del.variables rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info compute_accessibility.add.results rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers compute_accessibility number_of_rows: 25 observed_row_size: 675 num_chunks: 1\n", "INFO - compute_accessibility computed accessibilities (25, 10)\n", - "INFO - trace_memory_info pipeline.run after compute_accessibility rss: 0.13GB used: 7.29 GB percent: 46.0%\n", "INFO - #run_model running step school_location\n", "INFO - Running school_location.i1.sample.university with 17 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - school_location.i1.sample.university.interaction_sample Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", "INFO - Running eval_interaction_utilities on 102 rows\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.del.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.probs rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.del.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.choices_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.del.probs rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.choices_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.university.interaction_sample.add.choices_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.sample.university.interaction_sample number_of_rows: 17 observed_row_size: 48 num_chunks: 1\n", "INFO - Running school_location.i1.logsums.university with 44 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 44 choosers\n", + "INFO - school_location.i1.logsums.university.compute_logsums Running adaptive_chunked_choosers with 44 choosers\n", "INFO - Running chunk 1 of 1 with 44 of 44 choosers\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums number_of_rows: 44 observed_row_size: 322 num_chunks: 1\n", "INFO - Running school_location.i1.simulate.university with 17 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 17 choosers and 44 alternatives\n", + "INFO - school_location.i1.simulate.university.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 17 choosers and 44 alternatives\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 44 rows\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.university.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts school_location.i1.simulate.university.interaction_sample_simulate number_of_rows: 17 observed_row_size: 29 num_chunks: 1\n", "INFO - Running school_location.i1.sample.highschool with 5 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - school_location.i1.sample.highschool.interaction_sample Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 10 rows\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.del.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.del.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.sample.highschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.sample.highschool.interaction_sample number_of_rows: 5 observed_row_size: 16 num_chunks: 1\n", "INFO - Running school_location.i1.logsums.highschool with 5 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - school_location.i1.logsums.highschool.compute_logsums Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.logsums.highschool.compute_logsums.simple_simulate_logsums number_of_rows: 5 observed_row_size: 322 num_chunks: 1\n", "INFO - Running school_location.i1.simulate.highschool with 5 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 5 choosers and 5 alternatives\n", + "INFO - school_location.i1.simulate.highschool.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 5 choosers and 5 alternatives\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", "INFO - Running eval_interaction_utilities on 5 rows\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.highschool.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.3 GB percent: 46.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts school_location.i1.simulate.highschool.interaction_sample_simulate number_of_rows: 5 observed_row_size: 11 num_chunks: 1\n", "INFO - Running school_location.i1.sample.gradeschool with 17 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - school_location.i1.sample.gradeschool.interaction_sample Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", "INFO - Running eval_interaction_utilities on 425 rows\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.del.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.probs rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.del.utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.del.probs rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.sample.gradeschool.interaction_sample.add.choices_df rss: 0.13GB used: 7.3 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.sample.gradeschool.interaction_sample number_of_rows: 17 observed_row_size: 200 num_chunks: 1\n", "INFO - Running school_location.i1.logsums.gradeschool with 168 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 168 choosers\n", + "INFO - school_location.i1.logsums.gradeschool.compute_logsums Running adaptive_chunked_choosers with 168 choosers\n", "INFO - Running chunk 1 of 1 with 168 of 168 choosers\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers school_location.i1.logsums.gradeschool.compute_logsums.simple_simulate_logsums number_of_rows: 168 observed_row_size: 322 num_chunks: 1\n", "INFO - Running school_location.i1.simulate.gradeschool with 17 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 17 choosers and 168 alternatives\n", + "INFO - school_location.i1.simulate.gradeschool.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 17 choosers and 168 alternatives\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 168 rows\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info school_location.i1.simulate.gradeschool.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts school_location.i1.simulate.gradeschool.interaction_sample_simulate number_of_rows: 17 observed_row_size: 109 num_chunks: 1\n", "INFO - write_trace_files iteration 1\n", "INFO - school_location_logsum top 10 value counts:\n", "7.716620 1\n", @@ -371,210 +228,59 @@ "8.537372 1\n", "10.997809 1\n", "Name: logsum, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after school_location rss: 0.13GB used: 7.28 GB percent: 45.9%\n", "INFO - #run_model running step workplace_location\n", "INFO - Running workplace_location.i1.sample.work_low with 37 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 37 choosers\n", + "INFO - workplace_location.i1.sample.work_low.interaction_sample Running adaptive_chunked_choosers with 37 choosers\n", "INFO - Running chunk 1 of 1 with 37 of 37 choosers\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 925 rows\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.del.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.del.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_low.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.sample.work_low.interaction_sample number_of_rows: 37 observed_row_size: 175 num_chunks: 1\n", "INFO - Running workplace_location.i1.logsums.work_low with 504 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 504 choosers\n", + "INFO - workplace_location.i1.logsums.work_low.compute_logsums Running adaptive_chunked_choosers with 504 choosers\n", "INFO - Running chunk 1 of 1 with 504 of 504 choosers\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.logsums.work_low.compute_logsums.simple_simulate_logsums number_of_rows: 504 observed_row_size: 310 num_chunks: 1\n", "INFO - Running workplace_location.i1.simulate.work_low with 37 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 37 choosers and 504 alternatives\n", + "INFO - workplace_location.i1.simulate.work_low.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 37 choosers and 504 alternatives\n", "INFO - Running chunk 1 of 1 with 37 of 37 choosers\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", "INFO - Running eval_interaction_utilities on 504 rows\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_low.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts workplace_location.i1.simulate.work_low.interaction_sample_simulate number_of_rows: 37 observed_row_size: 137 num_chunks: 1\n", "INFO - Running workplace_location.i1.sample.work_med with 26 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 26 choosers\n", + "INFO - workplace_location.i1.sample.work_med.interaction_sample Running adaptive_chunked_choosers with 26 choosers\n", "INFO - Running chunk 1 of 1 with 26 of 26 choosers\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 650 rows\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.probs rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.del.utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.choices_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.del.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_med.interaction_sample.add.choices_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.sample.work_med.interaction_sample number_of_rows: 26 observed_row_size: 175 num_chunks: 1\n", "INFO - Running workplace_location.i1.logsums.work_med with 367 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 367 choosers\n", + "INFO - workplace_location.i1.logsums.work_med.compute_logsums Running adaptive_chunked_choosers with 367 choosers\n", "INFO - Running chunk 1 of 1 with 367 of 367 choosers\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.25 GB percent: 45.7%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.25 GB percent: 45.7%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums number_of_rows: 367 observed_row_size: 310 num_chunks: 1\n", "INFO - Running workplace_location.i1.simulate.work_med with 26 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 26 choosers and 367 alternatives\n", + "INFO - workplace_location.i1.simulate.work_med.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 26 choosers and 367 alternatives\n", "INFO - Running chunk 1 of 1 with 26 of 26 choosers\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", "INFO - Running eval_interaction_utilities on 367 rows\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_med.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts workplace_location.i1.simulate.work_med.interaction_sample_simulate number_of_rows: 26 observed_row_size: 142 num_chunks: 1\n", "INFO - Running workplace_location.i1.sample.work_high with 16 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 16 choosers\n", + "INFO - workplace_location.i1.sample.work_high.interaction_sample Running adaptive_chunked_choosers with 16 choosers\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.interaction_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", "INFO - Running eval_interaction_utilities on 400 rows\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.del.interaction_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.probs rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.del.utilities rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.choices_df rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.del.probs rss: 0.13GB used: 7.26 GB percent: 45.7%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.choices_df rss: 0.13GB used: 7.25 GB percent: 45.7%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_high.interaction_sample.add.choices_df rss: 0.13GB used: 7.25 GB percent: 45.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.sample.work_high.interaction_sample number_of_rows: 16 observed_row_size: 175 num_chunks: 1\n", "INFO - Running workplace_location.i1.logsums.work_high with 226 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 226 choosers\n", + "INFO - workplace_location.i1.logsums.work_high.compute_logsums Running adaptive_chunked_choosers with 226 choosers\n", "INFO - Running chunk 1 of 1 with 226 of 226 choosers\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.logsums.work_high.compute_logsums.simple_simulate_logsums number_of_rows: 226 observed_row_size: 310 num_chunks: 1\n", "INFO - Running workplace_location.i1.simulate.work_high with 16 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 16 choosers and 226 alternatives\n", + "INFO - workplace_location.i1.simulate.work_high.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 16 choosers and 226 alternatives\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 226 rows\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_high.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts workplace_location.i1.simulate.work_high.interaction_sample_simulate number_of_rows: 16 observed_row_size: 142 num_chunks: 1\n", "INFO - Running workplace_location.i1.sample.work_veryhigh with 18 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 18 choosers\n", + "INFO - workplace_location.i1.sample.work_veryhigh.interaction_sample Running adaptive_chunked_choosers with 18 choosers\n", "INFO - Running chunk 1 of 1 with 18 of 18 choosers\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 46.0%\n", "INFO - Running eval_interaction_utilities on 450 rows\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.interaction_utilities rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.probs rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.del.utilities rss: 0.13GB used: 7.27 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.choices_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.del.probs rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.choices_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.sample.work_veryhigh.interaction_sample.add.choices_df rss: 0.13GB used: 7.27 GB percent: 45.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.sample.work_veryhigh.interaction_sample number_of_rows: 18 observed_row_size: 175 num_chunks: 1\n", "INFO - Running workplace_location.i1.logsums.work_veryhigh with 253 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 253 choosers\n", + "INFO - workplace_location.i1.logsums.work_veryhigh.compute_logsums Running adaptive_chunked_choosers with 253 choosers\n", "INFO - Running chunk 1 of 1 with 253 of 253 choosers\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.13GB used: 7.26 GB percent: 45.8%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers workplace_location.i1.logsums.work_veryhigh.compute_logsums.simple_simulate_logsums number_of_rows: 253 observed_row_size: 310 num_chunks: 1\n", "INFO - Running workplace_location.i1.simulate.work_veryhigh with 18 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 18 choosers and 253 alternatives\n", + "INFO - workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 18 choosers and 253 alternatives\n", "INFO - Running chunk 1 of 1 with 18 of 18 choosers\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.interaction_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", "INFO - Running eval_interaction_utilities on 253 rows\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.interaction_df rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.sample_counts rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.padded_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.interaction_utilities rss: 0.13GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.utilities_df rss: 0.13GB used: 7.29 GB percent: 45.9%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.padded_utilities rss: 0.13GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.probs rss: 0.13GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.logsums rss: 0.13GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.utilities_df rss: 0.13GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.positions rss: 0.13GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.rands rss: 0.13GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.del.probs rss: 0.13GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate.add.choices rss: 0.13GB used: 7.32 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts workplace_location.i1.simulate.work_veryhigh.interaction_sample_simulate number_of_rows: 18 observed_row_size: 141 num_chunks: 1\n", "INFO - write_trace_files iteration 1\n", - "INFO - workplace_location_logsum top 10 value counts:\n", + "INFO - workplace_location_logsum top 10 value counts:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "15.316797 1\n", "15.641096 1\n", "13.574187 1\n", @@ -586,82 +292,30 @@ "15.725096 1\n", "13.564067 1\n", "Name: logsum, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after workplace_location rss: 0.13GB used: 7.32 GB percent: 46.2%\n", "INFO - #run_model running step auto_ownership_simulate\n", "INFO - Running auto_ownership_simulate with 100 households\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 100 choosers\n", + "INFO - auto_ownership_simulate.simple_simulate Running adaptive_chunked_choosers with 100 choosers\n", "INFO - Running chunk 1 of 1 with 100 of 100 choosers\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.13GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.13GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.13GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.13GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.add.utilities rss: 0.13GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.add.probs rss: 0.13GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.del.utilities rss: 0.13GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info auto_ownership_simulate.simple_simulate.eval_mnl.del.probs rss: 0.13GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers auto_ownership_simulate.simple_simulate number_of_rows: 100 observed_row_size: 34 num_chunks: 1\n", "INFO - auto_ownership top 10 value counts:\n", "0 60\n", "1 40\n", "Name: auto_ownership, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after auto_ownership_simulate rss: 0.13GB used: 7.38 GB percent: 46.5%\n", "INFO - #run_model running step free_parking\n", "INFO - Running free_parking with 97 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 97 choosers\n", + "INFO - free_parking.simple_simulate Running adaptive_chunked_choosers with 97 choosers\n", "INFO - Running chunk 1 of 1 with 97 of 97 choosers\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.13GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.13GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.13GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.13GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.add.utilities rss: 0.13GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.add.probs rss: 0.13GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.del.utilities rss: 0.13GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info free_parking.simple_simulate.eval_mnl.del.probs rss: 0.13GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers free_parking.simple_simulate number_of_rows: 97 observed_row_size: 10 num_chunks: 1\n", "INFO - free_parking top 10 value counts:\n", "False 163\n", "True 4\n", "Name: free_parking_at_work, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after free_parking rss: 0.13GB used: 7.38 GB percent: 46.6%\n", "INFO - #run_model running step cdap_simulate\n", "INFO - Pre-building cdap specs\n", - "INFO - Time to execute build_cdap_spec hh_size 2 : 0.269 seconds (0.0 minutes)\n", - "INFO - Time to execute build_cdap_spec hh_size 3 : 0.952 seconds (0.0 minutes)\n", - "INFO - Time to execute build_cdap_spec hh_size 4 : 1.731 seconds (0.0 minutes)\n", - "INFO - Time to execute build_cdap_spec hh_size 5 : 5.317 seconds (0.1 minutes)\n", + "INFO - Time to execute build_cdap_spec hh_size 2 : 0.314 seconds (0.0 minutes)\n", + "INFO - Time to execute build_cdap_spec hh_size 3 : 0.645 seconds (0.0 minutes)\n", + "INFO - Time to execute build_cdap_spec hh_size 4 : 1.403 seconds (0.0 minutes)\n", + "INFO - Time to execute build_cdap_spec hh_size 5 : 2.92 seconds (0.0 minutes)\n", "INFO - Running cdap_simulate with 167 persons\n", - "INFO - Running chunk 1 of 1 with 100 of 100 choosers\n", - "INFO - trace_memory_info cdap.cdap.add.persons rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.expression_values rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.expression_values rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info cdap.cdap.add.indiv_utils rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - build_cdap_spec returning cached injectable spec cdap_spec_2\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.expression_values rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.expression_values rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - build_cdap_spec returning cached injectable spec cdap_spec_3\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.expression_values rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.expression_values rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - build_cdap_spec returning cached injectable spec cdap_spec_4\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.expression_values rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.expression_values rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - build_cdap_spec returning cached injectable spec cdap_spec_5\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.expression_values rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.add.utilities rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.expression_values rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.eval_utils.del.utilities rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.del.indiv_utils rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.add.hh_activity_choices rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.add.persons rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info cdap.cdap.del.persons rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id cdap.cdap number_of_rows: 100 observed_row_size: 262 num_chunks: 1\n", + "INFO - cdap.cdap Running chunk 1 of 1 with 100 of 100 choosers\n", "INFO - cdap_activity top 10 value counts:\n", "M 89\n", "N 48\n", @@ -679,22 +333,10 @@ "7 0 10 1 11\n", "8 0 6 0 6\n", "All 30 89 48 167\n", - "INFO - trace_memory_info pipeline.run after cdap_simulate rss: 0.15GB used: 7.35 GB percent: 46.4%\n", "INFO - #run_model running step mandatory_tour_frequency\n", "INFO - Running mandatory_tour_frequency with 89 persons\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 89 choosers\n", + "INFO - mandatory_tour_frequency.simple_simulate Running adaptive_chunked_choosers with 89 choosers\n", "INFO - Running chunk 1 of 1 with 89 of 89 choosers\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_frequency.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_frequency.simple_simulate number_of_rows: 89 observed_row_size: 103 num_chunks: 1\n", - "INFO - register tours: added 1 new ids to 0 existing trace ids\n", - "INFO - register tours: tracing new ids [76904600] in tours\n", "INFO - mandatory_tour_frequency top 10 value counts:\n", " 78\n", "work1 61\n", @@ -702,432 +344,128 @@ "work_and_school 4\n", "work2 2\n", "Name: mandatory_tour_frequency, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after mandatory_tour_frequency rss: 0.15GB used: 7.36 GB percent: 46.4%\n", "INFO - #run_model running step mandatory_tour_scheduling\n", "DEBUG - @inject timetable\n", "INFO - Running mandatory_tour_scheduling with 95 tours\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work schedule_tours running 67 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 67 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work Running adaptive_chunked_choosers with 67 choosers\n", "INFO - Running chunk 1 of 1 with 67 of 67 choosers\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work schedule_tours running 67 tour choices\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.add.tours rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.add.alt_tdd rss: 0.15GB used: 7.36 GB percent: 46.4%\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums compute_logsums deduped_alt_tdds reduced number of rows by 92.11% from 12730 to 1005 compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums compute_logsums for 1005 choosers 1005 alts\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1005 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums Running adaptive_chunked_choosers with 1005 choosers\n", "INFO - Running chunk 1 of 1 with 1005 of 1005 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums number_of_rows: 1005 observed_row_size: 363 num_chunks: 1\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 67 choosers and 12730 alternatives\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 67 choosers and 12730 alternatives\n", "INFO - Running chunk 1 of 1 with 67 of 67 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 12730 rows\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate number_of_rows: 67 observed_row_size: 9347 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work number_of_rows: 67 observed_row_size: 9347 num_chunks: 1\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school schedule_tours running 17 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school schedule_tours running 17 tour choices\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.add.alt_tdd rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums compute_logsums deduped_alt_tdds reduced number of rows by 92.11% from 3230 to 255 compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums compute_logsums for 255 choosers 255 alts\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 255 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums Running adaptive_chunked_choosers with 255 choosers\n", "INFO - Running chunk 1 of 1 with 255 of 255 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.compute_logsums.logsums.simple_simulate_logsums number_of_rows: 255 observed_row_size: 375 num_chunks: 1\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 17 choosers and 3230 alternatives\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 17 choosers and 3230 alternatives\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 3230 rows\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school.interaction_sample_simulate number_of_rows: 17 observed_row_size: 9347 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school number_of_rows: 17 observed_row_size: 9347 num_chunks: 1\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ schedule_tours running 5 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ schedule_tours running 5 tour choices\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.add.alt_tdd rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums compute_logsums deduped_alt_tdds reduced number of rows by 92.11% from 950 to 75 compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums compute_logsums for 75 choosers 75 alts\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 75 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums Running adaptive_chunked_choosers with 75 choosers\n", "INFO - Running chunk 1 of 1 with 75 of 75 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.compute_logsums.logsums.simple_simulate_logsums number_of_rows: 75 observed_row_size: 375 num_chunks: 1\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 5 choosers and 950 alternatives\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 5 choosers and 950 alternatives\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 950 rows\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ.interaction_sample_simulate number_of_rows: 5 observed_row_size: 9347 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ number_of_rows: 5 observed_row_size: 9347 num_chunks: 1\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work schedule_tours running 2 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work schedule_tours running 2 tour choices\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.add.alt_tdd rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums compute_logsums deduped_alt_tdds reduced number of rows by 89.71% from 175 to 18 compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums compute_logsums for 18 choosers 18 alts\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 18 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums Running adaptive_chunked_choosers with 18 choosers\n", "INFO - Running chunk 1 of 1 with 18 of 18 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.compute_logsums.logsums.simple_simulate_logsums number_of_rows: 18 observed_row_size: 353 num_chunks: 1\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 175 alternatives\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 175 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 175 rows\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work.interaction_sample_simulate number_of_rows: 2 observed_row_size: 4325 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work number_of_rows: 2 observed_row_size: 4325 num_chunks: 1\n", "INFO - skipping empty segment school\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ schedule_tours running 4 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 4 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ Running adaptive_chunked_choosers with 4 choosers\n", "INFO - Running chunk 1 of 1 with 4 of 4 choosers\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ schedule_tours running 4 tour choices\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.add.alt_tdd rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums compute_logsums deduped_alt_tdds reduced number of rows by 90.16% from 366 to 36 compared to USE_BRUTE_FORCE_TO_COMPUTE_LOGSUMS\n", "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums compute_logsums for 36 choosers 36 alts\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 36 choosers\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums Running adaptive_chunked_choosers with 36 choosers\n", "INFO - Running chunk 1 of 1 with 36 of 36 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.compute_logsums.logsums.simple_simulate_logsums number_of_rows: 36 observed_row_size: 367 num_chunks: 1\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.add.tours rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 4 choosers and 366 alternatives\n", + "INFO - mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 4 choosers and 366 alternatives\n", "INFO - Running chunk 1 of 1 with 4 of 4 choosers\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 366 rows\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ.interaction_sample_simulate number_of_rows: 4 observed_row_size: 4521 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ number_of_rows: 4 observed_row_size: 4521 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after mandatory_tour_scheduling rss: 0.14GB used: 7.37 GB percent: 46.4%\n", "INFO - #run_model running step joint_tour_frequency\n", "INFO - Running joint_tour_frequency with 36 multi-person households\n", "DEBUG - @inject timetable\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 36 choosers\n", + "INFO - joint_tour_frequency.simple_simulate Running adaptive_chunked_choosers with 36 choosers\n", "INFO - Running chunk 1 of 1 with 36 of 36 choosers\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_frequency.simple_simulate.eval_mnl.del.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_frequency.simple_simulate number_of_rows: 36 observed_row_size: 91 num_chunks: 1\n", "WARNING - register tours: no rows with household_id in [982875].\n", - "INFO - register tours: added 0 new ids to 1 existing trace ids\n", - "INFO - register tours: tracing new ids [] in tours\n", "INFO - joint_tour_frequency top 10 value counts:\n", "0_tours 97\n", - "1_Shop 1\n", - "1_Eat 1\n", "1_Disc 1\n", + "1_Eat 1\n", + "1_Shop 1\n", "Name: joint_tour_frequency, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after joint_tour_frequency rss: 0.14GB used: 7.37 GB percent: 46.5%\n", "INFO - #run_model running step joint_tour_composition\n", "INFO - Running joint_tour_composition with 3 joint tours\n", "DEBUG - @inject timetable\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - joint_tour_composition.simple_simulate Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.add.utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.add.probs rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.del.utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info joint_tour_composition.simple_simulate.eval_mnl.del.probs rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_composition.simple_simulate number_of_rows: 3 observed_row_size: 24 num_chunks: 1\n", "INFO - joint_tour_composition top 10 value counts:\n", "adults 2\n", "children 1\n", "Name: composition, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after joint_tour_composition rss: 0.15GB used: 7.39 GB percent: 46.6%\n", "INFO - #run_model running step joint_tour_participation\n", "WARNING - register joint_tour_participants: no rows with household_id in [982875].\n", - "INFO - register joint_tour_participants: added 0 new ids to 0 existing trace ids\n", - "INFO - register joint_tour_participants: tracing new ids [] in joint_tour_participants\n", "INFO - Running joint_tours_participation with 8 potential participants (candidates)\n", "DEBUG - @inject timetable\n", - "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", + "INFO - joint_tour_participation Running chunk 1 of 1 with 3 of 3 choosers\n", "INFO - joint_tour_participation.eval_mnl.participants_chooser 3 joint tours to satisfy.\n", - "INFO - joint_tour_participation.eval_mnl.participants_chooser iteration 1 : 3 joint tours satisfied 0 remaining\n", "INFO - joint_tour_participation.eval_mnl.participants_chooser 1 iterations to satisfy all joint tours.\n", - "INFO - trace_memory_info joint_tour_participation.eval_mnl.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id joint_tour_participation number_of_rows: 3 observed_row_size: 144 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after joint_tour_participation rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - #run_model running step joint_tour_destination\n", "INFO - running joint_tour_destination.shopping.sample with 1 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - joint_tour_destination.shopping.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.del.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.shopping.sample.interaction_sample number_of_rows: 1 observed_row_size: 150 num_chunks: 1\n", "INFO - Running joint_tour_destination.shopping.logsums with 11 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 11 choosers\n", + "INFO - joint_tour_destination.shopping.logsums.compute_logsums Running adaptive_chunked_choosers with 11 choosers\n", "INFO - Running chunk 1 of 1 with 11 of 11 choosers\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 11 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 1 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 11 alternatives\n", + "INFO - joint_tour_destination.shopping.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 11 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 11 rows\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.shopping.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts joint_tour_destination.shopping.simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 110 num_chunks: 1\n", "INFO - joint_tour_destination skipping segment othmaint: no choosers\n", "INFO - running joint_tour_destination.othdiscr.sample with 1 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - joint_tour_destination.othdiscr.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.probs rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.othdiscr.sample.interaction_sample number_of_rows: 1 observed_row_size: 150 num_chunks: 1\n", "INFO - Running joint_tour_destination.othdiscr.logsums with 15 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - joint_tour_destination.othdiscr.logsums.compute_logsums Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 15 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 1 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 15 alternatives\n", + "INFO - joint_tour_destination.othdiscr.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 15 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 15 rows\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts joint_tour_destination.othdiscr.simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 150 num_chunks: 1\n", "INFO - running joint_tour_destination.eatout.sample with 1 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - joint_tour_destination.eatout.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.del.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.eatout.sample.interaction_sample number_of_rows: 1 observed_row_size: 150 num_chunks: 1\n", "INFO - Running joint_tour_destination.eatout.logsums with 16 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 16 choosers\n", + "INFO - joint_tour_destination.eatout.logsums.compute_logsums Running adaptive_chunked_choosers with 16 choosers\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 16 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 1 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 16 alternatives\n", + "INFO - joint_tour_destination.eatout.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 16 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 16 rows\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info joint_tour_destination.eatout.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts joint_tour_destination.eatout.simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 160 num_chunks: 1\n", "INFO - joint_tour_destination skipping segment social: no choosers\n", "INFO - joint_tour_destination skipping segment escort: no choosers\n", "INFO - destination summary:\n", @@ -1140,163 +478,53 @@ "75% 18.500000\n", "max 24.000000\n", "Name: destination, dtype: float64\n", - "INFO - trace_memory_info pipeline.run after joint_tour_destination rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - #run_model running step joint_tour_scheduling\n", "INFO - Running joint_tour_scheduling with 3 joint tours\n", "DEBUG - @inject timetable\n", "INFO - schedule_tours %s tours not monotonic_increasing - sorting df\n", "INFO - joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1 schedule_tours running 3 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1 Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", "INFO - joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1 schedule_tours running 3 tour choices\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.add.alt_tdd rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 3 choosers and 65 alternatives\n", + "INFO - joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 3 choosers and 65 alternatives\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 65 rows\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1.interaction_sample_simulate number_of_rows: 3 observed_row_size: 3572 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1 number_of_rows: 3 observed_row_size: 3572 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after joint_tour_scheduling rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - #run_model running step non_mandatory_tour_frequency\n", "DEBUG - @inject timetable\n", "INFO - Running non_mandatory_tour_frequency with 137 persons\n", "INFO - Running segment 'PTYPE_FULL' of size 48\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 48 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate Running adaptive_chunked_choosers with 48 choosers\n", "INFO - Running chunk 1 of 1 with 48 of 48 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.91 GB percent: 49.9%\n", "INFO - Running eval_interaction_utilities on 4608 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 8.98 GB percent: 56.6%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.14GB used: 9.04 GB percent: 57.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.utilities rss: 0.14GB used: 9.16 GB percent: 57.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.probs rss: 0.14GB used: 9.21 GB percent: 58.1%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.del.utilities rss: 0.14GB used: 9.28 GB percent: 58.5%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.positions rss: 0.14GB used: 9.24 GB percent: 58.3%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.rands rss: 0.14GB used: 8.83 GB percent: 55.7%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate.interaction_simulate.add.choices rss: 0.14GB used: 8.36 GB percent: 52.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_FULL.interaction_simulate number_of_rows: 48 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_PART' of size 26\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 26 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate Running adaptive_chunked_choosers with 26 choosers\n", "INFO - Running chunk 1 of 1 with 26 of 26 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.48 GB percent: 47.2%\n", "INFO - Running eval_interaction_utilities on 2496 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_PART.interaction_simulate number_of_rows: 26 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_UNIVERSITY' of size 16\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 16 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate Running adaptive_chunked_choosers with 16 choosers\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.47 GB percent: 47.1%\n", "INFO - Running eval_interaction_utilities on 1536 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_UNIVERSITY.interaction_simulate number_of_rows: 16 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_NONWORK' of size 17\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 1632 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_NONWORK.interaction_simulate number_of_rows: 17 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_RETIRED' of size 12\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 12 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate Running adaptive_chunked_choosers with 12 choosers\n", "INFO - Running chunk 1 of 1 with 12 of 12 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 1152 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_RETIRED.interaction_simulate number_of_rows: 12 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_DRIVING' of size 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 96 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_DRIVING.interaction_simulate number_of_rows: 1 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_SCHOOL' of size 11\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 11 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate Running adaptive_chunked_choosers with 11 choosers\n", "INFO - Running chunk 1 of 1 with 11 of 11 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 1056 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_SCHOOL.interaction_simulate number_of_rows: 11 observed_row_size: 14112 num_chunks: 1\n", "INFO - Running segment 'PTYPE_PRESCHOOL' of size 6\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 6 choosers\n", + "INFO - non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate Running adaptive_chunked_choosers with 6 choosers\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 576 rows\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.interaction_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.del.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.positions rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate.interaction_simulate.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_frequency.PTYPE_PRESCHOOL.interaction_simulate number_of_rows: 6 observed_row_size: 14112 num_chunks: 1\n", "INFO - extend_tour_counts increased tour count by 5 from 90 to 95\n", - "INFO - register tours: added 1 new ids to 1 existing trace ids\n", - "INFO - register tours: tracing new ids [76904608] in tours\n", "INFO - non_mandatory_tour_frequency top 10 value counts:\n", "0 102\n", "16 17\n", @@ -1309,421 +537,110 @@ "17 3\n", "24 2\n", "Name: non_mandatory_tour_frequency, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after non_mandatory_tour_frequency rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - #run_model running step non_mandatory_tour_destination\n", "INFO - running non_mandatory_tour_destination.shopping.sample with 30 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 30 choosers\n", + "INFO - non_mandatory_tour_destination.shopping.sample.interaction_sample Running adaptive_chunked_choosers with 30 choosers\n", "INFO - Running chunk 1 of 1 with 30 of 30 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - Running eval_interaction_utilities on 750 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.probs rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.shopping.sample.interaction_sample number_of_rows: 30 observed_row_size: 150 num_chunks: 1\n", + "INFO - Running eval_interaction_utilities on 750 rows\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "INFO - Running non_mandatory_tour_destination.shopping.logsums with 366 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 366 choosers\n", + "INFO - non_mandatory_tour_destination.shopping.logsums.compute_logsums Running adaptive_chunked_choosers with 366 choosers\n", "INFO - Running chunk 1 of 1 with 366 of 366 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.shopping.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 366 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 30 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 30 choosers and 366 alternatives\n", + "INFO - non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 30 choosers and 366 alternatives\n", "INFO - Running chunk 1 of 1 with 30 of 30 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 366 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.shopping.simulate.interaction_sample_simulate number_of_rows: 30 observed_row_size: 122 num_chunks: 1\n", "INFO - running non_mandatory_tour_destination.othmaint.sample with 20 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 20 choosers\n", + "INFO - non_mandatory_tour_destination.othmaint.sample.interaction_sample Running adaptive_chunked_choosers with 20 choosers\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 500 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.del.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.othmaint.sample.interaction_sample number_of_rows: 20 observed_row_size: 150 num_chunks: 1\n", "INFO - Running non_mandatory_tour_destination.othmaint.logsums with 286 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 286 choosers\n", + "INFO - non_mandatory_tour_destination.othmaint.logsums.compute_logsums Running adaptive_chunked_choosers with 286 choosers\n", "INFO - Running chunk 1 of 1 with 286 of 286 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.othmaint.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 286 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 20 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 20 choosers and 286 alternatives\n", + "INFO - non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 20 choosers and 286 alternatives\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 286 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.othmaint.simulate.interaction_sample_simulate number_of_rows: 20 observed_row_size: 143 num_chunks: 1\n", "INFO - running non_mandatory_tour_destination.othdiscr.sample with 20 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 20 choosers\n", + "INFO - non_mandatory_tour_destination.othdiscr.sample.interaction_sample Running adaptive_chunked_choosers with 20 choosers\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 500 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.del.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.del.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.othdiscr.sample.interaction_sample number_of_rows: 20 observed_row_size: 150 num_chunks: 1\n", "INFO - Running non_mandatory_tour_destination.othdiscr.logsums with 291 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 291 choosers\n", + "INFO - non_mandatory_tour_destination.othdiscr.logsums.compute_logsums Running adaptive_chunked_choosers with 291 choosers\n", "INFO - Running chunk 1 of 1 with 291 of 291 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.othdiscr.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 291 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 20 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 20 choosers and 291 alternatives\n", + "INFO - non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 20 choosers and 291 alternatives\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.47 GB percent: 47.1%\n", "INFO - Running eval_interaction_utilities on 291 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.47 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.othdiscr.simulate.interaction_sample_simulate number_of_rows: 20 observed_row_size: 146 num_chunks: 1\n", "INFO - running non_mandatory_tour_destination.eatout.sample with 15 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - non_mandatory_tour_destination.eatout.sample.interaction_sample Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 375 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.eatout.sample.interaction_sample number_of_rows: 15 observed_row_size: 150 num_chunks: 1\n", "INFO - Running non_mandatory_tour_destination.eatout.logsums with 203 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 203 choosers\n", + "INFO - non_mandatory_tour_destination.eatout.logsums.compute_logsums Running adaptive_chunked_choosers with 203 choosers\n", "INFO - Running chunk 1 of 1 with 203 of 203 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 203 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 15 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 15 choosers and 203 alternatives\n", + "INFO - non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 15 choosers and 203 alternatives\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 203 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.eatout.simulate.interaction_sample_simulate number_of_rows: 15 observed_row_size: 136 num_chunks: 1\n", "INFO - running non_mandatory_tour_destination.social.sample with 7 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 7 choosers\n", + "INFO - non_mandatory_tour_destination.social.sample.interaction_sample Running adaptive_chunked_choosers with 7 choosers\n", "INFO - Running chunk 1 of 1 with 7 of 7 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 175 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.del.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.social.sample.interaction_sample number_of_rows: 7 observed_row_size: 150 num_chunks: 1\n", "INFO - Running non_mandatory_tour_destination.social.logsums with 97 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 97 choosers\n", + "INFO - non_mandatory_tour_destination.social.logsums.compute_logsums Running adaptive_chunked_choosers with 97 choosers\n", "INFO - Running chunk 1 of 1 with 97 of 97 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.social.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 97 observed_row_size: 310 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 7 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 7 choosers and 97 alternatives\n", + "INFO - non_mandatory_tour_destination.social.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 7 choosers and 97 alternatives\n", "INFO - Running chunk 1 of 1 with 7 of 7 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 97 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.social.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.social.simulate.interaction_sample_simulate number_of_rows: 7 observed_row_size: 139 num_chunks: 1\n", "INFO - running non_mandatory_tour_destination.escort.sample with 3 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - non_mandatory_tour_destination.escort.sample.interaction_sample Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 75 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.probs rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.escort.sample.interaction_sample number_of_rows: 3 observed_row_size: 150 num_chunks: 1\n", "INFO - Running non_mandatory_tour_destination.escort.logsums with 41 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 41 choosers\n", + "INFO - non_mandatory_tour_destination.escort.logsums.compute_logsums Running adaptive_chunked_choosers with 41 choosers\n", "INFO - Running chunk 1 of 1 with 41 of 41 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.45 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_destination.escort.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 41 observed_row_size: 308 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 3 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 3 choosers and 41 alternatives\n", + "INFO - non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 3 choosers and 41 alternatives\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 41 rows\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_destination.escort.simulate.interaction_sample_simulate number_of_rows: 3 observed_row_size: 137 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after non_mandatory_tour_destination rss: 0.14GB used: 7.42 GB percent: 46.8%\n", "INFO - #run_model running step non_mandatory_tour_scheduling\n", "DEBUG - @inject timetable\n", "INFO - Running non_mandatory_tour_scheduling with 95 tours\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1 schedule_tours running 65 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 65 choosers\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1 Running adaptive_chunked_choosers with 65 choosers\n", "INFO - Running chunk 1 of 1 with 65 of 65 choosers\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1 schedule_tours running 65 tour choices\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.add.alt_tdd rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 65 choosers and 9990 alternatives\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 65 choosers and 9990 alternatives\n", "INFO - Running chunk 1 of 1 with 65 of 65 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 9990 rows\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.interaction_sample_simulate number_of_rows: 65 observed_row_size: 5869 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1 number_of_rows: 65 observed_row_size: 5869 num_chunks: 1\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2 schedule_tours running 23 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 23 choosers\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2 Running adaptive_chunked_choosers with 23 choosers\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2 schedule_tours running 23 tour choices\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.add.tours rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.add.alt_tdd rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.add.tours rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 23 choosers and 1758 alternatives\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 23 choosers and 1758 alternatives\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 1758 rows\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.interaction_sample_simulate number_of_rows: 23 observed_row_size: 2933 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2 number_of_rows: 23 observed_row_size: 2933 num_chunks: 1\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3 schedule_tours running 6 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 6 choosers\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3 Running adaptive_chunked_choosers with 6 choosers\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3 schedule_tours running 6 tour choices\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.add.tours rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.add.alt_tdd rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.add.tours rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 6 choosers and 200 alternatives\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 6 choosers and 200 alternatives\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 200 rows\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3.interaction_sample_simulate number_of_rows: 6 observed_row_size: 1295 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3 number_of_rows: 6 observed_row_size: 1295 num_chunks: 1\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4 schedule_tours running 1 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4 Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4 schedule_tours running 1 tour choices\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.add.tours rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.add.alt_tdd rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.add.tours rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 18 alternatives\n", + "INFO - non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 18 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 18 rows\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4.interaction_sample_simulate number_of_rows: 1 observed_row_size: 712 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4 number_of_rows: 1 observed_row_size: 712 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after non_mandatory_tour_scheduling rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - #run_model running step tour_mode_choice_simulate\n", "INFO - Running tour_mode_choice with 193 tours\n", "INFO - tour_types top 10 value counts:\n", @@ -1737,117 +654,47 @@ "escort 3\n", "Name: tour_type, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'eatout' (16 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 16 choosers\n", + "INFO - tour_mode_choice.eatout.simple_simulate Running adaptive_chunked_choosers with 16 choosers\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.eatout.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.eatout.simple_simulate number_of_rows: 16 observed_row_size: 310 num_chunks: 1\n", "INFO - tour_mode_choice_simulate eatout choices_df top 10 value counts:\n", "WALK 12\n", "WALK_LRF 3\n", "DRIVEALONEFREE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'escort' (3 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - tour_mode_choice.escort.simple_simulate Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.52 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.escort.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.51 GB percent: 47.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.escort.simple_simulate number_of_rows: 3 observed_row_size: 308 num_chunks: 1\n", "INFO - tour_mode_choice_simulate escort choices_df top 10 value counts:\n", - "TNC_SINGLE 1\n", - "WALK_LOC 1\n", "SHARED2FREE 1\n", + "WALK_LOC 1\n", + "TNC_SINGLE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'othdiscr' (21 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 21 choosers\n", + "INFO - tour_mode_choice.othdiscr.simple_simulate Running adaptive_chunked_choosers with 21 choosers\n", "INFO - Running chunk 1 of 1 with 21 of 21 choosers\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.52 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.54 GB percent: 47.6%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.54 GB percent: 47.6%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.51 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.5 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.52 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.52 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.52 GB percent: 47.4%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othdiscr.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.othdiscr.simple_simulate number_of_rows: 21 observed_row_size: 310 num_chunks: 1\n", "INFO - tour_mode_choice_simulate othdiscr choices_df top 10 value counts:\n", "WALK 10\n", "WALK_LRF 3\n", - "TNC_SINGLE 2\n", "WALK_LOC 2\n", + "TNC_SINGLE 2\n", "DRIVEALONEFREE 2\n", - "SHARED3FREE 1\n", "WALK_HVY 1\n", + "SHARED3FREE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'othmaint' (20 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 20 choosers\n", + "INFO - tour_mode_choice.othmaint.simple_simulate Running adaptive_chunked_choosers with 20 choosers\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.49 GB percent: 47.3%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.othmaint.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.othmaint.simple_simulate number_of_rows: 20 observed_row_size: 310 num_chunks: 1\n", "INFO - tour_mode_choice_simulate othmaint choices_df top 10 value counts:\n", "WALK 9\n", "TNC_SINGLE 4\n", "BIKE 4\n", - "DRIVEALONEFREE 1\n", "WALK_LOC 1\n", + "DRIVEALONEFREE 1\n", "TAXI 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'school' (17 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - tour_mode_choice.school.simple_simulate Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.48 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.48 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.48 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.school.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.school.simple_simulate number_of_rows: 17 observed_row_size: 322 num_chunks: 1\n", "INFO - tour_mode_choice_simulate school choices_df top 10 value counts:\n", "WALK 7\n", "WALK_LOC 5\n", @@ -1856,113 +703,51 @@ "WALK_HVY 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'shopping' (31 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 31 choosers\n", + "INFO - tour_mode_choice.shopping.simple_simulate Running adaptive_chunked_choosers with 31 choosers\n", "INFO - Running chunk 1 of 1 with 31 of 31 choosers\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info tour_mode_choice.shopping.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.shopping.simple_simulate number_of_rows: 31 observed_row_size: 310 num_chunks: 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ "INFO - tour_mode_choice_simulate shopping choices_df top 10 value counts:\n", "WALK 13\n", "WALK_LRF 7\n", "WALK_LOC 5\n", "TAXI 2\n", "DRIVEALONEFREE 2\n", - "TNC_SINGLE 1\n", "SHARED2FREE 1\n", + "TNC_SINGLE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'social' (7 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 7 choosers\n", + "INFO - tour_mode_choice.social.simple_simulate Running adaptive_chunked_choosers with 7 choosers\n", "INFO - Running chunk 1 of 1 with 7 of 7 choosers\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.social.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.social.simple_simulate number_of_rows: 7 observed_row_size: 310 num_chunks: 1\n", "INFO - tour_mode_choice_simulate social choices_df top 10 value counts:\n", "WALK 2\n", "WALK_LRF 2\n", "TNC_SINGLE 1\n", - "TAXI 1\n", "WALK_LOC 1\n", + "TAXI 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'univ' (9 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - tour_mode_choice.univ.simple_simulate Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.univ.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.univ.simple_simulate number_of_rows: 9 observed_row_size: 322 num_chunks: 1\n", "INFO - tour_mode_choice_simulate univ choices_df top 10 value counts:\n", "WALK 3\n", "WALK_LRF 2\n", "TNC_SHARED 1\n", - "DRIVEALONEFREE 1\n", - "TAXI 1\n", "WALK_LOC 1\n", + "TAXI 1\n", + "DRIVEALONEFREE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate tour_type 'work' (69 tours)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 69 choosers\n", + "INFO - tour_mode_choice.work.simple_simulate Running adaptive_chunked_choosers with 69 choosers\n", "INFO - Running chunk 1 of 1 with 69 of 69 choosers\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.add.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.del.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.add.nested_probabilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.add.base_probabilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.del.nested_probabilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info tour_mode_choice.work.simple_simulate.eval_nl.del.base_probabilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers tour_mode_choice.work.simple_simulate number_of_rows: 69 observed_row_size: 310 num_chunks: 1\n", "INFO - tour_mode_choice_simulate work choices_df top 10 value counts:\n", "WALK 24\n", "WALK_LOC 14\n", "WALK_LRF 12\n", "TNC_SINGLE 7\n", "BIKE 4\n", - "DRIVEALONEFREE 3\n", "WALK_HVY 3\n", - "SHARED3FREE 1\n", + "DRIVEALONEFREE 3\n", "SHARED2FREE 1\n", + "SHARED3FREE 1\n", "Name: tour_mode, dtype: int64\n", "INFO - tour_mode_choice_simulate all tour type choices top 10 value counts:\n", "WALK 80\n", @@ -1976,81 +761,29 @@ "SHARED3FREE 3\n", "SHARED2FREE 3\n", "Name: tour_mode, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after tour_mode_choice_simulate rss: 0.14GB used: 7.42 GB percent: 46.8%\n", "INFO - #run_model running step atwork_subtour_frequency\n", "INFO - Running atwork_subtour_frequency with 69 work tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 69 choosers\n", + "INFO - atwork_subtour_frequency.simple_simulate Running adaptive_chunked_choosers with 69 choosers\n", "INFO - Running chunk 1 of 1 with 69 of 69 choosers\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info atwork_subtour_frequency.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers atwork_subtour_frequency.simple_simulate number_of_rows: 69 observed_row_size: 28 num_chunks: 1\n", "WARNING - register tours: no rows with household_id in [982875].\n", - "INFO - register tours: added 0 new ids to 2 existing trace ids\n", - "INFO - register tours: tracing new ids [] in tours\n", "INFO - atwork_subtour_frequency top 10 value counts:\n", " 133\n", "no_subtours 60\n", "eat 8\n", "maint 1\n", "Name: atwork_subtour_frequency, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after atwork_subtour_frequency rss: 0.14GB used: 7.43 GB percent: 46.8%\n", "INFO - #run_model running step atwork_subtour_destination\n", "INFO - running atwork_subtour_destination.atwork.sample with 9 tours\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - atwork_subtour_destination.atwork.sample.interaction_sample Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 225 rows\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers atwork_subtour_destination.atwork.sample.interaction_sample number_of_rows: 9 observed_row_size: 150 num_chunks: 1\n", "INFO - Running atwork_subtour_destination.atwork.logsums with 124 rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 124 choosers\n", + "INFO - atwork_subtour_destination.atwork.logsums.compute_logsums Running adaptive_chunked_choosers with 124 choosers\n", "INFO - Running chunk 1 of 1 with 124 of 124 choosers\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers atwork_subtour_destination.atwork.logsums.compute_logsums.simple_simulate_logsums number_of_rows: 124 observed_row_size: 318 num_chunks: 1\n", "INFO - Running tour_destination_simulate with 9 persons\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 9 choosers and 124 alternatives\n", + "INFO - atwork_subtour_destination.atwork.simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 9 choosers and 124 alternatives\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 124 rows\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_destination.atwork.simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts atwork_subtour_destination.atwork.simulate.interaction_sample_simulate number_of_rows: 9 observed_row_size: 138 num_chunks: 1\n", "INFO - destination summary:\n", "count 9.000000\n", "mean 10.444444\n", @@ -2061,63 +794,26 @@ "75% 15.000000\n", "max 25.000000\n", "Name: destination, dtype: float64\n", - "INFO - trace_memory_info pipeline.run after atwork_subtour_destination rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - #run_model running step atwork_subtour_scheduling\n", "INFO - Running atwork_subtour_scheduling with 9 tours\n", "INFO - atwork_subtour_scheduling.tour_1 schedule_tours running 9 tour choices\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - atwork_subtour_scheduling.tour_1 Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", "INFO - atwork_subtour_scheduling.tour_1 schedule_tours running 9 tour choices\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.add.alt_tdd rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.add.tours rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 9 choosers and 651 alternatives\n", + "INFO - atwork_subtour_scheduling.tour_1.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 9 choosers and 651 alternatives\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 651 rows\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_scheduling.tour_1.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts atwork_subtour_scheduling.tour_1.interaction_sample_simulate number_of_rows: 9 observed_row_size: 12384 num_chunks: 1\n", - "INFO - #chunk_history adaptive_chunked_choosers atwork_subtour_scheduling.tour_1 number_of_rows: 9 observed_row_size: 12384 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after atwork_subtour_scheduling rss: 0.15GB used: 7.39 GB percent: 46.6%\n", "INFO - #run_model running step atwork_subtour_mode_choice\n", "INFO - Running atwork_subtour_mode_choice with 9 subtours\n", "INFO - atwork_subtour_mode_choice tour_type top 10 value counts:\n", "eat 8\n", "maint 1\n", "Name: tour_type, dtype: int64\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - atwork_subtour_mode_choice.simple_simulate Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info atwork_subtour_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers atwork_subtour_mode_choice.simple_simulate number_of_rows: 9 observed_row_size: 318 num_chunks: 1\n", "INFO - atwork_subtour_mode_choice choices top 10 value counts:\n", "WALK 9\n", "Name: tour_mode, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after atwork_subtour_mode_choice rss: 0.15GB used: 7.41 GB percent: 46.7%\n", "INFO - #run_model running step stop_frequency\n", "INFO - stop_frequency segments top 10 value counts:\n", "work 69\n", @@ -2132,125 +828,35 @@ "escort 3\n", "Name: primary_purpose, dtype: int64\n", "INFO - stop_frequency running segment work with 69 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 69 choosers\n", + "INFO - stop_frequency.work.simple_simulate Running adaptive_chunked_choosers with 69 choosers\n", "INFO - Running chunk 1 of 1 with 69 of 69 choosers\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.work.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.work.simple_simulate number_of_rows: 69 observed_row_size: 44 num_chunks: 1\n", "INFO - stop_frequency running segment school with 17 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - stop_frequency.school.simple_simulate Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.school.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.school.simple_simulate number_of_rows: 17 observed_row_size: 32 num_chunks: 1\n", "INFO - stop_frequency running segment univ with 9 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - stop_frequency.univ.simple_simulate Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.univ.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.univ.simple_simulate number_of_rows: 9 observed_row_size: 32 num_chunks: 1\n", "INFO - stop_frequency running segment social with 7 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 7 choosers\n", + "INFO - stop_frequency.social.simple_simulate Running adaptive_chunked_choosers with 7 choosers\n", "INFO - Running chunk 1 of 1 with 7 of 7 choosers\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.social.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.social.simple_simulate number_of_rows: 7 observed_row_size: 36 num_chunks: 1\n", "INFO - stop_frequency running segment shopping with 31 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 31 choosers\n", + "INFO - stop_frequency.shopping.simple_simulate Running adaptive_chunked_choosers with 31 choosers\n", "INFO - Running chunk 1 of 1 with 31 of 31 choosers\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.shopping.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.shopping.simple_simulate number_of_rows: 31 observed_row_size: 36 num_chunks: 1\n", "INFO - stop_frequency running segment eatout with 16 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 16 choosers\n", + "INFO - stop_frequency.eatout.simple_simulate Running adaptive_chunked_choosers with 16 choosers\n", "INFO - Running chunk 1 of 1 with 16 of 16 choosers\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.eatout.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.eatout.simple_simulate number_of_rows: 16 observed_row_size: 36 num_chunks: 1\n", "INFO - stop_frequency running segment escort with 3 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - stop_frequency.escort.simple_simulate Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info stop_frequency.escort.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.escort.simple_simulate number_of_rows: 3 observed_row_size: 32 num_chunks: 1\n", "INFO - stop_frequency running segment othmaint with 20 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 20 choosers\n", + "INFO - stop_frequency.othmaint.simple_simulate Running adaptive_chunked_choosers with 20 choosers\n", "INFO - Running chunk 1 of 1 with 20 of 20 choosers\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othmaint.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.othmaint.simple_simulate number_of_rows: 20 observed_row_size: 41 num_chunks: 1\n", "INFO - stop_frequency running segment othdiscr with 21 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 21 choosers\n", + "INFO - stop_frequency.othdiscr.simple_simulate Running adaptive_chunked_choosers with 21 choosers\n", "INFO - Running chunk 1 of 1 with 21 of 21 choosers\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.othdiscr.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.othdiscr.simple_simulate number_of_rows: 21 observed_row_size: 33 num_chunks: 1\n", "INFO - stop_frequency running segment atwork with 9 chooser rows\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 9 choosers\n", + "INFO - stop_frequency.atwork.simple_simulate Running adaptive_chunked_choosers with 9 choosers\n", "INFO - Running chunk 1 of 1 with 9 of 9 choosers\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.eval_utils.add.expression_values rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info stop_frequency.atwork.simple_simulate.eval_mnl.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers stop_frequency.atwork.simple_simulate number_of_rows: 9 observed_row_size: 32 num_chunks: 1\n", "INFO - stop_frequency top 10 value counts:\n", "0out_0in 157\n", "0out_1in 14\n", @@ -2259,3628 +865,649 @@ "1out_1in 4\n", "3out_0in 3\n", "1out_3in 2\n", - "2out_2in 1\n", "3out_1in 1\n", - "0out_3in 1\n", + "2out_0in 1\n", + "2out_2in 1\n", "dtype: int64\n", - "INFO - register trips: added 5 new ids to 0 existing trace ids\n", - "INFO - register trips: tracing new ids [615236801, 615236805, 615236865, 615236866, 615236869] in trips\n", - "INFO - trace_memory_info pipeline.run after stop_frequency rss: 0.15GB used: 7.39 GB percent: 46.6%\n", "INFO - #run_model running step trip_purpose\n", "INFO - assign purpose to 202 last outbound trips\n", "INFO - assign purpose to 202 last inbound trips\n", "INFO - assign purpose to 78 intermediate trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 78 choosers\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "INFO - trip_purpose Running adaptive_chunked_choosers with 78 choosers\n", "INFO - Running chunk 1 of 1 with 78 of 78 choosers\n", - "INFO - trace_memory_info trip_purpose.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_purpose number_of_rows: 78 observed_row_size: 30 num_chunks: 1\n", - "INFO - trace_memory_info pipeline.run after trip_purpose rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - #run_model running step trip_destination\n", "INFO - Running trip_destination with 482 trips\n", "INFO - Running trip_destination.trip_num_1 with 53 trips\n", "INFO - choose_trip_destination trip_destination.trip_num_1.atwork with 5 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - trip_destination.trip_num_1.atwork.sample.interaction_sample Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.38 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 125 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.atwork.trip_destination_sample.interaction_sample number_of_rows: 5 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.atwork.trip_destination_sample : 0.942 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.atwork.trip_destination_sample : 0.851 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.atwork.compute_logsums with 68 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 68 choosers\n", + "INFO - trip_destination.trip_num_1.atwork.compute_logsums.od Running adaptive_chunked_choosers with 68 choosers\n", "INFO - Running chunk 1 of 1 with 68 of 68 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.atwork.compute_logsums.od.simple_simulate_logsums number_of_rows: 68 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 68 choosers\n", + "INFO - trip_destination.trip_num_1.atwork.compute_logsums.dp Running adaptive_chunked_choosers with 68 choosers\n", "INFO - Running chunk 1 of 1 with 68 of 68 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.atwork.compute_logsums.dp.simple_simulate_logsums number_of_rows: 68 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.atwork.compute_logsums : 3.987 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.atwork.compute_logsums : 2.526 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 5 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 5 choosers and 68 alternatives\n", + "INFO - trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 5 choosers and 68 alternatives\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 68 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.atwork.trip_dest_simulate.interaction_sample_simulate number_of_rows: 5 observed_row_size: 286 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.atwork.trip_destination_simulate : 1.113 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.atwork.trip_destination_simulate : 0.771 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.eatout with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_1.eatout.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.eatout.trip_destination_sample : 1.285 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.eatout.trip_destination_sample : 1.016 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.eatout.compute_logsums with 15 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - trip_destination.trip_num_1.eatout.compute_logsums.od Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums number_of_rows: 15 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - trip_destination.trip_num_1.eatout.compute_logsums.dp Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums number_of_rows: 15 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.eatout.compute_logsums : 6.193 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.eatout.compute_logsums : 4.679 seconds (0.1 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 15 alternatives\n", + "INFO - trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 15 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 15 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 315 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.eatout.trip_destination_simulate : 1.697 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.eatout.trip_destination_simulate : 0.94 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.othdiscr with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_1.othdiscr.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othdiscr.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othdiscr.trip_destination_sample : 0.967 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othdiscr.trip_destination_sample : 0.833 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.othdiscr.compute_logsums with 15 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - trip_destination.trip_num_1.othdiscr.compute_logsums.od Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othdiscr.compute_logsums.od.simple_simulate_logsums number_of_rows: 15 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 15 choosers\n", + "INFO - trip_destination.trip_num_1.othdiscr.compute_logsums.dp Running adaptive_chunked_choosers with 15 choosers\n", "INFO - Running chunk 1 of 1 with 15 of 15 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othdiscr.compute_logsums.dp.simple_simulate_logsums number_of_rows: 15 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othdiscr.compute_logsums : 3.889 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othdiscr.compute_logsums : 2.883 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 15 alternatives\n", + "INFO - trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 15 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 15 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.othdiscr.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 315 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othdiscr.trip_destination_simulate : 1.261 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othdiscr.trip_destination_simulate : 0.896 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.othmaint with 3 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - trip_destination.trip_num_1.othmaint.sample.interaction_sample Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 75 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othmaint.trip_destination_sample.interaction_sample number_of_rows: 3 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othmaint.trip_destination_sample : 0.956 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othmaint.trip_destination_sample : 0.858 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.othmaint.compute_logsums with 45 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 45 choosers\n", + "INFO - trip_destination.trip_num_1.othmaint.compute_logsums.od Running adaptive_chunked_choosers with 45 choosers\n", "INFO - Running chunk 1 of 1 with 45 of 45 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othmaint.compute_logsums.od.simple_simulate_logsums number_of_rows: 45 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 45 choosers\n", + "INFO - trip_destination.trip_num_1.othmaint.compute_logsums.dp Running adaptive_chunked_choosers with 45 choosers\n", "INFO - Running chunk 1 of 1 with 45 of 45 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.othmaint.compute_logsums.dp.simple_simulate_logsums number_of_rows: 45 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othmaint.compute_logsums : 3.976 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othmaint.compute_logsums : 2.768 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 3 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 3 choosers and 45 alternatives\n", + "INFO - trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 3 choosers and 45 alternatives\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 45 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.othmaint.trip_dest_simulate.interaction_sample_simulate number_of_rows: 3 observed_row_size: 315 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.othmaint.trip_destination_simulate : 1.187 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.othmaint.trip_destination_simulate : 1.017 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.school with 3 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - trip_destination.trip_num_1.school.sample.interaction_sample Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 75 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.school.trip_destination_sample.interaction_sample number_of_rows: 3 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.school.trip_destination_sample : 0.91 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.school.trip_destination_sample : 1.661 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.school.compute_logsums with 42 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 42 choosers\n", + "INFO - trip_destination.trip_num_1.school.compute_logsums.od Running adaptive_chunked_choosers with 42 choosers\n", "INFO - Running chunk 1 of 1 with 42 of 42 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.school.compute_logsums.od.simple_simulate_logsums number_of_rows: 42 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 42 choosers\n", + "INFO - trip_destination.trip_num_1.school.compute_logsums.dp Running adaptive_chunked_choosers with 42 choosers\n", "INFO - Running chunk 1 of 1 with 42 of 42 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.school.compute_logsums.dp.simple_simulate_logsums number_of_rows: 42 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.school.compute_logsums : 4.02 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.school.compute_logsums : 2.932 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 3 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 3 choosers and 42 alternatives\n", + "INFO - trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 3 choosers and 42 alternatives\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 42 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.school.trip_dest_simulate.interaction_sample_simulate number_of_rows: 3 observed_row_size: 294 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.school.trip_destination_simulate : 1.208 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.school.trip_destination_simulate : 0.82 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.shopping with 10 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 10 choosers\n", + "INFO - trip_destination.trip_num_1.shopping.sample.interaction_sample Running adaptive_chunked_choosers with 10 choosers\n", "INFO - Running chunk 1 of 1 with 10 of 10 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 250 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.shopping.trip_destination_sample.interaction_sample number_of_rows: 10 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.shopping.trip_destination_sample : 0.997 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.shopping.trip_destination_sample : 1.053 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.shopping.compute_logsums with 124 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 124 choosers\n", + "INFO - trip_destination.trip_num_1.shopping.compute_logsums.od Running adaptive_chunked_choosers with 124 choosers\n", "INFO - Running chunk 1 of 1 with 124 of 124 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.shopping.compute_logsums.od.simple_simulate_logsums number_of_rows: 124 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 124 choosers\n", + "INFO - trip_destination.trip_num_1.shopping.compute_logsums.dp Running adaptive_chunked_choosers with 124 choosers\n", "INFO - Running chunk 1 of 1 with 124 of 124 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.shopping.compute_logsums.dp.simple_simulate_logsums number_of_rows: 124 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.shopping.compute_logsums : 4.115 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.shopping.compute_logsums : 2.508 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 10 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 10 choosers and 124 alternatives\n", + "INFO - trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 10 choosers and 124 alternatives\n", "INFO - Running chunk 1 of 1 with 10 of 10 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 124 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.shopping.trip_dest_simulate.interaction_sample_simulate number_of_rows: 10 observed_row_size: 261 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.shopping.trip_destination_simulate : 1.294 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.shopping.trip_destination_simulate : 0.716 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.social with 3 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 3 choosers\n", + "INFO - trip_destination.trip_num_1.social.sample.interaction_sample Running adaptive_chunked_choosers with 3 choosers\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", "INFO - Running eval_interaction_utilities on 75 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.social.trip_destination_sample.interaction_sample number_of_rows: 3 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.social.trip_destination_sample : 0.939 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.social.trip_destination_sample : 0.849 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.social.compute_logsums with 42 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 42 choosers\n", + "INFO - trip_destination.trip_num_1.social.compute_logsums.od Running adaptive_chunked_choosers with 42 choosers\n", "INFO - Running chunk 1 of 1 with 42 of 42 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.social.compute_logsums.od.simple_simulate_logsums number_of_rows: 42 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 42 choosers\n", + "INFO - trip_destination.trip_num_1.social.compute_logsums.dp Running adaptive_chunked_choosers with 42 choosers\n", "INFO - Running chunk 1 of 1 with 42 of 42 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.social.compute_logsums.dp.simple_simulate_logsums number_of_rows: 42 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.social.compute_logsums : 3.841 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.social.compute_logsums : 2.464 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 3 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 3 choosers and 42 alternatives\n", + "INFO - trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 3 choosers and 42 alternatives\n", "INFO - Running chunk 1 of 1 with 3 of 3 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 42 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.social.trip_dest_simulate.interaction_sample_simulate number_of_rows: 3 observed_row_size: 294 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.social.trip_destination_simulate : 1.15 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.social.trip_destination_simulate : 0.813 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.univ with 5 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - trip_destination.trip_num_1.univ.sample.interaction_sample Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.38 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 125 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.univ.trip_destination_sample.interaction_sample number_of_rows: 5 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.univ.trip_destination_sample : 0.912 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.univ.trip_destination_sample : 0.833 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.univ.compute_logsums with 74 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 74 choosers\n", + "INFO - trip_destination.trip_num_1.univ.compute_logsums.od Running adaptive_chunked_choosers with 74 choosers\n", "INFO - Running chunk 1 of 1 with 74 of 74 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.univ.compute_logsums.od.simple_simulate_logsums number_of_rows: 74 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 74 choosers\n", + "INFO - trip_destination.trip_num_1.univ.compute_logsums.dp Running adaptive_chunked_choosers with 74 choosers\n", "INFO - Running chunk 1 of 1 with 74 of 74 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.univ.compute_logsums.dp.simple_simulate_logsums number_of_rows: 74 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.univ.compute_logsums : 4.374 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.univ.compute_logsums : 2.904 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 5 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 5 choosers and 74 alternatives\n", + "INFO - trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 5 choosers and 74 alternatives\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 74 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.univ.trip_dest_simulate.interaction_sample_simulate number_of_rows: 5 observed_row_size: 311 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.univ.trip_destination_simulate : 1.26 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.univ.trip_destination_simulate : 0.738 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_1.work with 22 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 22 choosers\n", + "INFO - trip_destination.trip_num_1.work.sample.interaction_sample Running adaptive_chunked_choosers with 22 choosers\n", "INFO - Running chunk 1 of 1 with 22 of 22 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 550 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.work.trip_destination_sample.interaction_sample number_of_rows: 22 observed_row_size: 425 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.work.trip_destination_sample : 0.932 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.work.trip_destination_sample : 0.84 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_1.work.compute_logsums with 287 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 287 choosers\n", + "INFO - trip_destination.trip_num_1.work.compute_logsums.od Running adaptive_chunked_choosers with 287 choosers\n", "INFO - Running chunk 1 of 1 with 287 of 287 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.work.compute_logsums.od.simple_simulate_logsums number_of_rows: 287 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 287 choosers\n", + "INFO - trip_destination.trip_num_1.work.compute_logsums.dp Running adaptive_chunked_choosers with 287 choosers\n", "INFO - Running chunk 1 of 1 with 287 of 287 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_1.work.compute_logsums.dp.simple_simulate_logsums number_of_rows: 287 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.work.compute_logsums : 4.09 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.work.compute_logsums : 2.588 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 22 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 22 choosers and 287 alternatives\n", + "INFO - trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 22 choosers and 287 alternatives\n", "INFO - Running chunk 1 of 1 with 22 of 22 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 287 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_1.work.trip_dest_simulate.interaction_sample_simulate number_of_rows: 22 observed_row_size: 274 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_1.work.trip_destination_simulate : 1.148 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_1.work.trip_destination_simulate : 0.717 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2 with 18 trips\n", "INFO - choose_trip_destination trip_destination.trip_num_2.atwork with 2 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - trip_destination.trip_num_2.atwork.sample.interaction_sample Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 50 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.atwork.trip_destination_sample.interaction_sample number_of_rows: 2 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.atwork.trip_destination_sample : 0.844 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.atwork.trip_destination_sample : 0.87 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.atwork.compute_logsums with 23 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 23 choosers\n", + "INFO - trip_destination.trip_num_2.atwork.compute_logsums.od Running adaptive_chunked_choosers with 23 choosers\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.atwork.compute_logsums.od.simple_simulate_logsums number_of_rows: 23 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 23 choosers\n", + "INFO - trip_destination.trip_num_2.atwork.compute_logsums.dp Running adaptive_chunked_choosers with 23 choosers\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.atwork.compute_logsums.dp.simple_simulate_logsums number_of_rows: 23 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.atwork.compute_logsums : 3.778 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.atwork.compute_logsums : 2.592 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 2 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 23 alternatives\n", + "INFO - trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 23 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 23 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.atwork.trip_dest_simulate.interaction_sample_simulate number_of_rows: 2 observed_row_size: 253 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.atwork.trip_destination_simulate : 1.408 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.atwork.trip_destination_simulate : 0.894 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_2.othmaint with 2 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - trip_destination.trip_num_2.othmaint.sample.interaction_sample Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.47 GB percent: 47.1%\n", "INFO - Running eval_interaction_utilities on 50 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.47 GB percent: 47.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.othmaint.trip_destination_sample.interaction_sample number_of_rows: 2 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.othmaint.trip_destination_sample : 1.153 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.othmaint.trip_destination_sample : 0.931 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.othmaint.compute_logsums with 23 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 23 choosers\n", + "INFO - trip_destination.trip_num_2.othmaint.compute_logsums.od Running adaptive_chunked_choosers with 23 choosers\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.othmaint.compute_logsums.od.simple_simulate_logsums number_of_rows: 23 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 23 choosers\n", + "INFO - trip_destination.trip_num_2.othmaint.compute_logsums.dp Running adaptive_chunked_choosers with 23 choosers\n", "INFO - Running chunk 1 of 1 with 23 of 23 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.49 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.48 GB percent: 47.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.othmaint.compute_logsums.dp.simple_simulate_logsums number_of_rows: 23 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.othmaint.compute_logsums : 4.111 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.othmaint.compute_logsums : 2.954 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 2 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 23 alternatives\n", + "INFO - trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 23 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.48 GB percent: 47.2%\n", "INFO - Running eval_interaction_utilities on 23 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.othmaint.trip_dest_simulate.interaction_sample_simulate number_of_rows: 2 observed_row_size: 253 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.othmaint.trip_destination_simulate : 1.308 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.othmaint.trip_destination_simulate : 0.839 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_2.shopping with 5 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 5 choosers\n", + "INFO - trip_destination.trip_num_2.shopping.sample.interaction_sample Running adaptive_chunked_choosers with 5 choosers\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", "INFO - Running eval_interaction_utilities on 125 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.shopping.trip_destination_sample.interaction_sample number_of_rows: 5 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.shopping.trip_destination_sample : 0.976 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.shopping.trip_destination_sample : 1.035 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.shopping.compute_logsums with 69 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 69 choosers\n", + "INFO - trip_destination.trip_num_2.shopping.compute_logsums.od Running adaptive_chunked_choosers with 69 choosers\n", "INFO - Running chunk 1 of 1 with 69 of 69 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.shopping.compute_logsums.od.simple_simulate_logsums number_of_rows: 69 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 69 choosers\n", + "INFO - trip_destination.trip_num_2.shopping.compute_logsums.dp Running adaptive_chunked_choosers with 69 choosers\n", "INFO - Running chunk 1 of 1 with 69 of 69 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.shopping.compute_logsums.dp.simple_simulate_logsums number_of_rows: 69 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.shopping.compute_logsums : 3.756 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.shopping.compute_logsums : 2.623 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 5 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 5 choosers and 69 alternatives\n", + "INFO - trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 5 choosers and 69 alternatives\n", "INFO - Running chunk 1 of 1 with 5 of 5 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 69 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.shopping.trip_dest_simulate.interaction_sample_simulate number_of_rows: 5 observed_row_size: 304 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.shopping.trip_destination_simulate : 1.394 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.shopping.trip_destination_simulate : 0.717 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_2.social with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_2.social.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.social.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.social.trip_destination_sample : 0.884 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.social.trip_destination_sample : 0.84 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.social.compute_logsums with 10 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 10 choosers\n", + "INFO - trip_destination.trip_num_2.social.compute_logsums.od Running adaptive_chunked_choosers with 10 choosers\n", "INFO - Running chunk 1 of 1 with 10 of 10 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.social.compute_logsums.od.simple_simulate_logsums number_of_rows: 10 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 10 choosers\n", + "INFO - trip_destination.trip_num_2.social.compute_logsums.dp Running adaptive_chunked_choosers with 10 choosers\n", "INFO - Running chunk 1 of 1 with 10 of 10 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.social.compute_logsums.dp.simple_simulate_logsums number_of_rows: 10 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.social.compute_logsums : 3.615 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.social.compute_logsums : 2.36 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 10 alternatives\n", + "INFO - trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 10 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 10 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.social.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 220 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.social.trip_destination_simulate : 1.315 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.social.trip_destination_simulate : 0.869 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_2.univ with 2 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - trip_destination.trip_num_2.univ.sample.interaction_sample Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.43 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 50 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.univ.trip_destination_sample.interaction_sample number_of_rows: 2 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.univ.trip_destination_sample : 0.868 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.univ.trip_destination_sample : 0.954 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.univ.compute_logsums with 27 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 27 choosers\n", + "INFO - trip_destination.trip_num_2.univ.compute_logsums.od Running adaptive_chunked_choosers with 27 choosers\n", "INFO - Running chunk 1 of 1 with 27 of 27 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.univ.compute_logsums.od.simple_simulate_logsums number_of_rows: 27 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 27 choosers\n", + "INFO - trip_destination.trip_num_2.univ.compute_logsums.dp Running adaptive_chunked_choosers with 27 choosers\n", "INFO - Running chunk 1 of 1 with 27 of 27 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.univ.compute_logsums.dp.simple_simulate_logsums number_of_rows: 27 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.univ.compute_logsums : 3.772 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.univ.compute_logsums : 2.843 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 2 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 27 alternatives\n", + "INFO - trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 27 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 27 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.univ.trip_dest_simulate.interaction_sample_simulate number_of_rows: 2 observed_row_size: 297 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.univ.trip_destination_simulate : 1.149 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.univ.trip_destination_simulate : 0.717 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_2.work with 6 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 6 choosers\n", + "INFO - trip_destination.trip_num_2.work.sample.interaction_sample Running adaptive_chunked_choosers with 6 choosers\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", "INFO - Running eval_interaction_utilities on 150 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.work.trip_destination_sample.interaction_sample number_of_rows: 6 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.work.trip_destination_sample : 0.87 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.work.trip_destination_sample : 0.88 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_2.work.compute_logsums with 81 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 81 choosers\n", + "INFO - trip_destination.trip_num_2.work.compute_logsums.od Running adaptive_chunked_choosers with 81 choosers\n", "INFO - Running chunk 1 of 1 with 81 of 81 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.work.compute_logsums.od.simple_simulate_logsums number_of_rows: 81 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 81 choosers\n", + "INFO - trip_destination.trip_num_2.work.compute_logsums.dp Running adaptive_chunked_choosers with 81 choosers\n", "INFO - Running chunk 1 of 1 with 81 of 81 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_2.work.compute_logsums.dp.simple_simulate_logsums number_of_rows: 81 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.work.compute_logsums : 3.884 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.work.compute_logsums : 2.369 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 6 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 6 choosers and 81 alternatives\n", + "INFO - trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 6 choosers and 81 alternatives\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 81 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_2.work.trip_dest_simulate.interaction_sample_simulate number_of_rows: 6 observed_row_size: 297 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_2.work.trip_destination_simulate : 1.172 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_2.work.trip_destination_simulate : 0.798 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3 with 7 trips\n", "INFO - choose_trip_destination trip_destination.trip_num_3.atwork with 2 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - trip_destination.trip_num_3.atwork.sample.interaction_sample Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.38 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 50 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.atwork.trip_destination_sample.interaction_sample number_of_rows: 2 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.atwork.trip_destination_sample : 0.906 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.atwork.trip_destination_sample : 1.089 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3.atwork.compute_logsums with 29 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 29 choosers\n", + "INFO - trip_destination.trip_num_3.atwork.compute_logsums.od Running adaptive_chunked_choosers with 29 choosers\n", "INFO - Running chunk 1 of 1 with 29 of 29 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.atwork.compute_logsums.od.simple_simulate_logsums number_of_rows: 29 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 29 choosers\n", + "INFO - trip_destination.trip_num_3.atwork.compute_logsums.dp Running adaptive_chunked_choosers with 29 choosers\n", "INFO - Running chunk 1 of 1 with 29 of 29 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.atwork.compute_logsums.dp.simple_simulate_logsums number_of_rows: 29 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.atwork.compute_logsums : 3.636 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.atwork.compute_logsums : 3.065 seconds (0.1 minutes)\n", "INFO - Running trip_destination_simulate with 2 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 29 alternatives\n", + "INFO - trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 29 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", "INFO - Running eval_interaction_utilities on 29 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_3.atwork.trip_dest_simulate.interaction_sample_simulate number_of_rows: 2 observed_row_size: 319 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.atwork.trip_destination_simulate : 1.117 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.atwork.trip_destination_simulate : 0.789 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_3.othmaint with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_3.othmaint.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.38 GB percent: 46.5%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.othmaint.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.othmaint.trip_destination_sample : 1.283 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.othmaint.trip_destination_sample : 1.14 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3.othmaint.compute_logsums with 12 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 12 choosers\n", + "INFO - trip_destination.trip_num_3.othmaint.compute_logsums.od Running adaptive_chunked_choosers with 12 choosers\n", "INFO - Running chunk 1 of 1 with 12 of 12 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.othmaint.compute_logsums.od.simple_simulate_logsums number_of_rows: 12 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 12 choosers\n", + "INFO - trip_destination.trip_num_3.othmaint.compute_logsums.dp Running adaptive_chunked_choosers with 12 choosers\n", "INFO - Running chunk 1 of 1 with 12 of 12 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.othmaint.compute_logsums.dp.simple_simulate_logsums number_of_rows: 12 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.othmaint.compute_logsums : 4.441 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.othmaint.compute_logsums : 2.807 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 12 alternatives\n", + "INFO - trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 12 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 12 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_3.othmaint.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 264 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.othmaint.trip_destination_simulate : 1.4 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.othmaint.trip_destination_simulate : 0.919 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_3.social with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_3.social.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.social.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.social.trip_destination_sample : 1.036 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.social.trip_destination_sample : 0.982 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3.social.compute_logsums with 17 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - trip_destination.trip_num_3.social.compute_logsums.od Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.46 GB percent: 47.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.social.compute_logsums.od.simple_simulate_logsums number_of_rows: 17 observed_row_size: 375 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 17 choosers\n", + "INFO - trip_destination.trip_num_3.social.compute_logsums.dp Running adaptive_chunked_choosers with 17 choosers\n", "INFO - Running chunk 1 of 1 with 17 of 17 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.social.compute_logsums.dp.simple_simulate_logsums number_of_rows: 17 observed_row_size: 375 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.social.compute_logsums : 5.347 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.social.compute_logsums : 2.804 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 17 alternatives\n", + "INFO - trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 17 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 17 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_3.social.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 374 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.social.trip_destination_simulate : 1.662 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.social.trip_destination_simulate : 0.808 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_3.univ with 1 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 1 choosers\n", + "INFO - trip_destination.trip_num_3.univ.sample.interaction_sample Running adaptive_chunked_choosers with 1 choosers\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", "INFO - Running eval_interaction_utilities on 25 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.probs rss: 0.15GB used: 7.46 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.del.utilities rss: 0.15GB used: 7.45 GB percent: 47.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.del.probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample.add.choices_df rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.univ.trip_destination_sample.interaction_sample number_of_rows: 1 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.univ.trip_destination_sample : 0.938 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.univ.trip_destination_sample : 0.899 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3.univ.compute_logsums with 14 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 14 choosers\n", + "INFO - trip_destination.trip_num_3.univ.compute_logsums.od Running adaptive_chunked_choosers with 14 choosers\n", "INFO - Running chunk 1 of 1 with 14 of 14 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.3 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.univ.compute_logsums.od.simple_simulate_logsums number_of_rows: 14 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 14 choosers\n", + "INFO - trip_destination.trip_num_3.univ.compute_logsums.dp Running adaptive_chunked_choosers with 14 choosers\n", "INFO - Running chunk 1 of 1 with 14 of 14 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.14GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.14GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.14GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.14GB used: 7.35 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.univ.compute_logsums.dp.simple_simulate_logsums number_of_rows: 14 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.univ.compute_logsums : 4.502 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.univ.compute_logsums : 2.826 seconds (0.0 minutes)\n", "INFO - Running trip_destination_simulate with 1 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 1 choosers and 14 alternatives\n", + "INFO - trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 1 choosers and 14 alternatives\n", "INFO - Running chunk 1 of 1 with 1 of 1 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.14GB used: 7.32 GB percent: 46.2%\n", "INFO - Running eval_interaction_utilities on 14 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.14GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.14GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_3.univ.trip_dest_simulate.interaction_sample_simulate number_of_rows: 1 observed_row_size: 308 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.univ.trip_destination_simulate : 1.277 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.univ.trip_destination_simulate : 0.722 seconds (0.0 minutes)\n", "INFO - choose_trip_destination trip_destination.trip_num_3.work with 2 trips\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 2 choosers\n", + "INFO - trip_destination.trip_num_3.work.sample.interaction_sample Running adaptive_chunked_choosers with 2 choosers\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.interaction_df rss: 0.14GB used: 7.33 GB percent: 46.2%\n", "INFO - Running eval_interaction_utilities on 50 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.interaction_utilities rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.del.interaction_df rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.utilities rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.del.interaction_utilities rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.probs rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.del.utilities rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.del.probs rss: 0.14GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample.add.choices_df rss: 0.14GB used: 7.3 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.work.trip_destination_sample.interaction_sample number_of_rows: 2 observed_row_size: 450 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.work.trip_destination_sample : 1.074 seconds (0.0 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.work.trip_destination_sample : 0.91 seconds (0.0 minutes)\n", "INFO - Running trip_destination.trip_num_3.work.compute_logsums with 28 samples\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 28 choosers\n", + "INFO - trip_destination.trip_num_3.work.compute_logsums.od Running adaptive_chunked_choosers with 28 choosers\n", "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.work.compute_logsums.od.simple_simulate_logsums number_of_rows: 28 observed_row_size: 349 num_chunks: 1\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 28 choosers\n", + "INFO - trip_destination.trip_num_3.work.compute_logsums.dp Running adaptive_chunked_choosers with 28 choosers\n", "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.expression_values rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.add.utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.expression_values rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.del.utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.raw_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.nested_exp_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.raw_utilities rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.add.logsums rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.del.nested_exp_utilities rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_destination.trip_num_3.work.compute_logsums.dp.simple_simulate_logsums number_of_rows: 28 observed_row_size: 349 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.work.compute_logsums : 4.595 seconds (0.1 minutes)\n", + "INFO - Time to execute trip_destination.trip_num_3.work.compute_logsums : 3.015 seconds (0.1 minutes)\n", "INFO - Running trip_destination_simulate with 2 trips\n", - "INFO - Running adaptive_chunked_choosers_and_alts with chunk_size 0 and 2 choosers and 28 alternatives\n", + "INFO - trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate Running adaptive_chunked_choosers_and_alts with 2 choosers and 28 alternatives\n", "INFO - Running chunk 1 of 1 with 2 of 2 choosers\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_df rss: 0.15GB used: 7.3 GB percent: 46.0%\n", "INFO - Running eval_interaction_utilities on 28 rows\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.interaction_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_df rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.sample_counts rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.sample_counts rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.padded_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.interaction_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.utilities_df rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.padded_utilities rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.logsums rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.utilities_df rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.positions rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.rands rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.del.probs rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate.add.choices rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_and_alts trip_destination.trip_num_3.work.trip_dest_simulate.interaction_sample_simulate number_of_rows: 2 observed_row_size: 308 num_chunks: 1\n", - "INFO - Time to execute trip_destination.trip_num_3.work.trip_destination_simulate : 1.249 seconds (0.0 minutes)\n", - "INFO - trace_memory_info pipeline.run after trip_destination rss: 0.15GB used: 7.29 GB percent: 46.0%\n", + "INFO - Time to execute trip_destination.trip_num_3.work.trip_destination_simulate : 0.732 seconds (0.0 minutes)\n", "INFO - #run_model running step trip_purpose_and_destination\n", "INFO - trip_purpose_and_destination - no failed trips from prior model run.\n", - "INFO - trace_memory_info pipeline.run after trip_purpose_and_destination rss: 0.15GB used: 7.29 GB percent: 46.0%\n", "INFO - #run_model running step trip_scheduling\n", "INFO - trip_scheduling.i1 scheduling 482 trips\n", - "INFO - Running chunk 1 of 1 with 202 of 202 choosers\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.choosers rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.choices rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.rands rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_2.add.failed rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.choosers rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.choices rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.rands rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_3.add.failed rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.choosers rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.choices rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.rands rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.outbound.num_4.add.failed rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.choosers rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.choices rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.rands rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_1.add.failed rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.choosers rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.choices rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.rands rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_2.add.failed rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.choosers rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.choices rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.rands rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i1.inbound.num_3.add.failed rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i1 number_of_rows: 202 observed_row_size: 9 num_chunks: 1\n", + "INFO - trip_scheduling.i1 Running chunk 1 of 1 with 202 of 202 choosers\n", "INFO - trip_scheduling.i1 5 failed\n", "INFO - trip_scheduling.i2 scheduling 14 trips\n", - "INFO - Running chunk 1 of 1 with 148 of 148 choosers\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.choices rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.rands rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_2.add.failed rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.choices rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.rands rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_3.add.failed rss: 0.15GB used: 7.29 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.choices rss: 0.15GB used: 7.3 GB percent: 46.0%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.rands rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.outbound.num_4.add.failed rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.choices rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.rands rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_1.add.failed rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.choices rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.rands rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i2.inbound.num_2.add.failed rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i2 number_of_rows: 148 observed_row_size: 2 num_chunks: 1\n", + "INFO - trip_scheduling.i2 Running chunk 1 of 1 with 148 of 148 choosers\n", "INFO - trip_scheduling.i2 3 failed\n", "INFO - trip_scheduling.i3 scheduling 7 trips\n", - "INFO - Running chunk 1 of 1 with 55 of 55 choosers\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.choosers rss: 0.15GB used: 7.3 GB percent: 46.0%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.choices rss: 0.15GB used: 7.3 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.rands rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_2.add.failed rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.choosers rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.choices rss: 0.15GB used: 7.32 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.rands rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_3.add.failed rss: 0.15GB used: 7.31 GB percent: 46.1%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.choosers rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_1.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i3.inbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i3 number_of_rows: 55 observed_row_size: 2 num_chunks: 1\n", + "INFO - trip_scheduling.i3 Running chunk 1 of 1 with 55 of 55 choosers\n", "INFO - trip_scheduling.i3 2 failed\n", "INFO - trip_scheduling.i4 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_3.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i4.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i4 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i4 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i4 2 failed\n", "INFO - trip_scheduling.i5 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_3.add.failed rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i5.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i5 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i5 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i5 2 failed\n", "INFO - trip_scheduling.i6 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_3.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i6.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i6 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i6 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i6 2 failed\n", "INFO - trip_scheduling.i7 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.rands rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i7.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i7 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i7 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i7 2 failed\n", "INFO - trip_scheduling.i8 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_3.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i8.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i8 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i8 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i8 2 failed\n", "INFO - trip_scheduling.i9 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_2.add.failed rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i9.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i9 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i9 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i9 2 failed\n", "INFO - trip_scheduling.i10 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_2.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_3.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i10.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i10 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i10 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i10 2 failed\n", "INFO - trip_scheduling.i11 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_2.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_3.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i11.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i11 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i11 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i11 2 failed\n", "INFO - trip_scheduling.i12 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_2.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i12.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i12 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", - "INFO - trip_scheduling.i12 2 failed\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "INFO - trip_scheduling.i12 Running chunk 1 of 1 with 28 of 28 choosers\n", + "INFO - trip_scheduling.i12 2 failed\n", "INFO - trip_scheduling.i13 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i13.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i13 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i13 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i13 2 failed\n", "INFO - trip_scheduling.i14 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i14.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i14 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i14 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i14 2 failed\n", "INFO - trip_scheduling.i15 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i15.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i15 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i15 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i15 2 failed\n", "INFO - trip_scheduling.i16 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_3.add.failed rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.choosers rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.choices rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i16.outbound.num_4.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i16 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i16 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i16 2 failed\n", "INFO - trip_scheduling.i17 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_2.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_3.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i17.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i17 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i17 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i17 2 failed\n", "INFO - trip_scheduling.i18 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_3.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i18.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i18 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i18 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i18 2 failed\n", "INFO - trip_scheduling.i19 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_3.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i19.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i19 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i19 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i19 2 failed\n", "INFO - trip_scheduling.i20 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_3.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i20.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i20 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i20 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i20 2 failed\n", "INFO - trip_scheduling.i21 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_2.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_3.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i21.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i21 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i21 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i21 2 failed\n", "INFO - trip_scheduling.i22 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_2.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_3.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i22.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i22 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i22 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i22 2 failed\n", "INFO - trip_scheduling.i23 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_3.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i23.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i23 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i23 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i23 2 failed\n", "INFO - trip_scheduling.i24 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i24.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i24 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i24 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i24 2 failed\n", "INFO - trip_scheduling.i25 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i25.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i25 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i25 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i25 2 failed\n", "INFO - trip_scheduling.i26 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i26.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i26 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i26 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i26 2 failed\n", "INFO - trip_scheduling.i27 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i27.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i27 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i27 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i27 2 failed\n", "INFO - trip_scheduling.i28 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_2.add.failed rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_3.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i28.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i28 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i28 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i28 2 failed\n", "INFO - trip_scheduling.i29 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_3.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i29.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i29 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i29 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i29 2 failed\n", "INFO - trip_scheduling.i30 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_2.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i30.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i30 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i30 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i30 2 failed\n", "INFO - trip_scheduling.i31 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i31.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i31 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i31 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i31 2 failed\n", "INFO - trip_scheduling.i32 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_2.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i32.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i32 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i32 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i32 2 failed\n", "INFO - trip_scheduling.i33 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.choices rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i33.outbound.num_4.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i33 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i33 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i33 2 failed\n", "INFO - trip_scheduling.i34 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.choosers rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.choices rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.rands rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i34.outbound.num_4.add.failed rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i34 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i34 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i34 2 failed\n", "INFO - trip_scheduling.i35 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i35.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i35 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i35 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i35 2 failed\n", "INFO - trip_scheduling.i36 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.choices rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.rands rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_2.add.failed rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.rands rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.choices rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i36.outbound.num_4.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i36 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i36 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i36 2 failed\n", "INFO - trip_scheduling.i37 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_2.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.choices rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.rands rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_3.add.failed rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.choices rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.rands rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i37.outbound.num_4.add.failed rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i37 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i37 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i37 2 failed\n", "INFO - trip_scheduling.i38 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.choices rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.rands rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i38.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i38 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i38 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i38 2 failed\n", "INFO - trip_scheduling.i39 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.choices rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.rands rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i39.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i39 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i39 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i39 2 failed\n", "INFO - trip_scheduling.i40 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_2.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i40.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i40 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i40 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i40 2 failed\n", "INFO - trip_scheduling.i41 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_3.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i41.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i41 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i41 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i41 2 failed\n", "INFO - trip_scheduling.i42 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i42.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i42 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i42 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i42 2 failed\n", "INFO - trip_scheduling.i43 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_3.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i43.outbound.num_4.add.failed rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i43 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i43 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i43 2 failed\n", "INFO - trip_scheduling.i44 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i44.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i44 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i44 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i44 2 failed\n", "INFO - trip_scheduling.i45 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.choices rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i45.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i45 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i45 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i45 2 failed\n", "INFO - trip_scheduling.i46 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_3.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.rands rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i46.outbound.num_4.add.failed rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i46 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i46 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i46 2 failed\n", "INFO - trip_scheduling.i47 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_2.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_3.add.failed rss: 0.15GB used: 7.35 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.choices rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.rands rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i47.outbound.num_4.add.failed rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i47 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i47 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i47 2 failed\n", "INFO - trip_scheduling.i48 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.choosers rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.36 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_2.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.rands rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_3.add.failed rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.choosers rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.choices rss: 0.15GB used: 7.35 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i48.outbound.num_4.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i48 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i48 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i48 2 failed\n", "INFO - trip_scheduling.i49 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i49.outbound.num_4.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i49 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i49 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i49 2 failed\n", "INFO - trip_scheduling.i50 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.choosers rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_3.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.choices rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i50.outbound.num_4.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i50 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i50 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i50 2 failed\n", "INFO - trip_scheduling.i51 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_2.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.choosers rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.rands rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_3.add.failed rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.choosers rss: 0.15GB used: 7.32 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.choices rss: 0.15GB used: 7.33 GB percent: 46.2%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.rands rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - trace_memory_info trip_scheduling.i51.outbound.num_4.add.failed rss: 0.15GB used: 7.34 GB percent: 46.3%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i51 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i51 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i51 2 failed\n", "INFO - trip_scheduling.i52 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.choosers rss: 0.15GB used: 7.37 GB percent: 46.4%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.37 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_3.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.rands rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i52.outbound.num_4.add.failed rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i52 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i52 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i52 2 failed\n", "INFO - trip_scheduling.i53 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.choices rss: 0.15GB used: 7.38 GB percent: 46.5%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.rands rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_2.add.failed rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.choosers rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.choices rss: 0.15GB used: 7.38 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.rands rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_3.add.failed rss: 0.15GB used: 7.39 GB percent: 46.6%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.choices rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.rands rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i53.outbound.num_4.add.failed rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i53 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i53 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i53 2 failed\n", "INFO - trip_scheduling.i54 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.choices rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.rands rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_2.add.failed rss: 0.15GB used: 7.41 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.choosers rss: 0.15GB used: 7.41 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.choices rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.rands rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_3.add.failed rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.choosers rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.choices rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.rands rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i54.outbound.num_4.add.failed rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i54 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i54 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i54 2 failed\n", "INFO - trip_scheduling.i55 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.choosers rss: 0.15GB used: 7.44 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_2.add.failed rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.choosers rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_3.add.failed rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.choosers rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.4 GB percent: 46.7%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i55.outbound.num_4.add.failed rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i55 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i55 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i55 2 failed\n", "INFO - trip_scheduling.i56 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.choosers rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_2.add.failed rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.choosers rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.choices rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.rands rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_3.add.failed rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.choosers rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.choices rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.rands rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i56.outbound.num_4.add.failed rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i56 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i56 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i56 2 failed\n", "INFO - trip_scheduling.i57 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.choosers rss: 0.15GB used: 7.43 GB percent: 46.9%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.43 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.choices rss: 0.15GB used: 7.42 GB percent: 46.8%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.rands rss: 0.15GB used: 7.28 GB percent: 45.9%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_2.add.failed rss: 0.15GB used: 7.17 GB percent: 45.2%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.choosers rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.choices rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.rands rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_3.add.failed rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.choosers rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.chooser_probs rss: 0.15GB used: 7.14 GB percent: 45.0%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.choices rss: 0.15GB used: 7.14 GB percent: 45.0%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.rands rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i57.outbound.num_4.add.failed rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i57 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i57 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i57 2 failed\n", "INFO - trip_scheduling.i58 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.choosers rss: 0.15GB used: 7.15 GB percent: 45.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.chooser_probs rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.choices rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.rands rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_2.add.failed rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.choosers rss: 0.15GB used: 7.01 GB percent: 44.2%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.rands rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_3.add.failed rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i58.outbound.num_4.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i58 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i58 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i58 2 failed\n", "INFO - trip_scheduling.i59 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_2.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_3.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i59.outbound.num_4.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i59 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i59 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i59 2 failed\n", "INFO - trip_scheduling.i60 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_2.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_3.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i60.outbound.num_4.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i60 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i60 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i60 2 failed\n", "INFO - trip_scheduling.i61 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_2.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.choices rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_3.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i61.outbound.num_4.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i61 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i61 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i61 2 failed\n", "INFO - trip_scheduling.i62 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.rands rss: 0.15GB used: 6.99 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_2.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_3.add.failed rss: 0.15GB used: 6.99 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i62.outbound.num_4.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i62 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i62 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i62 2 failed\n", "INFO - trip_scheduling.i63 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.rands rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_2.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_3.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i63.outbound.num_4.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i63 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i63 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i63 2 failed\n", "INFO - trip_scheduling.i64 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_2.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_3.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.choices rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.rands rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i64.outbound.num_4.add.failed rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i64 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i64 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i64 2 failed\n", "INFO - trip_scheduling.i65 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.choosers rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.choices rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.rands rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_2.add.failed rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.choosers rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_3.add.failed rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.choosers rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.choices rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i65.outbound.num_4.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i65 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i65 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i65 2 failed\n", "INFO - trip_scheduling.i66 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_2.add.failed rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.choosers rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.choices rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_3.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.choosers rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i66.outbound.num_4.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i66 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i66 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i66 2 failed\n", "INFO - trip_scheduling.i67 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_2.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.choosers rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_3.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i67.outbound.num_4.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i67 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i67 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i67 2 failed\n", "INFO - trip_scheduling.i68 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_2.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.choices rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_3.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i68.outbound.num_4.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i68 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i68 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i68 2 failed\n", "INFO - trip_scheduling.i69 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_2.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_3.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.choices rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i69.outbound.num_4.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i69 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i69 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i69 2 failed\n", "INFO - trip_scheduling.i70 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.choosers rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.choices rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_2.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.choices rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.rands rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_3.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.choosers rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i70.outbound.num_4.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i70 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i70 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i70 2 failed\n", "INFO - trip_scheduling.i71 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.rands rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_2.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_3.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i71.outbound.num_4.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i71 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i71 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i71 2 failed\n", "INFO - trip_scheduling.i72 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_2.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_3.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i72.outbound.num_4.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i72 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i72 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i72 2 failed\n", "INFO - trip_scheduling.i73 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.choices rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.rands rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_2.add.failed rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.choices rss: 0.15GB used: 6.97 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.rands rss: 0.15GB used: 6.99 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_3.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.choosers rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.choices rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.rands rss: 0.15GB used: 6.98 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i73.outbound.num_4.add.failed rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i73 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i73 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i73 2 failed\n", "INFO - trip_scheduling.i74 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.choices rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_2.add.failed rss: 0.15GB used: 6.97 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.0%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.chooser_probs rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.choices rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.rands rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_3.add.failed rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.choosers rss: 0.15GB used: 7.0 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.choices rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i74.outbound.num_4.add.failed rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i74 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i74 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i74 2 failed\n", "INFO - trip_scheduling.i75 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.choosers rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.choices rss: 0.15GB used: 6.99 GB percent: 44.1%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_2.add.failed rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.choices rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.rands rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_3.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.choosers rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.choices rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.rands rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i75.outbound.num_4.add.failed rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i75 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i75 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i75 2 failed\n", "INFO - trip_scheduling.i76 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.choosers rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.96 GB percent: 43.9%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.choices rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.rands rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_2.add.failed rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.choosers rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.choices rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.rands rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_3.add.failed rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.choosers rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.choices rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.rands rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i76.outbound.num_4.add.failed rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i76 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i76 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i76 2 failed\n", "INFO - trip_scheduling.i77 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.choosers rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.choices rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.rands rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_2.add.failed rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.choosers rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.choices rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.rands rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i77.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i77 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i77 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i77 2 failed\n", "INFO - trip_scheduling.i78 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i78.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i78 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i78 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i78 2 failed\n", "INFO - trip_scheduling.i79 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i79.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i79 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i79 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i79 2 failed\n", "INFO - trip_scheduling.i80 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i80.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i80 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i80 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i80 2 failed\n", "INFO - trip_scheduling.i81 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i81.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i81 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i81 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i81 2 failed\n", "INFO - trip_scheduling.i82 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i82.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i82 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i82 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i82 2 failed\n", "INFO - trip_scheduling.i83 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i83.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i83 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i83 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i83 2 failed\n", "INFO - trip_scheduling.i84 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i84.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i84 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i84 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i84 2 failed\n", "INFO - trip_scheduling.i85 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i85.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i85 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i85 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i85 2 failed\n", "INFO - trip_scheduling.i86 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i86.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i86 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i86 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i86 2 failed\n", "INFO - trip_scheduling.i87 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i87.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i87 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i87 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i87 2 failed\n", "INFO - trip_scheduling.i88 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i88.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i88 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i88 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i88 2 failed\n", "INFO - trip_scheduling.i89 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.choices rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.rands rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i89.outbound.num_4.add.failed rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i89 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i89 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i89 2 failed\n", "INFO - trip_scheduling.i90 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.choosers rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.choices rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i90.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i90 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i90 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i90 2 failed\n", "INFO - trip_scheduling.i91 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_3.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i91.outbound.num_4.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i91 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i91 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i91 2 failed\n", "INFO - trip_scheduling.i92 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.rands rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_2.add.failed rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.choosers rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.choices rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i92.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i92 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i92 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i92 2 failed\n", "INFO - trip_scheduling.i93 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i93.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i93 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i93 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i93 2 failed\n", "INFO - trip_scheduling.i94 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i94.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i94 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i94 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i94 2 failed\n", "INFO - trip_scheduling.i95 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i95.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i95 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i95 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i95 2 failed\n", "INFO - trip_scheduling.i96 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i96.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i96 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i96 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i96 2 failed\n", "INFO - trip_scheduling.i97 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i97.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i97 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i97 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i97 2 failed\n", "INFO - trip_scheduling.i98 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_2.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i98.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i98 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i98 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i98 2 failed\n", "INFO - trip_scheduling.i99 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.choices rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.rands rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_2.add.failed rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.choosers rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i99.outbound.num_4.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i99 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", + "INFO - trip_scheduling.i99 Running chunk 1 of 1 with 28 of 28 choosers\n", "INFO - trip_scheduling.i99 2 failed\n", "INFO - trip_scheduling.i100 scheduling 4 trips\n", - "INFO - Running chunk 1 of 1 with 28 of 28 choosers\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.choices rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.rands rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_2.add.failed rss: 0.15GB used: 6.89 GB percent: 43.5%\n", + "INFO - trip_scheduling.i100 Running chunk 1 of 1 with 28 of 28 choosers\n", "WARNING - trip_scheduling.i100.outbound.num_2 coercing 0 depart choices to most initial\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.choices rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.rands rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_3.add.failed rss: 0.15GB used: 6.9 GB percent: 43.5%\n", "INFO - dumping trip_scheduling.i100.outbound.num_3.failed_choosers\n", "WARNING - trip_scheduling.i100.outbound.num_3 coercing 1 depart choices to most initial\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.choosers rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.chooser_probs rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.choices rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.rands rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_scheduling.i100.outbound.num_4.add.failed rss: 0.15GB used: 6.89 GB percent: 43.5%\n", "INFO - dumping trip_scheduling.i100.outbound.num_4.failed_choosers\n", "WARNING - trip_scheduling.i100.outbound.num_4 coercing 1 depart choices to most initial\n", - "INFO - #chunk_history adaptive_chunked_choosers_by_chunk_id trip_scheduling.i100 number_of_rows: 28 observed_row_size: 3 num_chunks: 1\n", "INFO - trip_scheduling.i100 0 failed\n", - "INFO - trace_memory_info pipeline.run after trip_scheduling rss: 0.15GB used: 6.9 GB percent: 43.5%\n", "INFO - #run_model running step trip_mode_choice\n", "INFO - Running trip_mode_choice with 482 trips\n", "INFO - primary_purpose top 10 value counts:\n", @@ -5896,189 +1523,43 @@ "escort 6\n", "Name: primary_purpose, dtype: int64\n", "INFO - trip_mode_choice tour_type 'atwork' (27 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 27 choosers\n", + "INFO - trip_mode_choice.atwork.simple_simulate Running adaptive_chunked_choosers with 27 choosers\n", "INFO - Running chunk 1 of 1 with 27 of 27 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 27 observed_row_size: 349 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.atwork.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'eatout' (33 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 33 choosers\n", + "INFO - trip_mode_choice.eatout.simple_simulate Running adaptive_chunked_choosers with 33 choosers\n", "INFO - Running chunk 1 of 1 with 33 of 33 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 33 observed_row_size: 375 num_chunks: 1\n", "INFO - trip_mode_choice tour_type 'escort' (6 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 6 choosers\n", + "INFO - trip_mode_choice.escort.simple_simulate Running adaptive_chunked_choosers with 6 choosers\n", "INFO - Running chunk 1 of 1 with 6 of 6 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 6 observed_row_size: 345 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.escort.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'othdiscr' (43 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 43 choosers\n", + "INFO - trip_mode_choice.othdiscr.simple_simulate Running adaptive_chunked_choosers with 43 choosers\n", "INFO - Running chunk 1 of 1 with 43 of 43 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.9 GB percent: 43.5%\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 43 observed_row_size: 375 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.othdiscr.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'othmaint' (46 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 46 choosers\n", + "INFO - trip_mode_choice.othmaint.simple_simulate Running adaptive_chunked_choosers with 46 choosers\n", "INFO - Running chunk 1 of 1 with 46 of 46 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.92 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.91 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.88 GB percent: 43.4%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.88 GB percent: 43.4%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.88 GB percent: 43.4%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.89 GB percent: 43.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 46 observed_row_size: 375 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.othmaint.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'school' (37 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 37 choosers\n", + "INFO - trip_mode_choice.school.simple_simulate Running adaptive_chunked_choosers with 37 choosers\n", "INFO - Running chunk 1 of 1 with 37 of 37 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.89 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.91 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.9 GB percent: 43.5%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.92 GB percent: 43.6%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 37 observed_row_size: 349 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.school.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'shopping' (77 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 77 choosers\n", + "INFO - trip_mode_choice.shopping.simple_simulate Running adaptive_chunked_choosers with 77 choosers\n", "INFO - Running chunk 1 of 1 with 77 of 77 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 77 observed_row_size: 375 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.shopping.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'social' (19 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 19 choosers\n", + "INFO - trip_mode_choice.social.simple_simulate Running adaptive_chunked_choosers with 19 choosers\n", "INFO - Running chunk 1 of 1 with 19 of 19 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.95 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.93 GB percent: 43.7%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 19 observed_row_size: 375 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.social.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'univ' (26 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 26 choosers\n", + "INFO - trip_mode_choice.univ.simple_simulate Running adaptive_chunked_choosers with 26 choosers\n", "INFO - Running chunk 1 of 1 with 26 of 26 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.94 GB percent: 43.8%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 26 observed_row_size: 349 num_chunks: 1\n", "WARNING - slice_canonically: no rows in trip_mode_choice.univ.trip_mode with household_id == [982875]\n", "INFO - trip_mode_choice tour_type 'work' (168 trips)\n", - "INFO - Running adaptive_chunked_choosers with chunk_size 0 and 168 choosers\n", + "INFO - trip_mode_choice.work.simple_simulate Running adaptive_chunked_choosers with 168 choosers\n", "INFO - Running chunk 1 of 1 with 168 of 168 choosers\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.expression_values rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.add.utilities rss: 0.15GB used: 6.94 GB percent: 43.7%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.expression_values rss: 0.15GB used: 6.83 GB percent: 43.1%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.eval_utils.del.utilities rss: 0.15GB used: 6.86 GB percent: 43.3%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.raw_utilities rss: 0.15GB used: 6.86 GB percent: 43.3%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_exp_utilities rss: 0.15GB used: 6.85 GB percent: 43.2%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.raw_utilities rss: 0.15GB used: 6.86 GB percent: 43.2%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.nested_probabilities rss: 0.15GB used: 6.83 GB percent: 43.1%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.logsums rss: 0.15GB used: 6.85 GB percent: 43.2%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_exp_utilities rss: 0.15GB used: 6.87 GB percent: 43.3%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.add.base_probabilities rss: 0.15GB used: 6.82 GB percent: 43.0%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.nested_probabilities rss: 0.15GB used: 6.84 GB percent: 43.1%\n", - "INFO - trace_memory_info trip_mode_choice.simple_simulate.eval_nl.del.base_probabilities rss: 0.15GB used: 6.88 GB percent: 43.4%\n", - "INFO - #chunk_history adaptive_chunked_choosers trip_mode_choice.simple_simulate number_of_rows: 168 observed_row_size: 349 num_chunks: 1\n", "INFO - trip_modes top 10 value counts:\n", "WALK 211\n", "WALK_LRF 80\n", @@ -6088,165 +1569,47 @@ "BIKE 18\n", "TAXI 15\n", "WALK_HVY 14\n", - "SHARED2FREE 6\n", "SHARED3FREE 6\n", + "SHARED2FREE 6\n", "Name: tour_mode, dtype: int64\n", "INFO - trip_mode_choice choices top 10 value counts:\n", "WALK 304\n", "WALK_LOC 85\n", "WALK_LRF 53\n", "BIKE 17\n", - "SHARED2FREE 4\n", - "WALK_HVY 4\n", - "TNC_SINGLE 4\n", "TNC_SHARED 4\n", "DRIVEALONEFREE 4\n", + "WALK_HVY 4\n", + "TNC_SINGLE 4\n", + "SHARED2FREE 4\n", "TAXI 2\n", "Name: trip_mode, dtype: int64\n", - "INFO - trace_memory_info pipeline.run after trip_mode_choice rss: 0.15GB used: 6.85 GB percent: 43.2%\n", "INFO - #run_model running step write_data_dictionary\n", - "INFO - trace_memory_info pipeline.run after write_data_dictionary rss: 0.15GB used: 6.83 GB percent: 43.1%\n", "INFO - #run_model running step track_skim_usage\n", - "INFO - trace_memory_info pipeline.run after track_skim_usage rss: 0.15GB used: 6.83 GB percent: 43.1%\n", "INFO - #run_model running step write_trip_matrices\n", "INFO - adding 'sample_rate' from households to trips table\n", "INFO - aggregating trips one zone...\n", "INFO - opening output\\trips_ea.omx\n", - "INFO - writing DRIVEALONEFREE_EA sum 0.00\n", - "INFO - writing DRIVEALONEPAY_EA sum 0.00\n", - "INFO - writing SHARED2FREE_EA sum 0.00\n", - "INFO - writing SHARED2PAY_EA sum 0.00\n", - "INFO - writing SHARED3FREE_EA sum 0.00\n", - "INFO - writing SHARED3PAY_EA sum 0.00\n", - "INFO - writing WALK_EA sum 50.00\n", - "INFO - writing BIKE_EA sum 50.00\n", - "INFO - writing WALK_LOC_WALK_EA sum 50.00\n", - "INFO - writing WALK_LRF_WALK_EA sum 0.00\n", - "INFO - writing WALK_EXP_WALK_EA sum 0.00\n", - "INFO - writing WALK_HVY_WALK_EA sum 0.00\n", - "INFO - writing WALK_COM_WALK_EA sum 0.00\n", - "INFO - writing DRIVE_LOC_WALK_EA sum 0.00\n", - "INFO - writing DRIVE_LRF_WALK_EA sum 0.00\n", - "INFO - writing DRIVE_EXP_WALK_EA sum 0.00\n", - "INFO - writing DRIVE_HVY_WALK_EA sum 0.00\n", - "INFO - writing DRIVE_COM_WALK_EA sum 0.00\n", - "INFO - writing WALK_LOC_DRIVE_EA sum 0.00\n", - "INFO - writing WALK_LRF_DRIVE_EA sum 0.00\n", - "INFO - writing WALK_EXP_DRIVE_EA sum 0.00\n", - "INFO - writing WALK_DRIVE_HVY_EA sum 0.00\n", - "INFO - writing WALK_COM_DRIVE_EA sum 0.00\n", "INFO - adding zone_id mapping for 25 zones to trips_ea.omx\n", "INFO - closing output\\trips_ea.omx\n", "INFO - opening output\\trips_am.omx\n", - "INFO - writing DRIVEALONEFREE_AM sum 50.00\n", - "INFO - writing DRIVEALONEPAY_AM sum 0.00\n", - "INFO - writing SHARED2FREE_AM sum 150.00\n", - "INFO - writing SHARED2PAY_AM sum 0.00\n", - "INFO - writing SHARED3FREE_AM sum 0.00\n", - "INFO - writing SHARED3PAY_AM sum 0.00\n", - "INFO - writing WALK_AM sum 4000.00\n", - "INFO - writing BIKE_AM sum 0.00\n", - "INFO - writing WALK_LOC_WALK_AM sum 800.00\n", - "INFO - writing WALK_LRF_WALK_AM sum 550.00\n", - "INFO - writing WALK_EXP_WALK_AM sum 0.00\n", - "INFO - writing WALK_HVY_WALK_AM sum 50.00\n", - "INFO - writing WALK_COM_WALK_AM sum 0.00\n", - "INFO - writing DRIVE_LOC_WALK_AM sum 0.00\n", - "INFO - writing DRIVE_LRF_WALK_AM sum 0.00\n", - "INFO - writing DRIVE_EXP_WALK_AM sum 0.00\n", - "INFO - writing DRIVE_HVY_WALK_AM sum 0.00\n", - "INFO - writing DRIVE_COM_WALK_AM sum 0.00\n", - "INFO - writing WALK_LOC_DRIVE_AM sum 0.00\n", - "INFO - writing WALK_LRF_DRIVE_AM sum 0.00\n", - "INFO - writing WALK_EXP_DRIVE_AM sum 0.00\n", - "INFO - writing WALK_DRIVE_HVY_AM sum 0.00\n", - "INFO - writing WALK_COM_DRIVE_AM sum 0.00\n", "INFO - adding zone_id mapping for 25 zones to trips_am.omx\n", "INFO - closing output\\trips_am.omx\n", "INFO - opening output\\trips_md.omx\n", - "INFO - writing DRIVEALONEFREE_MD sum 50.00\n", - "INFO - writing DRIVEALONEPAY_MD sum 0.00\n", - "INFO - writing SHARED2FREE_MD sum 0.00\n", - "INFO - writing SHARED2PAY_MD sum 0.00\n", - "INFO - writing SHARED3FREE_MD sum 0.00\n", - "INFO - writing SHARED3PAY_MD sum 0.00\n", - "INFO - writing WALK_MD sum 5100.00\n", - "INFO - writing BIKE_MD sum 400.00\n", - "INFO - writing WALK_LOC_WALK_MD sum 1150.00\n", - "INFO - writing WALK_LRF_WALK_MD sum 550.00\n", - "INFO - writing WALK_EXP_WALK_MD sum 0.00\n", - "INFO - writing WALK_HVY_WALK_MD sum 50.00\n", - "INFO - writing WALK_COM_WALK_MD sum 0.00\n", - "INFO - writing DRIVE_LOC_WALK_MD sum 0.00\n", - "INFO - writing DRIVE_LRF_WALK_MD sum 0.00\n", - "INFO - writing DRIVE_EXP_WALK_MD sum 0.00\n", - "INFO - writing DRIVE_HVY_WALK_MD sum 0.00\n", - "INFO - writing DRIVE_COM_WALK_MD sum 0.00\n", - "INFO - writing WALK_LOC_DRIVE_MD sum 0.00\n", - "INFO - writing WALK_LRF_DRIVE_MD sum 0.00\n", - "INFO - writing WALK_EXP_DRIVE_MD sum 0.00\n", - "INFO - writing WALK_DRIVE_HVY_MD sum 0.00\n", - "INFO - writing WALK_COM_DRIVE_MD sum 0.00\n", "INFO - adding zone_id mapping for 25 zones to trips_md.omx\n", "INFO - closing output\\trips_md.omx\n", "INFO - opening output\\trips_pm.omx\n", - "INFO - writing DRIVEALONEFREE_PM sum 100.00\n", - "INFO - writing DRIVEALONEPAY_PM sum 0.00\n", - "INFO - writing SHARED2FREE_PM sum 0.00\n", - "INFO - writing SHARED2PAY_PM sum 0.00\n", - "INFO - writing SHARED3FREE_PM sum 15.02\n", - "INFO - writing SHARED3PAY_PM sum 0.00\n", - "INFO - writing WALK_PM sum 4250.00\n", - "INFO - writing BIKE_PM sum 150.00\n", - "INFO - writing WALK_LOC_WALK_PM sum 1750.00\n", - "INFO - writing WALK_LRF_WALK_PM sum 750.00\n", - "INFO - writing WALK_EXP_WALK_PM sum 0.00\n", - "INFO - writing WALK_HVY_WALK_PM sum 100.00\n", - "INFO - writing WALK_COM_WALK_PM sum 0.00\n", - "INFO - writing DRIVE_LOC_WALK_PM sum 0.00\n", - "INFO - writing DRIVE_LRF_WALK_PM sum 0.00\n", - "INFO - writing DRIVE_EXP_WALK_PM sum 0.00\n", - "INFO - writing DRIVE_HVY_WALK_PM sum 0.00\n", - "INFO - writing DRIVE_COM_WALK_PM sum 0.00\n", - "INFO - writing WALK_LOC_DRIVE_PM sum 0.00\n", - "INFO - writing WALK_LRF_DRIVE_PM sum 0.00\n", - "INFO - writing WALK_EXP_DRIVE_PM sum 0.00\n", - "INFO - writing WALK_DRIVE_HVY_PM sum 0.00\n", - "INFO - writing WALK_COM_DRIVE_PM sum 0.00\n", "INFO - adding zone_id mapping for 25 zones to trips_pm.omx\n", "INFO - closing output\\trips_pm.omx\n", "INFO - opening output\\trips_ev.omx\n", - "INFO - writing DRIVEALONEFREE_EV sum 0.00\n", - "INFO - writing DRIVEALONEPAY_EV sum 0.00\n", - "INFO - writing SHARED2FREE_EV sum 0.00\n", - "INFO - writing SHARED2PAY_EV sum 0.00\n", - "INFO - writing SHARED3FREE_EV sum 0.00\n", - "INFO - writing SHARED3PAY_EV sum 0.00\n", - "INFO - writing WALK_EV sum 2000.00\n", - "INFO - writing BIKE_EV sum 250.00\n", - "INFO - writing WALK_LOC_WALK_EV sum 500.00\n", - "INFO - writing WALK_LRF_WALK_EV sum 800.00\n", - "INFO - writing WALK_EXP_WALK_EV sum 0.00\n", - "INFO - writing WALK_HVY_WALK_EV sum 0.00\n", - "INFO - writing WALK_COM_WALK_EV sum 0.00\n", - "INFO - writing DRIVE_LOC_WALK_EV sum 0.00\n", - "INFO - writing DRIVE_LRF_WALK_EV sum 0.00\n", - "INFO - writing DRIVE_EXP_WALK_EV sum 0.00\n", - "INFO - writing DRIVE_HVY_WALK_EV sum 0.00\n", - "INFO - writing DRIVE_COM_WALK_EV sum 0.00\n", - "INFO - writing WALK_LOC_DRIVE_EV sum 0.00\n", - "INFO - writing WALK_LRF_DRIVE_EV sum 0.00\n", - "INFO - writing WALK_EXP_DRIVE_EV sum 0.00\n", - "INFO - writing WALK_DRIVE_HVY_EV sum 0.00\n", - "INFO - writing WALK_COM_DRIVE_EV sum 0.00\n", "INFO - adding zone_id mapping for 25 zones to trips_ev.omx\n", "INFO - closing output\\trips_ev.omx\n", - "INFO - trace_memory_info pipeline.run after write_trip_matrices rss: 0.15GB used: 6.84 GB percent: 43.1%\n", "INFO - #run_model running step write_tables\n", - "INFO - trace_memory_info pipeline.run after write_tables rss: 0.15GB used: 6.85 GB percent: 43.2%\n", - "INFO - trace_memory_info #MEM pipeline.run after run_models rss: 0.15GB used: 6.85 GB percent: 43.2%\n", - "INFO - Time to execute run_model (33 models) : 497.898 seconds (8.3 minutes)\n", - "INFO - Time to execute all models : 498.082 seconds (8.3 minutes)\n" + "INFO - Time to execute run_model (33 models) : 382.13 seconds (6.4 minutes)\n", + "INFO - MainProcess high water mark rss: 166_891_520 (166.9 MB) timestamp: 03/06/2021 06:51:56 label:tt.adjacent_window_run_length.add.mask\n", + "INFO - MainProcess high water mark uss: 150_724_608 (150.7 MB) timestamp: 03/06/2021 06:51:56 label:tt.adjacent_window_run_length.add.mask\n", + "INFO - MainProcess high water mark bytes: 7_475_552 (7.5 MB) timestamp: 03/06/2021 06:51:56 label:tt.adjacent_window_run_length.add.available_run_length\n", + "INFO - Time to execute all models : 382.256 seconds (6.4 minutes)\n" ] } ], @@ -6287,7 +1650,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -6465,10 +1828,15 @@ ".\\data\\skims.omx\n", ".\\output\\cache\\.gitignore\n", ".\\output\\cache\\cached_taz.mmap\n", + ".\\output\\cache\\chunk_cache.csv\n", ".\\output\\log\\.gitignore\n", ".\\output\\log\\activitysim.log\n", + ".\\output\\log\\chunk_cache.csv\n", + ".\\output\\log\\chunk_history.csv\n", ".\\output\\log\\mem.csv\n", + ".\\output\\log\\omnibus_chunk_history.csv\n", ".\\output\\log\\timing_log.csv\n", + ".\\output\\trace\\.gitignore\n", ".\\output\\trace\\atwork_subtour_destination.csv\n", ".\\output\\trace\\atwork_subtour_frequency.atwork_subtour_frequency_annotate_tours_preprocessor.csv\n", ".\\output\\trace\\atwork_subtour_frequency.atwork_subtour_frequency_annotate_tours_preprocessor_locals.csv\n", @@ -6517,10 +1885,10 @@ ".\\output\\trace\\free_parking.simple_simulate.eval_mnl.probs.csv\n", ".\\output\\trace\\free_parking.simple_simulate.eval_mnl.rands.csv\n", ".\\output\\trace\\free_parking.simple_simulate.eval_mnl.utilities.csv\n", - ".\\output\\trace\\initialize_households.annotate_households.csv\n", - ".\\output\\trace\\initialize_households.annotate_households_locals.csv\n", - ".\\output\\trace\\initialize_households.annotate_persons.csv\n", - ".\\output\\trace\\initialize_households.annotate_persons_after_hh.csv\n", + ".\\output\\trace\\initialize_households.annotate_tables.annotate_households.csv\n", + ".\\output\\trace\\initialize_households.annotate_tables.annotate_households_locals.csv\n", + ".\\output\\trace\\initialize_households.annotate_tables.annotate_persons.csv\n", + ".\\output\\trace\\initialize_households.annotate_tables.annotate_persons_after_hh.csv\n", ".\\output\\trace\\joint_tour_frequency.households.csv\n", ".\\output\\trace\\joint_tour_frequency.joint_tour_frequency_annotate_households_preprocessor.csv\n", ".\\output\\trace\\joint_tour_frequency.joint_tour_frequency_annotate_households_preprocessor_locals.csv\n", @@ -6568,32 +1936,32 @@ ".\\output\\trace\\mandatory_tour_frequency.simple_simulate.eval_mnl.rands.csv\n", ".\\output\\trace\\mandatory_tour_frequency.simple_simulate.eval_mnl.utilities.csv\n", ".\\output\\trace\\mandatory_tour_scheduling.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.tour_mode_choice_annotate_choosers_preprocessor.csv\n", ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv\n", ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.alternatives.csv\n", @@ -6607,32 +1975,32 @@ ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.rands.csv\n", ".\\output\\trace\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.utilities.csv\n", ".\\output\\trace\\non_mandatory_tour_destination.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv\n", ".\\output\\trace\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv\n", ".\\output\\trace\\non_mandatory_tour_destination.eatout.sample.interaction_sample.alternatives.csv\n", @@ -6699,32 +2067,32 @@ ".\\output\\trace\\raw.persons.csv\n", ".\\output\\trace\\school_location.annotate_persons.annotate_persons_school.csv\n", ".\\output\\trace\\school_location.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv\n", ".\\output\\trace\\school_location.i1.logsums.university.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv\n", ".\\output\\trace\\school_location.i1.sample.university.interaction_sample.alternatives.csv\n", @@ -6867,69 +2235,69 @@ ".\\output\\trace\\tour_mode_choice.work.tour_mode_choice_annotate_choosers_preprocessor.csv\n", ".\\output\\trace\\tour_mode_choice.work.tour_mode_choice_annotate_choosers_preprocessor_locals.csv\n", ".\\output\\trace\\trip_destination.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.dp.trip_mode_choice_annotate_trips_preprocessor.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\trip_destination.trip_num_1.eatout.compute_logsums.od.trip_mode_choice_annotate_trips_preprocessor.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.alternatives.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.choosers.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.eval.household_id.982875.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.eval.raw.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.interaction_df.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.interaction_utilities.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.probs.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.sampled_alternatives.csv\n", - ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.utils.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.alternatives.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.choosers.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.eval.household_id.982875.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.eval.raw.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.interaction_df.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.interaction_utilities.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.probs.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.sampled_alternatives.csv\n", + ".\\output\\trace\\trip_destination.trip_num_1.eatout.sample.interaction_sample.utils.csv\n", ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.alternatives.csv\n", ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.choices.csv\n", ".\\output\\trace\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.choosers.csv\n", @@ -6945,6 +2313,36 @@ ".\\output\\trace\\trip_matrices.write_trip_matrices_annotate_trips_preprocessor.csv\n", ".\\output\\trace\\trip_mode_choice.atwork.constants.csv\n", ".\\output\\trace\\trip_mode_choice.eatout.constants.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.base_probabilities.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.choices.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.choosers.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_values.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.logsums.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.nested_exp_utilities.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.nested_probabilities.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.rands.csv\n", + ".\\output\\trace\\trip_mode_choice.eatout.simple_simulate.eval_nl.raw_utilities.csv\n", ".\\output\\trace\\trip_mode_choice.eatout.trip_mode.csv\n", ".\\output\\trace\\trip_mode_choice.eatout.trip_mode_choice_annotate_trips_preprocessor.csv\n", ".\\output\\trace\\trip_mode_choice.escort.constants.csv\n", @@ -6952,40 +2350,40 @@ ".\\output\\trace\\trip_mode_choice.othmaint.constants.csv\n", ".\\output\\trace\\trip_mode_choice.school.constants.csv\n", ".\\output\\trace\\trip_mode_choice.shopping.constants.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.base_probabilities.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.choices.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.choosers.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_values.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.logsums.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.nested_exp_utilities.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.nested_probabilities.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.rands.csv\n", - ".\\output\\trace\\trip_mode_choice.simple_simulate.eval_nl.raw_utilities.csv\n", ".\\output\\trace\\trip_mode_choice.social.constants.csv\n", ".\\output\\trace\\trip_mode_choice.trip_mode.csv\n", ".\\output\\trace\\trip_mode_choice.univ.constants.csv\n", ".\\output\\trace\\trip_mode_choice.work.constants.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.base_probabilities.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.choices.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.choosers.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_values.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.logsums.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.nested_exp_utilities.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.nested_probabilities.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.rands.csv\n", + ".\\output\\trace\\trip_mode_choice.work.simple_simulate.eval_nl.raw_utilities.csv\n", ".\\output\\trace\\trip_mode_choice.work.trip_mode.csv\n", ".\\output\\trace\\trip_mode_choice.work.trip_mode_choice_annotate_trips_preprocessor.csv\n", ".\\output\\trace\\trip_purpose.choices.csv\n", @@ -7002,32 +2400,32 @@ ".\\output\\trace\\workplace_location.annotate_persons.annotate_persons_workplace.csv\n", ".\\output\\trace\\workplace_location.annotate_persons.annotate_persons_workplace_locals.csv\n", ".\\output\\trace\\workplace_location.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", - ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.choosers.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.logsums.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv\n", + ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.raw_utilities.csv\n", ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv\n", ".\\output\\trace\\workplace_location.i1.logsums.work_med.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv\n", ".\\output\\trace\\workplace_location.i1.sample.work_med.interaction_sample.alternatives.csv\n", @@ -7112,7 +2510,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -7141,7 +2539,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -7160,7 +2558,11 @@ "\n", "cbd_threshold: 2\n", "check_for_variability: false\n", + "checkpoints: true\n", + "chunk_method: hybrid_uss\n", "chunk_size: 0\n", + "chunk_training_mode: training\n", + "default_initial_rows_per_chunk: 500\n", "distributed_vot_mu: 0.684\n", "distributed_vot_sigma: 0.85\n", "household_median_value_of_time:\n", @@ -7230,7 +2632,10 @@ " COUNTY: county_id\n", " TAZ: zone_id\n", " tablename: land_use\n", + "keep_chunk_logs: true\n", + "keep_mem_logs: true\n", "max_value_of_time: 50\n", + "min_available_chunk_ratio: 0.05\n", "min_value_of_time: 1\n", "models:\n", "- initialize_landuse\n", @@ -7279,6 +2684,7 @@ " - tours\n", " - trips\n", " - joint_tour_participants\n", + "resume_after: null\n", "rural_threshold: 6\n", "trace_hh_id: 982875\n", "trace_od: null\n", @@ -7299,7 +2705,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -7344,7 +2750,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -8097,7 +3503,7 @@ "[25 rows x 42 columns]" ] }, - "execution_count": 20, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -8109,7 +3515,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -8484,7 +3890,7 @@ "[5000 rows x 47 columns]" ] }, - "execution_count": 21, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -8496,7 +3902,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -8859,7 +4265,7 @@ "[8212 rows x 20 columns]" ] }, - "execution_count": 22, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -8871,7 +4277,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -8889,7 +4295,7 @@ "Skims. All skims are input via one OMX file. Required skims depend on the downstream submodels (and expression files).\n", "\n", "data/skims.omx (File) ''\n", - "Last modif.: 'Mon Jan 4 22:44:31 2021'\n", + "Last modif.: 'Thu Apr 22 08:35:45 2021'\n", "Object Tree: \n", "/ (RootGroup) ''\n", "/data (Group) ''\n", @@ -9745,7 +5151,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -9816,7 +5222,7 @@ " '/accessibility/initialize_landuse']" ] }, - "execution_count": 24, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -9829,7 +5235,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -10301,7 +5707,7 @@ "[100 rows x 34 columns]" ] }, - "execution_count": 25, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -10313,7 +5719,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -10727,7 +6133,7 @@ "[100 rows x 35 columns]" ] }, - "execution_count": 26, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -10739,7 +6145,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -11140,7 +6546,7 @@ "[167 rows x 64 columns]" ] }, - "execution_count": 27, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -11152,7 +6558,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -11540,7 +6946,7 @@ "[202 rows x 24 columns]" ] }, - "execution_count": 28, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -11552,7 +6958,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -11855,7 +7261,7 @@ "[482 rows x 15 columns]" ] }, - "execution_count": 29, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -11874,7 +7280,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -12329,7 +7735,7 @@ "24 10.729605 7.180366 10.549489 7.616518 11.016223 " ] }, - "execution_count": 30, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -12341,7 +7747,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -12451,7 +7857,7 @@ "13072777704 130727777 1402945 3188485 3" ] }, - "execution_count": 31, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -12463,7 +7869,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -12491,7 +7897,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -12526,7 +7932,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -12588,10 +7994,10 @@ " 'output/trace\\\\free_parking.simple_simulate.eval_mnl.probs.csv',\n", " 'output/trace\\\\free_parking.simple_simulate.eval_mnl.rands.csv',\n", " 'output/trace\\\\free_parking.simple_simulate.eval_mnl.utilities.csv',\n", - " 'output/trace\\\\initialize_households.annotate_households.csv',\n", - " 'output/trace\\\\initialize_households.annotate_households_locals.csv',\n", - " 'output/trace\\\\initialize_households.annotate_persons.csv',\n", - " 'output/trace\\\\initialize_households.annotate_persons_after_hh.csv',\n", + " 'output/trace\\\\initialize_households.annotate_tables.annotate_households.csv',\n", + " 'output/trace\\\\initialize_households.annotate_tables.annotate_households_locals.csv',\n", + " 'output/trace\\\\initialize_households.annotate_tables.annotate_persons.csv',\n", + " 'output/trace\\\\initialize_households.annotate_tables.annotate_persons_after_hh.csv',\n", " 'output/trace\\\\joint_tour_frequency.households.csv',\n", " 'output/trace\\\\joint_tour_frequency.joint_tour_frequency_annotate_households_preprocessor.csv',\n", " 'output/trace\\\\joint_tour_frequency.joint_tour_frequency_annotate_households_preprocessor_locals.csv',\n", @@ -12639,32 +8045,32 @@ " 'output/trace\\\\mandatory_tour_frequency.simple_simulate.eval_mnl.rands.csv',\n", " 'output/trace\\\\mandatory_tour_frequency.simple_simulate.eval_mnl.utilities.csv',\n", " 'output/trace\\\\mandatory_tour_scheduling.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.tour_mode_choice_annotate_choosers_preprocessor.csv',\n", " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.compute_logsums.logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv',\n", " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.alternatives.csv',\n", @@ -12678,32 +8084,32 @@ " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.rands.csv',\n", " 'output/trace\\\\mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work.interaction_sample_simulate.utilities.csv',\n", " 'output/trace\\\\non_mandatory_tour_destination.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv',\n", " 'output/trace\\\\non_mandatory_tour_destination.eatout.logsums.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv',\n", " 'output/trace\\\\non_mandatory_tour_destination.eatout.sample.interaction_sample.alternatives.csv',\n", @@ -12770,32 +8176,32 @@ " 'output/trace\\\\raw.persons.csv',\n", " 'output/trace\\\\school_location.annotate_persons.annotate_persons_school.csv',\n", " 'output/trace\\\\school_location.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv',\n", " 'output/trace\\\\school_location.i1.logsums.university.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv',\n", " 'output/trace\\\\school_location.i1.sample.university.interaction_sample.alternatives.csv',\n", @@ -12938,69 +8344,69 @@ " 'output/trace\\\\tour_mode_choice.work.tour_mode_choice_annotate_choosers_preprocessor.csv',\n", " 'output/trace\\\\tour_mode_choice.work.tour_mode_choice_annotate_choosers_preprocessor_locals.csv',\n", " 'output/trace\\\\trip_destination.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.dp.trip_mode_choice_annotate_trips_preprocessor.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\trip_destination.trip_num_1.eatout.compute_logsums.od.trip_mode_choice_annotate_trips_preprocessor.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.alternatives.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.choosers.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.eval.household_id.982875.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.eval.raw.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.interaction_df.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.interaction_utilities.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.probs.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.sampled_alternatives.csv',\n", - " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_destination_sample.interaction_sample.utils.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.alternatives.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.choosers.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.eval.household_id.982875.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.eval.raw.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.interaction_df.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.interaction_utilities.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.probs.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.sampled_alternatives.csv',\n", + " 'output/trace\\\\trip_destination.trip_num_1.eatout.sample.interaction_sample.utils.csv',\n", " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.alternatives.csv',\n", " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.choices.csv',\n", " 'output/trace\\\\trip_destination.trip_num_1.eatout.trip_dest_simulate.interaction_sample_simulate.choosers.csv',\n", @@ -13016,6 +8422,36 @@ " 'output/trace\\\\trip_matrices.write_trip_matrices_annotate_trips_preprocessor.csv',\n", " 'output/trace\\\\trip_mode_choice.atwork.constants.csv',\n", " 'output/trace\\\\trip_mode_choice.eatout.constants.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.base_probabilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.choices.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.choosers.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.logsums.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.nested_exp_utilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.nested_probabilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.rands.csv',\n", + " 'output/trace\\\\trip_mode_choice.eatout.simple_simulate.eval_nl.raw_utilities.csv',\n", " 'output/trace\\\\trip_mode_choice.eatout.trip_mode.csv',\n", " 'output/trace\\\\trip_mode_choice.eatout.trip_mode_choice_annotate_trips_preprocessor.csv',\n", " 'output/trace\\\\trip_mode_choice.escort.constants.csv',\n", @@ -13023,40 +8459,40 @@ " 'output/trace\\\\trip_mode_choice.othmaint.constants.csv',\n", " 'output/trace\\\\trip_mode_choice.school.constants.csv',\n", " 'output/trace\\\\trip_mode_choice.shopping.constants.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.base_probabilities.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.choices.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.choosers.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.logsums.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.nested_exp_utilities.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.nested_probabilities.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.rands.csv',\n", - " 'output/trace\\\\trip_mode_choice.simple_simulate.eval_nl.raw_utilities.csv',\n", " 'output/trace\\\\trip_mode_choice.social.constants.csv',\n", " 'output/trace\\\\trip_mode_choice.trip_mode.csv',\n", " 'output/trace\\\\trip_mode_choice.univ.constants.csv',\n", " 'output/trace\\\\trip_mode_choice.work.constants.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.base_probabilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.choices.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.choosers.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.logsums.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.nested_exp_utilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.nested_probabilities.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.rands.csv',\n", + " 'output/trace\\\\trip_mode_choice.work.simple_simulate.eval_nl.raw_utilities.csv',\n", " 'output/trace\\\\trip_mode_choice.work.trip_mode.csv',\n", " 'output/trace\\\\trip_mode_choice.work.trip_mode_choice_annotate_trips_preprocessor.csv',\n", " 'output/trace\\\\trip_purpose.choices.csv',\n", @@ -13073,32 +8509,32 @@ " 'output/trace\\\\workplace_location.annotate_persons.annotate_persons_workplace.csv',\n", " 'output/trace\\\\workplace_location.annotate_persons.annotate_persons_workplace_locals.csv',\n", " 'output/trace\\\\workplace_location.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.choosers.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.logsums.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", - " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.simple_simulate_logsums.eval_nl_logsums.raw_utilities.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.choosers.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_values.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_BIKE.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEFREE.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVEALONEPAY.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_COM.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_EXP.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_HVY.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LOC.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_DRIVE_LRF.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2FREE.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED2PAY.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3FREE.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_SHARED3PAY.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TAXI.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SHARED.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_TNC_SINGLE.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_COM.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_EXP.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_HVY.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LOC.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.eval_utils.expression_value_WALK_LRF.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.logsums.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.nested_exp_utilities.csv',\n", + " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.eval_nl_logsums.raw_utilities.csv',\n", " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor.csv',\n", " 'output/trace\\\\workplace_location.i1.logsums.work_med.compute_logsums.tour_mode_choice_annotate_choosers_preprocessor_locals.csv',\n", " 'output/trace\\\\workplace_location.i1.sample.work_med.interaction_sample.alternatives.csv',\n", @@ -13125,7 +8561,7 @@ " 'output/trace\\\\workplace_location.i1.simulate.work_med.interaction_sample_simulate.utilities.csv']" ] }, - "execution_count": 34, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -13137,7 +8573,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -13165,7 +8601,7 @@ " 'output/trace\\\\auto_ownership_simulate.simple_simulate.eval_mnl.utilities.csv']" ] }, - "execution_count": 35, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -13177,7 +8613,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -13291,7 +8727,7 @@ "[64 rows x 2 columns]" ] }, - "execution_count": 36, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -13303,7 +8739,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -13583,7 +9019,7 @@ "28 util_auto_time_saving_per_worker 0.199860 " ] }, - "execution_count": 37, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -13595,7 +9031,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -13676,7 +9112,7 @@ "5 cars4 -14.672508" ] }, - "execution_count": 38, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -13688,7 +9124,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -13769,7 +9205,7 @@ "5 cars4 2.277031e-07" ] }, - "execution_count": 39, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -13781,7 +9217,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -13832,7 +9268,7 @@ "0 982875 0.746306" ] }, - "execution_count": 40, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -13844,7 +9280,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -13895,7 +9331,7 @@ "0 982875 1" ] }, - "execution_count": 41, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -13918,7 +9354,7 @@ "\n", "```\n", "num_processes: 2\n", - "chunk_size: 80000000000\n", + "chunk_size: 0\n", "\n", "multiprocess_steps:\n", " - name: mp_initialize\n", @@ -13934,12 +9370,12 @@ "\n", "```\n", "\n", - "In brief, `num_processes` specifies the number of processors to use and a `chunk_size` of `80000000000` specifies the number of doubles in a chunk of the choosers table. It is approximately the number of rows times the number of columns and it needs to be set to a value that efficiently processes the table with the available RAM. The `multiprocess_steps` specifies the beginning, middle, and end steps in multiprocessing. The `mp_initialize` step is single processed because there is no `slice` setting. It starts with the `initialize_landuse` submodel and runs until the submodel identified by the next multiprocess submodel starting point, `school_location`. The `mp_households` step is multiprocessed and the households and persons tables are sliced and allocated to processes using the chunking settings. The rest of the submodels are run multiprocessed until the final multiprocess step. The `mp_summarize` step is single processed because there is no `slice` setting and it writes outputs. See [multiprocessing](https://activitysim.github.io/activitysim/core.html#multiprocessing) and [chunk_size](https://activitysim.github.io/activitysim/abmexample.html#chunk-size) for more information. " + "In brief, `num_processes` specifies the number of processors to use and a `chunk_size` of `0` means ActivitySim is free to use all the available RAM if needed. The `multiprocess_steps` specifies the beginning, middle, and end steps in multiprocessing. The `mp_initialize` step is single processed because there is no `slice` setting. It starts with the `initialize_landuse` submodel and runs until the submodel identified by the next multiprocess submodel starting point, `school_location`. The `mp_households` step is multiprocessed and the households and persons tables are sliced and allocated to processes using the chunking settings. The rest of the submodels are run multiprocessed until the final multiprocess step. The `mp_summarize` step is single processed because there is no `slice` setting and it writes outputs. See [multiprocessing](https://activitysim.github.io/activitysim/core.html#multiprocessing) and [chunk_size](https://activitysim.github.io/activitysim/core.html#chunk) for more information. " ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -13963,225 +9399,144 @@ "INFO - activitysim.cli.run - SETTING data_dir: ['data']\n", "INFO - activitysim.cli.run - SETTING output_dir: output\n", "INFO - activitysim.cli.run - SETTING households_sample_size: 100\n", - "INFO - activitysim.cli.run - SETTING chunk_size: 80000000000\n", + "INFO - activitysim.cli.run - SETTING chunk_size: 0\n", + "INFO - activitysim.cli.run - SETTING chunk_method: hybrid_uss\n", + "INFO - activitysim.cli.run - SETTING chunk_training_mode: training\n", "INFO - activitysim.cli.run - SETTING multiprocess: True\n", "INFO - activitysim.cli.run - SETTING num_processes: 2\n", "INFO - activitysim.cli.run - SETTING resume_after: None\n", + "INFO - activitysim.cli.run - SETTING trace_hh_id: 982875\n", + "INFO - activitysim.cli.run - ENV MKL_NUM_THREADS: None\n", + "INFO - activitysim.cli.run - ENV OMP_NUM_THREADS: None\n", + "INFO - activitysim.cli.run - ENV OPENBLAS_NUM_THREADS: None\n", + "INFO - activitysim.cli.run - NUMPY blas_info libraries: ['cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", + "INFO - activitysim.cli.run - NUMPY blas_opt_info libraries: ['cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", + "INFO - activitysim.cli.run - NUMPY lapack_info libraries: ['lapack', 'blas', 'lapack', 'blas']\n", + "INFO - activitysim.cli.run - NUMPY lapack_opt_info libraries: ['lapack', 'blas', 'lapack', 'blas', 'cblas', 'blas', 'cblas', 'blas', 'cblas', 'blas']\n", "INFO - activitysim.cli.run - run multiprocess simulation\n", "INFO - activitysim.core.mp_tasks - Setting num_processes = 0 for step mp_households\n", - "INFO - activitysim.core.mem - init_trace file_name mem.csv\n", - "INFO - activitysim.core.mem - trace_memory_info run_multiprocess.start rss: 0.11GB used: 6.91 GB percent: 43.6%\n", "INFO - activitysim.core.mp_tasks - run_multiprocess fail_fast: True\n", "INFO - activitysim.core.mp_tasks - allocate_shared_skim_buffer\n", "DEBUG - activitysim.abm.tables.skims - loading network_los_without_data_loaded injectable\n", "INFO - activitysim.core.los - Network_LOS using skim_dict_factory: NumpyArraySkimFactory\n", "DEBUG - activitysim.core.skim_dict_factory - load_skim_info taz reading data\\skims.omx\n", - "INFO - activitysim.core.skim_dict_factory - allocate_skim_buffer shared True taz shape (826, 25, 25) total size: 2065000 (1.97 MB)\n", - "INFO - activitysim.core.tracing - Time to execute allocate shared skim buffer : 0.83 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info allocate_shared_skim_buffer.completed rss: 0.12GB used: 6.91 GB percent: 43.6%\n", + "INFO - activitysim.core.skim_dict_factory - allocate_skim_buffer shared True taz shape (826, 25, 25) total size: 2_065_000 (2.1 MB)\n", + "INFO - activitysim.core.tracing - Time to execute allocate shared skim buffer : 0.544 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - allocate_shared_shadow_pricing_buffers\n", "DEBUG - activitysim.abm.tables.shadow_pricing - loading shadow_pricing_info injectable\n", "INFO - activitysim.core.input - Reading CSV file data\\land_use.csv\n", - "DEBUG - activitysim.core.input - raw land_use table size: (25, 42) 8.3 KB\n", + "DEBUG - activitysim.core.input - raw land_use table size: (25, 42) 8.5 KB\n", "DEBUG - activitysim.core.input - renaming columns: {'TAZ': 'zone_id', 'COUNTY': 'county_id'}\n", "DEBUG - activitysim.core.input - keeping columns: ['DISTRICT', 'SD', 'county_id', 'TOTHH', 'TOTPOP', 'TOTACRE', 'RESACRE', 'CIACRE', 'TOTEMP', 'AGE0519', 'RETEMPN', 'FPSEMPN', 'HEREMPN', 'OTHEMPN', 'AGREMPN', 'MWTEMPN', 'PRKCST', 'OPRKCST', 'area_type', 'HSENROLL', 'COLLFTE', 'COLLPTE', 'TOPOLOGY', 'TERMINAL']\n", "DEBUG - activitysim.core.input - land_use table columns: ['DISTRICT' 'SD' 'county_id' 'TOTHH' 'TOTPOP' 'TOTACRE' 'RESACRE' 'CIACRE'\n", " 'TOTEMP' 'AGE0519' 'RETEMPN' 'FPSEMPN' 'HEREMPN' 'OTHEMPN' 'AGREMPN'\n", " 'MWTEMPN' 'PRKCST' 'OPRKCST' 'area_type' 'HSENROLL' 'COLLFTE' 'COLLPTE'\n", " 'TOPOLOGY' 'TERMINAL']\n", - "DEBUG - activitysim.core.input - land_use table size: (25, 24) 4.9 KB\n", - "INFO - activitysim.core.input - land_use index name: zone_id\n", + "DEBUG - activitysim.core.input - land_use table size: (25, 24) 5.0 KB\n", + "DEBUG - activitysim.core.input - land_use index name: zone_id\n", "INFO - activitysim.abm.tables.landuse - loaded land_use (25, 24)\n", "DEBUG - activitysim.abm.tables.shadow_pricing - shadow_pricing_info dtype: \n", "DEBUG - activitysim.abm.tables.shadow_pricing - shadow_pricing_info block_shapes: OrderedDict([('school', (25, 4)), ('workplace', (25, 5))])\n", - "INFO - activitysim.abm.tables.shadow_pricing - allocating shared shadow pricing buffer school 100 buffer_size (25, 4) bytes 800 (800.0)\n", + "INFO - activitysim.abm.tables.shadow_pricing - allocating shared shadow pricing buffer school 100 buffer_size (25, 4) bytes 800 (800 B)\n", "INFO - activitysim.abm.tables.shadow_pricing - buffer_for_shadow_pricing added block school\n", - "INFO - activitysim.abm.tables.shadow_pricing - allocating shared shadow pricing buffer workplace 125 buffer_size (25, 5) bytes 1000 (1000.0)\n", + "INFO - activitysim.abm.tables.shadow_pricing - allocating shared shadow pricing buffer workplace 125 buffer_size (25, 5) bytes 1000 (1000 B)\n", "INFO - activitysim.abm.tables.shadow_pricing - buffer_for_shadow_pricing added block workplace\n", - "INFO - activitysim.core.tracing - Time to execute allocate shared shadow_pricing buffer : 0.07 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info allocate_shared_shadow_pricing_buffers.completed rss: 0.12GB used: 6.92 GB percent: 43.7%\n", + "INFO - activitysim.core.tracing - Time to execute allocate shared shadow_pricing buffer : 0.057 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - #run_model running sub_process mp_setup_skims\n", - "INFO - activitysim.core.mem - trace_memory_info mp_setup_skims.start rss: 0.12GB used: 6.92 GB percent: 43.7%\n", - "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_setup_skims : 4.178 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info #run_model mp_setup_skims completed rss: 0.12GB used: 6.93 GB percent: 43.7%\n", - "INFO - activitysim.core.tracing - Time to execute setup shared_data_buffers : 4.318 seconds (0.1 minutes)\n", + "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_setup_skims : 4.031 seconds (0.1 minutes)\n", + "INFO - activitysim.core.tracing - Time to execute setup shared_data_buffers : 4.085 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - run_sub_simulations step mp_initialize models resume_after None\n", "INFO - activitysim.core.mp_tasks - start process mp_initialize\n", - "INFO - activitysim.core.mem - trace_memory_info mp_initialize.start rss: 0.18GB used: 6.97 GB percent: 43.9%\n", "[WinError 32] The process cannot access the file because it is being used by another process: 'output\\\\pipeline.h5'\n", "mp_initialize WARNING - activitysim.core.pipeline - Error removing output\\pipeline.h5: [WinError 32] The process cannot access the file because it is being used by another process: 'output\\\\pipeline.h5'\n", - "INFO - activitysim.core.mp_tasks - mp_initialize initialize_landuse : 0.741 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_initialize.initialize_landuse.completed rss: 0.24GB used: 6.97 GB percent: 44.0%\n", - "100 unique household_ids in persons\n", - "100 unique household_ids in households\n", - "INFO - activitysim.core.mp_tasks - mp_initialize initialize_households : 1.165 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_initialize.initialize_households.completed rss: 0.12GB used: 6.93 GB percent: 43.7%\n", + "INFO - activitysim.core.mp_tasks - mp_initialize initialize_landuse : 0.668 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_initialize initialize_households : 1.047 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_initialize completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_initialize.completed rss: 0.12GB used: 6.93 GB percent: 43.7%\n", "INFO - activitysim.core.mp_tasks - Process mp_initialize completed with exitcode 0\n", - "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_initialize : 5.349 seconds (0.1 minutes)\n", + "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_initialize : 4.118 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - #run_model running sub_process mp_accessibility_apportion\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_apportion.start rss: 0.12GB used: 6.93 GB percent: 43.7%\n", - "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_accessibility_apportion : 4.028 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info #run_model mp_accessibility_apportion completed rss: 0.12GB used: 6.96 GB percent: 43.9%\n", + "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_accessibility_apportion : 3.041 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - run_sub_simulations step mp_accessibility models resume_after None\n", "INFO - activitysim.core.mp_tasks - start process mp_accessibility_0\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_0.start rss: 0.18GB used: 6.98 GB percent: 44.0%\n", "INFO - activitysim.core.mp_tasks - start process mp_accessibility_1\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_1.start rss: 0.27GB used: 7.04 GB percent: 44.4%\n", - "INFO - activitysim.core.mp_tasks - mp_accessibility_0 compute_accessibility : 1.577 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_0.compute_accessibility.completed rss: 0.35GB used: 7.09 GB percent: 44.7%\n", + "INFO - activitysim.core.mp_tasks - mp_accessibility_0 compute_accessibility : 0.951 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_accessibility_0 completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_0.completed rss: 0.24GB used: 7.03 GB percent: 44.3%\n", - "INFO - activitysim.core.mp_tasks - mp_accessibility_1 compute_accessibility : 1.486 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_1.compute_accessibility.completed rss: 0.12GB used: 6.94 GB percent: 43.8%\n", + "INFO - activitysim.core.mp_tasks - mp_accessibility_1 compute_accessibility : 0.725 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_accessibility_1 completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_1.completed rss: 0.12GB used: 6.94 GB percent: 43.8%\n", "INFO - activitysim.core.mp_tasks - Process mp_accessibility_0 completed with exitcode 0\n", "INFO - activitysim.core.mp_tasks - Process mp_accessibility_1 completed with exitcode 0\n", - "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_accessibility : 6.642 seconds (0.1 minutes)\n", + "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_accessibility : 5.188 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - #run_model running sub_process mp_accessibility_coalesce\n", - "INFO - activitysim.core.mem - trace_memory_info mp_accessibility_coalesce.start rss: 0.12GB used: 6.94 GB percent: 43.8%\n", - "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_accessibility_coalesce : 3.026 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info #run_model mp_accessibility_coalesce completed rss: 0.12GB used: 6.94 GB percent: 43.7%\n", + "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_accessibility_coalesce : 3.027 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - #run_model running sub_process mp_households_apportion\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_apportion.start rss: 0.12GB used: 6.94 GB percent: 43.7%\n", - "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_households_apportion : 3.137 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info #run_model mp_households_apportion completed rss: 0.12GB used: 6.95 GB percent: 43.8%\n", + "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_households_apportion : 3.036 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - run_sub_simulations step mp_households models resume_after None\n", "INFO - activitysim.core.mp_tasks - start process mp_households_0\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.start rss: 0.18GB used: 7.0 GB percent: 44.1%\n", "INFO - activitysim.core.mp_tasks - start process mp_households_1\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.start rss: 0.27GB used: 7.08 GB percent: 44.6%\n", "mp_households_1 WARNING - activitysim.core.tracing - trace_hh_id 982875 not in dataframe\n", "mp_households_1 WARNING - activitysim.core.tracing - register persons: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 school_location : 20.303 seconds (0.3 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.school_location.completed rss: 0.36GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 school_location : 23.203 seconds (0.4 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.school_location.completed rss: 0.36GB used: 7.13 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 workplace_location : 26.538 seconds (0.4 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.workplace_location.completed rss: 0.37GB used: 7.1 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 workplace_location : 27.561 seconds (0.5 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.workplace_location.completed rss: 0.37GB used: 7.1 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 auto_ownership_simulate : 1.955 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.auto_ownership_simulate.completed rss: 0.37GB used: 7.1 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 auto_ownership_simulate : 1.833 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.auto_ownership_simulate.completed rss: 0.37GB used: 7.11 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 free_parking : 1.943 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.free_parking.completed rss: 0.37GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 free_parking : 2.166 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.free_parking.completed rss: 0.37GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 cdap_simulate : 18.385 seconds (0.3 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.cdap_simulate.completed rss: 0.4GB used: 7.11 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 cdap_simulate : 18.86 seconds (0.3 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.cdap_simulate.completed rss: 0.4GB used: 7.12 GB percent: 44.9%\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 school_location : 14.739 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 school_location : 12.82 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 workplace_location : 18.423 seconds (0.3 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 auto_ownership_simulate : 0.622 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 free_parking : 0.716 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 workplace_location : 20.1 seconds (0.3 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 auto_ownership_simulate : 0.734 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 free_parking : 0.612 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 cdap_simulate : 14.964 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 cdap_simulate : 14.713 seconds (0.2 minutes)\n", "mp_households_1 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 mandatory_tour_frequency : 2.541 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.mandatory_tour_frequency.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 mandatory_tour_frequency : 2.744 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.mandatory_tour_frequency.completed rss: 0.38GB used: 7.11 GB percent: 44.8%\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.work\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.school\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 9347 percent_error: 325.3% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_1.univ\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 5133 percent_error: 674.5% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 mandatory_tour_scheduling : 22.382 seconds (0.4 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.mandatory_tour_scheduling.completed rss: 0.38GB used: 7.13 GB percent: 44.9%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 4325 percent_error: 819.1% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.work\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 mandatory_tour_frequency : 1.996 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 mandatory_tour_frequency : 1.908 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 mandatory_tour_scheduling : 22.935 seconds (0.4 minutes)\n", "mp_households_1 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_frequency : 1.765 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.joint_tour_frequency.completed rss: 0.38GB used: 7.13 GB percent: 44.9%\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_frequency : 1.399 seconds (0.0 minutes)\n", "mp_households_1 WARNING - activitysim.core.tracing - register joint_tour_participants: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_composition : 1.206 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.joint_tour_composition.completed rss: 0.38GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_participation : 1.973 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.joint_tour_participation.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 39753 observed_row_size 3908 percent_error: 917.2% in mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2.univ\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 mandatory_tour_scheduling : 27.793 seconds (0.5 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.mandatory_tour_scheduling.completed rss: 0.39GB used: 7.12 GB percent: 44.9%\n", - "mp_households_0 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [982875].\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_frequency : 2.823 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.joint_tour_frequency.completed rss: 0.39GB used: 7.11 GB percent: 44.9%\n", - "mp_households_0 WARNING - activitysim.core.tracing - register joint_tour_participants: no rows with household_id in [982875].\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_composition : 1.437 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.joint_tour_composition.completed rss: 0.39GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_participation : 2.006 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.joint_tour_participation.completed rss: 0.39GB used: 7.12 GB percent: 44.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_destination : 11.614 seconds (0.2 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.joint_tour_destination.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_destination : 5.439 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.joint_tour_destination.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 28645 observed_row_size 4256 percent_error: 573.0% in joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_scheduling : 2.736 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.joint_tour_scheduling.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 28645 observed_row_size 2202 percent_error: 1200.9% in joint_tour_scheduling.vectorize_joint_tour_scheduling.tour_1\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_scheduling : 2.691 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.joint_tour_scheduling.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "mp_households_1 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_frequency : 16.958 seconds (0.3 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.non_mandatory_tour_frequency.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_frequency : 17.784 seconds (0.3 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.non_mandatory_tour_frequency.completed rss: 0.39GB used: 7.11 GB percent: 44.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_destination : 29.273 seconds (0.5 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.non_mandatory_tour_destination.completed rss: 0.39GB used: 7.07 GB percent: 44.6%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 5916 observed_row_size 3079 percent_error: 92.1% in non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_destination : 35.642 seconds (0.6 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.non_mandatory_tour_destination.completed rss: 0.39GB used: 7.07 GB percent: 44.6%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 5916 observed_row_size 991 percent_error: 497.0% in non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_scheduling : 8.995 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.non_mandatory_tour_scheduling.completed rss: 0.39GB used: 7.07 GB percent: 44.6%\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 5916 observed_row_size 2869 percent_error: 106.2% in non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_2\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 5916 observed_row_size 1599 percent_error: 270.0% in non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_3\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 5916 observed_row_size 712 percent_error: 730.9% in non_mandatory_tour_scheduling.vectorize_tour_scheduling.tour_4\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_scheduling : 10.755 seconds (0.2 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.non_mandatory_tour_scheduling.completed rss: 0.39GB used: 7.09 GB percent: 44.7%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 tour_mode_choice_simulate : 31.205 seconds (0.5 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.tour_mode_choice_simulate.completed rss: 0.39GB used: 7.07 GB percent: 44.6%\n", - "mp_households_0 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [982875].\n" + "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_composition : 0.816 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_participation : 1.57 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 mandatory_tour_scheduling : 29.011 seconds (0.5 minutes)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_frequency : 1.96 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.atwork_subtour_frequency.completed rss: 0.39GB used: 7.07 GB percent: 44.6%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_destination : 5.463 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.atwork_subtour_destination.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", - "mp_households_0 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 30937 observed_row_size 12598 percent_error: 145.6% in atwork_subtour_scheduling.tour_1\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_scheduling : 2.93 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.atwork_subtour_scheduling.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 tour_mode_choice_simulate : 33.905 seconds (0.6 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.tour_mode_choice_simulate.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", + "mp_households_0 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [982875].\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_frequency : 1.845 seconds (0.0 minutes)\n", + "mp_households_0 WARNING - activitysim.core.tracing - register joint_tour_participants: no rows with household_id in [982875].\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_composition : 1.016 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_participation : 1.752 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_destination : 9.291 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_destination : 4.38 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 joint_tour_scheduling : 3.463 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 joint_tour_scheduling : 3.254 seconds (0.1 minutes)\n", + "mp_households_1 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [].\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_frequency : 13.382 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_frequency : 12.86 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_destination : 21.47 seconds (0.4 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_destination : 25.443 seconds (0.4 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 non_mandatory_tour_scheduling : 8.882 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 non_mandatory_tour_scheduling : 11.293 seconds (0.2 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 tour_mode_choice_simulate : 23.113 seconds (0.4 minutes)\n", + "mp_households_0 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [982875].\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_frequency : 1.668 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_destination : 4.636 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_scheduling : 2.997 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 tour_mode_choice_simulate : 26.624 seconds (0.4 minutes)\n", "mp_households_1 WARNING - activitysim.core.tracing - register tours: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_frequency : 1.228 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.atwork_subtour_frequency.completed rss: 0.39GB used: 7.06 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_mode_choice : 3.608 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.atwork_subtour_mode_choice.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_destination : 6.056 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.atwork_subtour_destination.completed rss: 0.4GB used: 7.05 GB percent: 44.5%\n", - "mp_households_1 WARNING - activitysim.core.chunk - #chunk_history MAX_ROWSIZE_ERROR initial_row_size 30937 observed_row_size 12116 percent_error: 155.3% in atwork_subtour_scheduling.tour_1\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_scheduling : 2.465 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.atwork_subtour_scheduling.completed rss: 0.4GB used: 7.05 GB percent: 44.4%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_mode_choice : 4.35 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.atwork_subtour_mode_choice.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 stop_frequency : 11.401 seconds (0.2 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.stop_frequency.completed rss: 0.39GB used: 7.05 GB percent: 44.4%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 trip_purpose : 0.547 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.trip_purpose.completed rss: 0.39GB used: 7.05 GB percent: 44.5%\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_frequency : 0.942 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 atwork_subtour_mode_choice : 2.667 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_destination : 4.881 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_scheduling : 2.383 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 stop_frequency : 7.157 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 trip_purpose : 0.457 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 atwork_subtour_mode_choice : 2.593 seconds (0.0 minutes)\n", "mp_households_1 WARNING - activitysim.core.tracing - register trips: no rows with household_id in [].\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 stop_frequency : 11.731 seconds (0.2 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.stop_frequency.completed rss: 0.4GB used: 7.05 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 trip_purpose : 0.302 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.trip_purpose.completed rss: 0.4GB used: 7.05 GB percent: 44.5%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 trip_destination : 63.252 seconds (1.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.trip_destination.completed rss: 0.39GB used: 6.97 GB percent: 43.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 trip_purpose_and_destination : 0.204 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.trip_purpose_and_destination.completed rss: 0.39GB used: 6.97 GB percent: 43.9%\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 trip_scheduling : 2.093 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.trip_scheduling.completed rss: 0.39GB used: 6.98 GB percent: 44.0%\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 stop_frequency : 6.83 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 trip_purpose : 0.396 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 trip_destination : 49.096 seconds (0.8 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 trip_purpose_and_destination : 0.172 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 trip_scheduling : 2.471 seconds (0.0 minutes)\n", "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.atwork.trip_mode with household_id == [982875]\n", "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.othdiscr.trip_mode with household_id == [982875]\n", "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.othmaint.trip_mode with household_id == [982875]\n", @@ -14189,47 +9544,51 @@ "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.shopping.trip_mode with household_id == [982875]\n", "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.social.trip_mode with household_id == [982875]\n", "mp_households_0 WARNING - activitysim.core.tracing - slice_canonically: no rows in trip_mode_choice.univ.trip_mode with household_id == [982875]\n", - "INFO - activitysim.core.mp_tasks - mp_households_0 trip_mode_choice : 32.159 seconds (0.5 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.trip_mode_choice.completed rss: 0.26GB used: 6.98 GB percent: 44.0%\n", + "INFO - activitysim.core.mp_tasks - mp_households_0 trip_mode_choice : 19.328 seconds (0.3 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_households_0 completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_0.completed rss: 0.26GB used: 6.99 GB percent: 44.1%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 trip_destination : 128.932 seconds (2.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.trip_destination.completed rss: 0.26GB used: 6.95 GB percent: 43.8%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 trip_purpose_and_destination : 0.153 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.trip_purpose_and_destination.completed rss: 0.26GB used: 6.95 GB percent: 43.8%\n", - "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.chunk_1.outbound.num_2 coercing 0 depart choices to most initial\n", - "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.chunk_1.outbound.num_3 coercing 1 depart choices to most initial\n", - "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.chunk_1.outbound.num_4 coercing 1 depart choices to most initial\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 trip_scheduling : 106.91 seconds (1.8 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.trip_scheduling.completed rss: 0.26GB used: 6.91 GB percent: 43.6%\n", - "INFO - activitysim.core.mp_tasks - mp_households_1 trip_mode_choice : 23.062 seconds (0.4 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.trip_mode_choice.completed rss: 0.12GB used: 6.8 GB percent: 42.9%\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 trip_destination : 99.634 seconds (1.7 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 trip_purpose_and_destination : 0.127 seconds (0.0 minutes)\n", + "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.outbound.num_2 coercing 0 depart choices to most initial\n", + "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.outbound.num_3 coercing 1 depart choices to most initial\n", + "mp_households_1 WARNING - activitysim.abm.models.trip_scheduling - trip_scheduling.i100.outbound.num_4 coercing 1 depart choices to most initial\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 trip_scheduling : 141.396 seconds (2.4 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_households_1 trip_mode_choice : 14.998 seconds (0.2 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_households_1 completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_1.completed rss: 0.12GB used: 6.8 GB percent: 42.9%\n", "INFO - activitysim.core.mp_tasks - Process mp_households_0 completed with exitcode 0\n", "INFO - activitysim.core.mp_tasks - Process mp_households_1 completed with exitcode 0\n", - "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_households : 503.261 seconds (8.4 minutes)\n", + "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_households : 446.378 seconds (7.4 minutes)\n", "INFO - activitysim.core.mp_tasks - #run_model running sub_process mp_households_coalesce\n", - "INFO - activitysim.core.mem - trace_memory_info mp_households_coalesce.start rss: 0.12GB used: 6.8 GB percent: 42.9%\n", - "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_households_coalesce : 4.024 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info #run_model mp_households_coalesce completed rss: 0.12GB used: 6.82 GB percent: 43.0%\n", + "INFO - activitysim.core.tracing - Time to execute #run_model sub_process mp_households_coalesce : 3.006 seconds (0.1 minutes)\n", "INFO - activitysim.core.mp_tasks - run_sub_simulations step mp_summarize models resume_after None\n", "INFO - activitysim.core.mp_tasks - start process mp_summarize\n", - "INFO - activitysim.core.mem - trace_memory_info mp_summarize.start rss: 0.18GB used: 6.86 GB percent: 43.3%\n", "mp_summarize WARNING - activitysim.core.tracing - register joint_tour_participants: no rows with household_id in [982875].\n", - "INFO - activitysim.core.mp_tasks - mp_summarize write_data_dictionary : 0.338 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_summarize.write_data_dictionary.completed rss: 0.24GB used: 6.88 GB percent: 43.4%\n", - "INFO - activitysim.core.mp_tasks - mp_summarize write_trip_matrices : 1.405 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_summarize.write_trip_matrices.completed rss: 0.24GB used: 6.88 GB percent: 43.4%\n", - "INFO - activitysim.core.mp_tasks - mp_summarize write_tables : 0.114 seconds (0.0 minutes)\n", - "INFO - activitysim.core.mem - trace_memory_info mp_summarize.write_tables.completed rss: 0.24GB used: 6.88 GB percent: 43.4%\n", + "INFO - activitysim.core.mp_tasks - mp_summarize write_data_dictionary : 0.27 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_summarize write_trip_matrices : 1.249 seconds (0.0 minutes)\n", + "INFO - activitysim.core.mp_tasks - mp_summarize write_tables : 0.2 seconds (0.0 minutes)\n", "INFO - activitysim.core.mp_tasks - process mp_summarize completed\n", - "INFO - activitysim.core.mem - trace_memory_info mp_summarize.completed rss: 0.12GB used: 6.81 GB percent: 43.0%\n", "INFO - activitysim.core.mp_tasks - Process mp_summarize completed with exitcode 0\n", - "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_summarize : 5.412 seconds (0.1 minutes)\n", - "INFO - activitysim.core.mem - high water mark rss: 0.40 timestamp: 01/04/2021 18:05:32 label: mp_households_1.cdap_simulate.completed\n", - "INFO - activitysim.core.mem - high water mark used: 7.13 timestamp: 01/04/2021 18:04:44 label: mp_households_0.school_location.completed\n", - "INFO - activitysim.core.tracing - Time to execute all models : 540.649 seconds (9.0 minutes)\n" + "INFO - activitysim.core.tracing - Time to execute run_sub_simulations step mp_summarize : 4.107 seconds (0.1 minutes)\n", + "INFO - activitysim.core.mem - MainProcess high water mark rss: 434_630_656 (434.6 MB) timestamp: 03/06/2021 07:09:09 label:mp_households_0.mandatory_tour_frequency.completed\n", + "INFO - activitysim.core.mem - MainProcess high water mark uss: 108_953_600 (109.0 MB) timestamp: 03/06/2021 07:08:13 label:run_model mp_households_apportion completed\n", + "DEBUG - activitysim.core.chunk - chunk.consolidate_logs reading glob output\\log\\*chunk_history.csv\n", + "DEBUG - activitysim.core.chunk - chunk.consolidate_logs writing omnibus log to output\\log\\omnibus_chunk_history.csv\n", + "DEBUG - activitysim.core.chunk - consolidate_logs dropping 2 rows where num_rows == 0\n", + "DEBUG - activitysim.core.chunk - chunk.consolidate_logs writing omnibus chunk cache to output\\log\\chunk_cache.csv\n", + "DEBUG - activitysim.core.chunk - chunk.consolidate_logs writing chunk cache to output\\cache\\chunk_cache.csv\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs for step mp_initialize\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs consolidating 1 logs for mp_initialize\n", + "DEBUG - activitysim.core.mem - chunk.consolidate_logs writing step summary log for step mp_initialize to output\\log\\mem_mp_initialize.csv\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs for step mp_accessibility\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs consolidating 2 logs for mp_accessibility\n", + "DEBUG - activitysim.core.mem - chunk.consolidate_logs writing step summary log for step mp_accessibility to output\\log\\mem_mp_accessibility.csv\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs for step mp_households\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs consolidating 2 logs for mp_households\n", + "DEBUG - activitysim.core.mem - chunk.consolidate_logs writing step summary log for step mp_households to output\\log\\mem_mp_households.csv\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs for step mp_summarize\n", + "DEBUG - activitysim.core.mem - mem.consolidate_logs consolidating 1 logs for mp_summarize\n", + "DEBUG - activitysim.core.mem - chunk.consolidate_logs writing step summary log for step mp_summarize to output\\log\\mem_mp_summarize.csv\n", + "DEBUG - activitysim.core.mem - chunk.consolidate_logs writing omnibus log to output\\log\\omnibus_mem.csv\n", + "INFO - activitysim.core.tracing - Time to execute all models : 477.186 seconds (8.0 minutes)\n" ] } ], @@ -14284,7 +9643,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/activitysim/examples/example_mtc/notebooks/memory_usage.ipynb b/activitysim/examples/example_mtc/notebooks/memory_usage.ipynb new file mode 100644 index 000000000..a14454aaa --- /dev/null +++ b/activitysim/examples/example_mtc/notebooks/memory_usage.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot ActivitySim memory usage over the model run" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def read_mem_log(mem_log_file_path, col_name):\n", + "\n", + " mem_df = pd.read_csv(mem_log_file_path)\n", + "\n", + " t = pd.to_datetime(mem_df.time, errors='coerce', format='%Y/%m/%d %H:%M:%S')\n", + " seconds = (t - t.min()).dt.total_seconds()\n", + " minutes = (seconds / 60)\n", + "\n", + " mem_df['minutes'] = minutes.round(2)\n", + " mem_df['mem_gb'] = (mem_df[col_name].astype(np.int64) / 1_000_000_000)\n", + " \n", + " mem_df = mem_df.sort_values('minutes')\n", + "\n", + " mem_df = mem_df[['mem_gb', 'minutes']].set_index('minutes')\n", + " \n", + " #print(mem_df)\n", + " \n", + " return mem_df\n", + "\n", + "def plot_mem_usage(mem_log_file_path, col_name, title):\n", + " \n", + " mem_df = read_mem_log(mem_log_file_path, col_name)\n", + " \n", + " with plt.style.context('seaborn'):\n", + " ax = mem_df['mem_gb'].plot()\n", + " ax.set_ylabel(f\"{col_name} (GB)\")\n", + " ax.set_xlabel(f\"runtime (minutes)\")\n", + " plt.title(title)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_mem_usage(\"output/omnibus_mem.csv\", 'uss', 'memory usage')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/activitysim/examples/example_multiple_zone/configs_3_zone/settings_mp.yaml b/activitysim/examples/example_multiple_zone/configs_3_zone/settings_mp.yaml index b31aa9d07..75eed363d 100644 --- a/activitysim/examples/example_multiple_zone/configs_3_zone/settings_mp.yaml +++ b/activitysim/examples/example_multiple_zone/configs_3_zone/settings_mp.yaml @@ -7,7 +7,6 @@ fail_fast: True # - ------------------------- dev config multiprocess: True strict: False -mem_tick: 30 use_shadow_pricing: False num_processes: 2 diff --git a/activitysim/examples/example_psrc/configs/settings_mp.yaml b/activitysim/examples/example_psrc/configs/settings_mp.yaml index 23603a173..5a95144a4 100644 --- a/activitysim/examples/example_psrc/configs/settings_mp.yaml +++ b/activitysim/examples/example_psrc/configs/settings_mp.yaml @@ -10,13 +10,13 @@ use_shadow_pricing: False # - full sample - 1605264 households households_sample_size: 0 -chunk_size: 80000000000 +chunk_size: 0 # raise error if any sub-process fails without waiting for others to complete fail_fast: True multiprocess: True -num_processes: 32 +num_processes: 28 multiprocess_steps: - name: mp_initialize diff --git a/activitysim/examples/example_psrc/configs_accessibility/settings_mp.yaml b/activitysim/examples/example_psrc/configs_accessibility/settings_mp.yaml index 55c715ac6..fca3c67cb 100644 --- a/activitysim/examples/example_psrc/configs_accessibility/settings_mp.yaml +++ b/activitysim/examples/example_psrc/configs_accessibility/settings_mp.yaml @@ -10,13 +10,13 @@ use_shadow_pricing: False # - full sample - 1605264 households households_sample_size: 100 -chunk_size: 80000000000 +chunk_size: 0 # raise error if any sub-process fails without waiting for others to complete fail_fast: True multiprocess: True -num_processes: 32 +num_processes: 28 models: - initialize_landuse diff --git a/activitysim/examples/example_psrc/configs_skip_accessibility/settings_mp.yaml b/activitysim/examples/example_psrc/configs_skip_accessibility/settings_mp.yaml index 1fff69263..7817d5e01 100755 --- a/activitysim/examples/example_psrc/configs_skip_accessibility/settings_mp.yaml +++ b/activitysim/examples/example_psrc/configs_skip_accessibility/settings_mp.yaml @@ -3,7 +3,7 @@ inherit_settings: settings.yaml # set MKL_NUM_THREADS=1 # activitysim run -c configs_skip_accessibility -c configs -o output -d data -s settings_mp.yaml -chunk_size: 80000000000 +chunk_size: 80_000_000_000 # raise error if any sub-process fails without waiting for others to complete fail_fast: True diff --git a/activitysim/examples/example_sandag/configs/logging.yaml b/activitysim/examples/example_sandag/configs/logging.yaml index a30a25c82..7742c3ece 100644 --- a/activitysim/examples/example_sandag/configs/logging.yaml +++ b/activitysim/examples/example_sandag/configs/logging.yaml @@ -15,7 +15,7 @@ logging: loggers: activitysim: - level: INFO + level: DEBUG handlers: [console, logfile] propagate: false @@ -37,7 +37,7 @@ logging: class: logging.StreamHandler stream: ext://sys.stdout formatter: simpleFormatter - level: NOTSET + level: INFO formatters: diff --git a/activitysim/examples/example_sandag/configs/settings.yaml b/activitysim/examples/example_sandag/configs/settings.yaml index 2f4112e1c..bef299cea 100644 --- a/activitysim/examples/example_sandag/configs/settings.yaml +++ b/activitysim/examples/example_sandag/configs/settings.yaml @@ -1,5 +1,6 @@ inherit_settings: True +trace_hh_id: # input tables input_table_list: diff --git a/activitysim/examples/example_sandag/configs/settings_mp.yaml b/activitysim/examples/example_sandag/configs/settings_mp.yaml index 722aa333e..08827f646 100644 --- a/activitysim/examples/example_sandag/configs/settings_mp.yaml +++ b/activitysim/examples/example_sandag/configs/settings_mp.yaml @@ -6,18 +6,16 @@ multiprocess: True households_sample_size: 0 -chunk_size: 10000000000 - # raise error if any sub-process fails without waiting for others to complete # (Shadow pricing requires fail_fast setting in multiprocessing mode) fail_fast: True -# 32 processor RSG modelling server with 64 logical processors +# 32 processor RSG modelling server with 64 logical processors and 512 GB RAM # set MKL_NUM_THREADS=1 # echo %MKL_NUM_THREADS% num_processes: 28 +chunk_size: 500_000_000_000 -# 28 processors and chunksize of 10000000000 uses 190 GB of RAM for accessibility multiprocess_steps: - name: mp_initialize diff --git a/activitysim/examples/example_semcog/configs/initialize_households.yaml b/activitysim/examples/example_semcog/configs/initialize_households.yaml index e525a9a07..b02b82d27 100755 --- a/activitysim/examples/example_semcog/configs/initialize_households.yaml +++ b/activitysim/examples/example_semcog/configs/initialize_households.yaml @@ -19,3 +19,6 @@ annotate_tables: DF: persons TABLES: - households + +# add the work and school location size tables for backwards compatibility if desired +add_size_tables: False \ No newline at end of file diff --git a/activitysim/examples/example_semcog/configs/mandatory_tour_scheduling.yaml b/activitysim/examples/example_semcog/configs/mandatory_tour_scheduling.yaml index 540236495..7e74373cb 100755 --- a/activitysim/examples/example_semcog/configs/mandatory_tour_scheduling.yaml +++ b/activitysim/examples/example_semcog/configs/mandatory_tour_scheduling.yaml @@ -20,6 +20,8 @@ SIMULATE_CHOOSER_COLUMNS: - school_zone_id - home_zone_id - TAZ + - transit_pass_ownership + - transit_pass_subsidy LOGSUM_SETTINGS: tour_mode_choice.yaml diff --git a/activitysim/examples/example_semcog/configs/network_los.yaml b/activitysim/examples/example_semcog/configs/network_los.yaml index 0d4eff67b..769bffb58 100755 --- a/activitysim/examples/example_semcog/configs/network_los.yaml +++ b/activitysim/examples/example_semcog/configs/network_los.yaml @@ -3,9 +3,6 @@ read_skim_cache: False # write memmapped cached skims to output directory after reading from omx, for use in subsequent runs write_skim_cache: True -#alternate dir to read/write skim cache (defaults to output_dir) -#cache_dir: data/cache - zone_system: 1 taz_skims: skims*.omx diff --git a/activitysim/examples/example_semcog/configs/settings.yaml b/activitysim/examples/example_semcog/configs/settings.yaml index 4eceba790..54337b0fe 100755 --- a/activitysim/examples/example_semcog/configs/settings.yaml +++ b/activitysim/examples/example_semcog/configs/settings.yaml @@ -68,7 +68,7 @@ use_shadow_pricing: False # trace household id; comment out or leave empty for no trace # households with all tour types # [ 728370 1234067 1402924 1594625 1595333 1747572 1896849 1931818 2222690 2344951 2677154] -trace_hh_id: 1165549 +trace_hh_id: 1311364 # trace origin, destination in accessibility calculation; comment out or leave empty for no trace # trace_od: [5, 11] @@ -79,9 +79,12 @@ models: - initialize_landuse - initialize_households - compute_accessibility + - work_from_home + - add_size_tables - school_location - workplace_location - - work_from_home + - transit_pass_subsidy + - transit_pass_ownership - auto_ownership_simulate - free_parking - telecommute_frequency diff --git a/activitysim/examples/example_semcog/configs/tour_mode_choice.csv b/activitysim/examples/example_semcog/configs/tour_mode_choice.csv index 98d469945..412e80344 100755 --- a/activitysim/examples/example_semcog/configs/tour_mode_choice.csv +++ b/activitysim/examples/example_semcog/configs/tour_mode_choice.csv @@ -54,7 +54,7 @@ util_WALK_LOC_number_of_transfers,WALK_LOC - number of transfers,@xfers_wlk_mult util_WALK_LOC_Walk_access_time,WALK_LOC - Walk access time,@wacc_multiplier * 2 * df.origin_walk_time,,,,,,coef_ivt,,,,,,,,,,,, util_WALK_LOC_Walk_egress_time,WALK_LOC - Walk egress time,@wegr_multiplier * 2 * df.destination_walk_time,,,,,,coef_ivt,,,,,,,,,,,, util_WALK_LOC_Walk_other_time,WALK_LOC - Walk other time,@waux_multiplier * (odt_skims['WLK_LOC_WAUX'] + dot_skims['WLK_LOC_WAUX']),,,,,,coef_ivt,,,,,,,,,,,, -util_WALK_LOC_Fare,WALK_LOC - Fare,@ivt_cost_multiplier * df.ivot * (odt_skims['WLK_LOC_FARE'] + dot_skims['WLK_LOC_FARE']),,,,,,coef_ivt,,,,,,,,,,,, +util_WALK_LOC_Fare,WALK_LOC - Fare,@ivt_cost_multiplier * df.fare_discount_percent * df.ivot * (odt_skims['WLK_LOC_FARE'] + dot_skims['WLK_LOC_FARE']),,,,,,coef_ivt,,,,,,,,,,,, util_WALK_LOC_Destination_zone_densityIndex,WALK_LOC - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,coef_ivt,,,,,,,,,,,, util_WALK_LOC_Topology,WALK_LOC - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,coef_ivt,,,,,,,,,,,, util_WALK_LOC_Person_is_less_than_10_years_old,WALK_LOC - Person is less than 10 years old,@(df.age <= 10),,,,,,coef_age010_trn_multiplier,,,,,,,,,,,, @@ -73,7 +73,7 @@ util_WALK_PRM_number_of_transfers,WALK_PRM - number of transfers,@xfers_wlk_mult util_WALK_PRM_Walk_access_time,WALK_PRM - Walk access time,@wacc_multiplier * 2 * df.origin_walk_time,,,,,,,coef_ivt,,,,,,,,,,, util_WALK_PRM_Walk_egress_time,WALK_PRM - Walk egress time,@wegr_multiplier * 2 * df.destination_walk_time,,,,,,,coef_ivt,,,,,,,,,,, util_WALK_PRM_Walk_other_time,WALK_PRM - Walk other time,@waux_multiplier * (odt_skims['WLK_PRM_WAUX'] + dot_skims['WLK_PRM_WAUX']),,,,,,,coef_ivt,,,,,,,,,,, -util_WALK_PRM_Fare,WALK_PRM - Fare,@ivt_cost_multiplier * df.ivot * (odt_skims['WLK_PRM_FARE'] + dot_skims['WLK_PRM_FARE']),,,,,,,coef_ivt,,,,,,,,,,, +util_WALK_PRM_Fare,WALK_PRM - Fare,@ivt_cost_multiplier * df.fare_discount_percent * df.ivot * (odt_skims['WLK_PRM_FARE'] + dot_skims['WLK_PRM_FARE']),,,,,,,coef_ivt,,,,,,,,,,, util_WALK_PRM_Destination_zone_densityIndex,WALK_PRM - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,coef_ivt,,,,,,,,,,, util_WALK_PRM_Topology,WALK_PRM - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,coef_ivt,,,,,,,,,,, util_WALK_PRM_Person_is_less_than_10_years_old,WALK_PRM - Person is less than 10 years old,@(df.age <= 10),,,,,,,coef_age010_trn_multiplier,,,,,,,,,,, @@ -93,7 +93,7 @@ util_WALK_MIX_number_of_transfers,WALK_MIX - number of transfers,@xfers_wlk_mult util_WALK_MIX_Walk_access_time,WALK_MIX - Walk access time,@wacc_multiplier * 2 * df.origin_walk_time,,,,,,,,coef_ivt,,,,,,,,,, util_WALK_MIX_Walk_egress_time,WALK_MIX - Walk egress time,@wegr_multiplier * 2 * df.destination_walk_time,,,,,,,,coef_ivt,,,,,,,,,, util_WALK_MIX_Walk_other_time,WALK_MIX - Walk other time,@waux_multiplier * (odt_skims['WLK_MIX_WAUX'] + dot_skims['WLK_MIX_WAUX']),,,,,,,,coef_ivt,,,,,,,,,, -util_WALK_MIX_Fare,WALK_MIX - Fare,@ivt_cost_multiplier * df.ivot * (odt_skims['WLK_MIX_FARE'] + dot_skims['WLK_MIX_FARE']),,,,,,,,coef_ivt,,,,,,,,,, +util_WALK_MIX_Fare,WALK_MIX - Fare,@ivt_cost_multiplier * df.fare_discount_percent * df.ivot * (odt_skims['WLK_MIX_FARE'] + dot_skims['WLK_MIX_FARE']),,,,,,,,coef_ivt,,,,,,,,,, util_WALK_MIX_Destination_zone_densityIndex,WALK_MIX - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,coef_ivt,,,,,,,,,, util_WALK_MIX_Topology,WALK_MIX - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,coef_age010_trn_multiplier,,,,,,,,,, util_WALK_MIX_Person_is_less_than_10_years_old,WALK_MIX - Person is less than 10 years old,@(df.age <= 10),,,,,,,,1,,,,,,,,,, @@ -109,7 +109,7 @@ util_PNR_LOC_PNR_time,PNR_LOC - PNR time,@dtim_multiplier * (odt_skims['PNR_LOC_ util_PNR_LOC_Walk_access_time,PNR_LOC - Walk access time,@wacc_multiplier * df.destination_walk_time,,,,,,,,,coef_ivt,,,,,,,,, util_PNR_LOC_Walk_egress_time_(at_attraction_end),PNR_LOC - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,coef_ivt,,,,,,,,, util_PNR_LOC_Walk_other_time,PNR_LOC - Walk other time,@waux_multiplier * (odt_skims['PNR_LOC_WAUX'] + dot_skims['PNRE_LOC_WAUX']),,,,,,,,,coef_ivt,,,,,,,,, -util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['PNR_LOC_FARE'] + dot_skims['PNRE_LOC_FARE']) + ((odt_skims['PNR_LOC_DDIST']+dot_skims['PNRE_LOC_DDIST']) * costPerMile)),,,,,,,,,coef_ivt,,,,,,,,, +util_PNR_LOC_Fare_and_operating_cost,PNR_LOC - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['PNR_LOC_FARE'] + dot_skims['PNRE_LOC_FARE']) + ((odt_skims['PNR_LOC_DDIST']+dot_skims['PNRE_LOC_DDIST']) * costPerMile)),,,,,,,,,coef_ivt,,,,,,,,, util_PNR_LOC_Ratio_of_PNR_access_distance_to_OD_distance,PNR_LOC - Ratio of PNR access distance to OD distance,@dacc_ratio * ((odt_skims['PNR_LOC_DDIST']+ dot_skims['PNRE_LOC_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,coef_ivt,,,,,,,,, util_PNR_LOC_Destination_zone_densityIndex,PNR_LOC - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,coef_ivt,,,,,,,,, util_PNR_LOC_Topology,PNR_LOC - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,coef_ivt,,,,,,,,, @@ -131,7 +131,7 @@ util_PNR_PRM_PNR_time,PNR_PRM - PNR time,@dtim_multiplier * (odt_skims['PNR_PRM_ util_PNR_PRM_Walk_access_time_(at_attraction_end),PNR_PRM - Walk access time (at attraction end),@wacc_multiplier * df.destination_walk_time,,,,,,,,,,coef_ivt,,,,,,,, util_PNR_PRM_Walk_egress_time_(at_attraction_end),PNR_PRM - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,coef_ivt,,,,,,,, util_PNR_PRM_Walk_other_time,PNR_PRM - Walk other time,@waux_multiplier * (odt_skims['PNR_PRM_WAUX'] + dot_skims['PNRE_PRM_WAUX']),,,,,,,,,,coef_ivt,,,,,,,, -util_PNR_PRM_Fare_and_operating_cost,PNR_PRM - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['PNR_PRM_FARE']+dot_skims['PNRE_PRM_FARE']) + ((odt_skims['PNR_PRM_DDIST']+dot_skims['PNRE_PRM_DDIST']) *costPerMile)),,,,,,,,,,coef_ivt,,,,,,,, +util_PNR_PRM_Fare_and_operating_cost,PNR_PRM - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['PNR_PRM_FARE']+dot_skims['PNRE_PRM_FARE']) + ((odt_skims['PNR_PRM_DDIST']+dot_skims['PNRE_PRM_DDIST']) *costPerMile)),,,,,,,,,,coef_ivt,,,,,,,, util_PNR_PRM_Ratio_of_PNR_access_distance_to_OD_distance,PNR_PRM - Ratio of PNR access distance to OD distance,@dacc_ratio * ((odt_skims['PNR_PRM_DDIST']+ dot_skims['PNRE_PRM_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,,coef_ivt,,,,,,,, util_PNR_PRM_Destination_zone_densityIndex,PNR_PRM - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,coef_ivt,,,,,,,, util_PNR_PRM_Topology,PNR_PRM - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,coef_ivt,,,,,,,, @@ -154,7 +154,7 @@ util_PNR_MIX_PNR_time,PNR_MIX - PNR time,@dtim_multiplier * (odt_skims['PNR_MIX_ util_PNR_MIX_Walk_access_time_(at_attraction_end),PNR_MIX - Walk access time (at attraction end),@wacc_multiplier * df.destination_walk_time,,,,,,,,,,,coef_ivt,,,,,,, util_PNR_MIX_Walk_egress_ime_(at_attraction_end),PNR_MIX - Walk egress ime (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,coef_ivt,,,,,,, util_PNR_MIX_Walk_other_time,PNR_MIX - Walk other time,@waux_multiplier * (odt_skims['PNR_MIX_WAUX'] + dot_skims['PNRE_MIX_WAUX']),,,,,,,,,,,coef_ivt,,,,,,, -util_PNR_MIX_Fare_and_operating_cost,PNR_MIX - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['PNR_MIX_FARE']+dot_skims['PNRE_MIX_FARE']) + ((odt_skims['PNR_MIX_DDIST']+dot_skims['PNRE_MIX_DDIST']) *costPerMile)),,,,,,,,,,,coef_ivt,,,,,,, +util_PNR_MIX_Fare_and_operating_cost,PNR_MIX - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['PNR_MIX_FARE']+dot_skims['PNRE_MIX_FARE']) + ((odt_skims['PNR_MIX_DDIST']+dot_skims['PNRE_MIX_DDIST']) *costPerMile)),,,,,,,,,,,coef_ivt,,,,,,, util_PNR_MIX_Ratio_of_PNR_access_distance_to_OD_distance,PNR_MIX - Ratio of PNR access distance to OD distance,@dacc_ratio * ((odt_skims['PNR_MIX_DDIST']+ dot_skims['PNRE_MIX_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,,,coef_ivt,,,,,,, util_PNR_MIX_Destination_zone_densityIndex,PNR_MIX - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,coef_ivt,,,,,,, util_PNR_MIX_Topology,PNR_MIX - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,coef_ivt,,,,,,, @@ -171,7 +171,7 @@ util_KNR_LOC_KNR_time,KNR_LOC - KNR time,@dtim_multiplier * (odt_skims['KNR_LOC_ util_KNR_LOC_Walk_access_time,KNR_LOC - Walk access time,@wacc_multiplier * df.destination_walk_time,,,,,,,,,,,,coef_ivt,,,,,, util_KNR_LOC_Walk_egress_time_(at_attraction_end),KNR_LOC - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,coef_ivt,,,,,, util_KNR_LOC_Walk_other_time,KNR_LOC - Walk other time,@waux_multiplier * (odt_skims['KNR_LOC_WAUX'] + dot_skims['KNRE_LOC_WAUX']),,,,,,,,,,,,coef_ivt,,,,,, -util_KNR_LOC_Fare_and_operating_cost,KNR_LOC - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['KNR_LOC_FARE'] + dot_skims['KNRE_LOC_FARE']) + ((odt_skims['KNR_LOC_DDIST']+dot_skims['KNRE_LOC_DDIST']) * costPerMile)),,,,,,,,,,,,coef_ivt,,,,,, +util_KNR_LOC_Fare_and_operating_cost,KNR_LOC - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['KNR_LOC_FARE'] + dot_skims['KNRE_LOC_FARE']) + ((odt_skims['KNR_LOC_DDIST']+dot_skims['KNRE_LOC_DDIST']) * costPerMile)),,,,,,,,,,,,coef_ivt,,,,,, util_KNR_LOC_Ratio_of_KNR_access_distance_to_OD_distance,KNR_LOC - Ratio of KNR access distance to OD distance,@dacc_ratio * ((odt_skims['KNR_LOC_DDIST']+ dot_skims['KNRE_LOC_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,,,,coef_ivt,,,,,, util_KNR_LOC_Destination_zone_densityIndex,KNR_LOC - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,coef_ivt,,,,,, util_KNR_LOC_Topology,KNR_LOC - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,coef_ivt,,,,,, @@ -193,7 +193,7 @@ util_KNR_PRM_KNR_time,KNR_PRM - KNR time,@dtim_multiplier * (odt_skims['KNR_PRM_ util_KNR_PRM_Walk_access_time_(at_attraction_end),KNR_PRM - Walk access time (at attraction end),@wacc_multiplier * df.destination_walk_time,,,,,,,,,,,,,coef_ivt,,,,, util_KNR_PRM_Walk_egress_time_(at_attraction_end),KNR_PRM - Walk egress time (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,coef_ivt,,,,, util_KNR_PRM_Walk_other_time,KNR_PRM - Walk other time,@waux_multiplier * (odt_skims['KNR_PRM_WAUX'] + dot_skims['KNRE_PRM_WAUX']),,,,,,,,,,,,,coef_ivt,,,,, -util_KNR_PRM_Fare_and_operating_cost,KNR_PRM - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['KNR_PRM_FARE']+dot_skims['KNRE_PRM_FARE']) + ((odt_skims['KNR_PRM_DDIST']+dot_skims['KNRE_PRM_DDIST']) *costPerMile)),,,,,,,,,,,,,coef_ivt,,,,, +util_KNR_PRM_Fare_and_operating_cost,KNR_PRM - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['KNR_PRM_FARE']+dot_skims['KNRE_PRM_FARE']) + ((odt_skims['KNR_PRM_DDIST']+dot_skims['KNRE_PRM_DDIST']) *costPerMile)),,,,,,,,,,,,,coef_ivt,,,,, util_KNR_PRM_Ratio_of_KNR_access_distance_to_OD_distance,KNR_PRM - Ratio of KNR access distance to OD distance,@dacc_ratio * ((odt_skims['KNR_PRM_DDIST']+ dot_skims['KNRE_PRM_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,,,,,coef_ivt,,,,, util_KNR_PRM_Destination_zone_densityIndex,KNR_PRM - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,coef_ivt,,,,, util_KNR_PRM_Topology,KNR_PRM - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,coef_ivt,,,,, @@ -216,7 +216,7 @@ util_KNR_MIX_KNR_time,KNR_MIX - KNR time,@dtim_multiplier * (odt_skims['KNR_MIX_ util_KNR_MIX_Walk_access_time_(at_attraction_end),KNR_MIX - Walk access time (at attraction end),@wacc_multiplier * df.destination_walk_time,,,,,,,,,,,,,,coef_ivt,,,, util_KNR_MIX_Walk_egress_ime_(at_attraction_end),KNR_MIX - Walk egress ime (at attraction end),@wegr_multiplier * df.destination_walk_time,,,,,,,,,,,,,,coef_ivt,,,, util_KNR_MIX_Walk_other_time,KNR_MIX - Walk other time,@waux_multiplier * (odt_skims['KNR_MIX_WAUX'] + dot_skims['KNRE_MIX_WAUX']),,,,,,,,,,,,,,coef_ivt,,,, -util_KNR_MIX_Fare_and_operating_cost,KNR_MIX - Fare and operating cost,@ivt_cost_multiplier * df.ivot * ((odt_skims['KNR_MIX_FARE']+dot_skims['KNRE_MIX_FARE']) + ((odt_skims['KNR_MIX_DDIST']+dot_skims['KNRE_MIX_DDIST']) *costPerMile)),,,,,,,,,,,,,,coef_ivt,,,, +util_KNR_MIX_Fare_and_operating_cost,KNR_MIX - Fare and operating cost,@ivt_cost_multiplier * df.ivot * (df.fare_discount_percent * (odt_skims['KNR_MIX_FARE']+dot_skims['KNRE_MIX_FARE']) + ((odt_skims['KNR_MIX_DDIST']+dot_skims['KNRE_MIX_DDIST']) *costPerMile)),,,,,,,,,,,,,,coef_ivt,,,, util_KNR_MIX_Ratio_of_KNR_access_distance_to_OD_distance,KNR_MIX - Ratio of KNR access distance to OD distance,@dacc_ratio * ((odt_skims['KNR_MIX_DDIST']+ dot_skims['KNRE_MIX_DDIST'])/ (od_skims['DIST']*2)),,,,,,,,,,,,,,coef_ivt,,,, util_KNR_MIX_Destination_zone_densityIndex,KNR_MIX - Destination zone densityIndex,@density_index_multiplier * df.dest_density_index,,,,,,,,,,,,,,coef_ivt,,,, util_KNR_MIX_Topology,KNR_MIX - Topology,@coef_topology_trn_multiplier * df.dest_topology,,,,,,,,,,,,,,coef_ivt,,,, diff --git a/activitysim/examples/example_semcog/configs/tour_mode_choice.yaml b/activitysim/examples/example_semcog/configs/tour_mode_choice.yaml index f736e5a1d..179aaf506 100755 --- a/activitysim/examples/example_semcog/configs/tour_mode_choice.yaml +++ b/activitysim/examples/example_semcog/configs/tour_mode_choice.yaml @@ -145,6 +145,27 @@ CONSTANTS: drvtrn_distpen_0_multiplier: 270 drvtrn_distpen_max: 15 density_index_multiplier: -0.2 + + transit_nopass_fare_discount_percent: + 1: 1.0 + 2: 1.0 + 3: 0.62 + 4: 1.0 + 5: 0.54 + 6: 0.62 + 7: 0.62 + 8: 1.0 + transit_pass_fare_discount_percent: + 1: 0.32 + 2: 0.49 + 3: 0.03 + 4: 0.54 + 5: 0.17 + 6: 0.37 + 7: 0.36 + 8: 1.0 + transit_subsidy_fare_discount_percent_worktour: 0.9 + # joint_sr2_ASC_no_auto: 0 # joint_sr2_ASC_auto_deficient: 0 # joint_sr2_ASC_auto_sufficient: 0 @@ -178,5 +199,6 @@ LOGSUM_CHOOSER_COLUMNS: - num_workers - value_of_time - free_parking_at_work - + - transit_pass_ownership + - transit_pass_subsidy MODE_CHOICE_LOGSUM_COLUMN_NAME: mode_choice_logsum \ No newline at end of file diff --git a/activitysim/examples/example_semcog/configs/tour_mode_choice_annotate_choosers_preprocessor.csv b/activitysim/examples/example_semcog/configs/tour_mode_choice_annotate_choosers_preprocessor.csv index c06241bea..d2d31869f 100755 --- a/activitysim/examples/example_semcog/configs/tour_mode_choice_annotate_choosers_preprocessor.csv +++ b/activitysim/examples/example_semcog/configs/tour_mode_choice_annotate_choosers_preprocessor.csv @@ -83,3 +83,16 @@ local,_DF_IS_TOUR,'tour_type' in df.columns destination in central business district,destination_in_cbd,"(reindex(land_use.AreaType, df[dest_col_name]) < setting('cbd_threshold')) * 1" #,,FIXME diagnostic #,sov_dist_rt,(odt_skims['SOV_DIST'] + dot_skims['SOV_DIST']) +#,,fare discounts (no discount for use in logsums) +,ptype,df.ptype if _DF_IS_TOUR else 1 +,transit_pass_ownership,df.transit_pass_ownership if _DF_IS_TOUR else 0 +,transit_pass_subsidy,df.transit_pass_subsidy if _DF_IS_TOUR else 0 +,tour_type,df.tour_type if _DF_IS_TOUR else 'other' +,fare_nopass_discount_percent,"ptype.map({k: v for k, v in transit_nopass_fare_discount_percent.items()})" +,fare_pass_discount_percent,"ptype.map({k: v for k, v in transit_pass_fare_discount_percent.items()})" +,fare_subsidy_discount_percent,"np.where(tour_type=='work', transit_subsidy_fare_discount_percent_worktour, 1)" +,fare_discount_percent_ff,"np.where((transit_pass_ownership == False) & (transit_pass_subsidy == False), fare_nopass_discount_percent, 1)" +,fare_discount_percent_tf,"np.where((transit_pass_ownership == True) & (transit_pass_subsidy == False), fare_pass_discount_percent, 1)" +,fare_discount_percent_ft,"np.where((transit_pass_ownership == False) & (transit_pass_subsidy == True), fare_nopass_discount_percent * (1-fare_subsidy_discount_percent), 1)" +,fare_discount_percent_tt,"np.where((transit_pass_ownership == True ) & (transit_pass_subsidy == True), fare_pass_discount_percent * (1-fare_subsidy_discount_percent), 1)" +,fare_discount_percent,fare_discount_percent_ff * fare_discount_percent_tf * fare_discount_percent_ft * fare_discount_percent_tt \ No newline at end of file diff --git a/activitysim/examples/example_semcog/configs/transit_pass_ownership.csv b/activitysim/examples/example_semcog/configs/transit_pass_ownership.csv new file mode 100644 index 000000000..15a053d16 --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_ownership.csv @@ -0,0 +1,21 @@ +Label,Description,Expression,no_pass,pass +util_ft,Full-time worker,@df.pemploy==PEMPLOY_FULL,0,coef_ft_pass +util_pt,Part-time worker,@df.pemploy==PEMPLOY_PART,0,coef_pt_pass +util_un,University/College,@df.ptype==PTYPE_SCHOOL,0,coef_un_pass +util_nw,Non-working adult,@df.ptype==PTYPE_NONWORK,0,coef_nw_pass +util_rt,Retired,@df.ptype==PTYPE_RETIRED,0,coef_rt_pass +util_inc1,0-$9k,"@df.income.between(0, 9000)",0,coef_inc1_pass +util_inc2,$10-$24k,"@df.income.between(10000, 24000)",0,coef_inc2_pass +util_inc3,$25-$34k,"@df.income.between(25000,34000)",0,coef_inc3_pass +util_inc4,$35-$49k,"@df.income.between(35000,49000)",0,coef_inc4_pass +util_inc10,$250k+,@df.income >= 250000,0,coef_inc10_pass +#util_na20,NAICS 20 (mining/utilities/construct),@df.industry==20,0,coef_na20_pas +#util_na30,NAICS 30 (manufacturing,@df.industry==30,0,coef_na30_pas +#util_na50,NAICS 50 (Info/Fin/insur/real estate/prof/sci/tech/manage/admin),@df.industry==50,0,coef_na50_pas +#util_na70,NAICS 70 (Entertain/accom),@df.industry==70,0,coef_na70_pas +#util_na80,NAICS 80 (Other services),@df.industry==80,0,coef_na80_pas +#util_publ,NAICS 90 (Public admin),@df.industry==90,0,coef_publ_pas +#approximate measure for the time being,,, +util_wrkamt,Auto minus transit time (work),@df.work_auto_savings * -1,0,coef_wrkamt_pas +util_subs,Subsidy offered,@df.transit_pass_subsidy,0,coef_subs_pas +utils_pass_asc,Constant,1,0,coef_pass_asc diff --git a/activitysim/examples/example_semcog/configs/transit_pass_ownership.yaml b/activitysim/examples/example_semcog/configs/transit_pass_ownership.yaml new file mode 100644 index 000000000..5cb754b4a --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_ownership.yaml @@ -0,0 +1,7 @@ + +SPEC: transit_pass_ownership.csv +COEFFICIENTS: transit_pass_ownership_coeffs.csv + +#LOGIT_TYPE: NL +LOGIT_TYPE: MNL + diff --git a/activitysim/examples/example_semcog/configs/transit_pass_ownership_coeffs.csv b/activitysim/examples/example_semcog/configs/transit_pass_ownership_coeffs.csv new file mode 100644 index 000000000..aa756b4c0 --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_ownership_coeffs.csv @@ -0,0 +1,20 @@ +coefficient_name,coefficient_name,value,constrain +coef_ft_pass,Full-time worker,2.034739841,F +coef_pt_pass,Part-time worker,1.934451611,F +coef_un_pass,University/College,2.38777737,F +coef_nw_pass,Non-working adult,1.520740664,F +coef_rt_pass,Retired,1.963879497,F +coef_inc1_pass,0-$9k,0.609753946,F +coef_inc2_pass,$10-$24k,0.421989203,F +coef_inc3_pass,$25-$34k,0.2119704,F +coef_inc4_pass,$35-$49k,0.139201682,F +coef_inc10_pass,$250k+,-0.169998314,F +coef_wrkamt_pas,Auto minus transit time (work),0.001934995,F +coef_na20_pas,NAICS 20 (mining/utilities/construct),-0.324742563,F +coef_na30_pas,NAICS 30 (manufacturing),-0.473249951,F +coef_na50_pas,NAICS 50 (Info/Fin/insur/real estate/prof/sci/tech/manage/admin),0.2731,F +coef_na70_pas,NAICS 70 (Entertain/accom),0.219432837,F +coef_na80_pas,NAICS 80 (Other services),-0.585251651,F +coef_publ_pas,NAICS 90 (Public admin),0.30410587,F +coef_subs_pas,Subsidy offered,1.967569275,F +coef_pass_asc,Constant,-3.932862618,F diff --git a/activitysim/examples/example_semcog/configs/transit_pass_subsidy.csv b/activitysim/examples/example_semcog/configs/transit_pass_subsidy.csv new file mode 100644 index 000000000..eaaff3fd0 --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_subsidy.csv @@ -0,0 +1,12 @@ +Label,Description,Expression,no_subsidy,subsidy +util_ft,Full-time worker,@df.pemploy==PEMPLOY_FULL,0,coef_ft +util_pt,Part-time worker,@df.pemploy==PEMPLOY_PART,0,coef_pt +util_un,University/College,@df.ptype==PTYPE_SCHOOL,0,coef_un +#util_na70,NAICS 70 (Entertain/accom),@df.industry==70,0,coef_na70 +#util_na80,NAICS 80 (Other services),@df.industry==80,0,coef_na80 +#util_publ,NAICS 90 (Public admin),@df.industry==90,0,coef_publ +#approximate measure for the time being,,, +util_tr_hh_emp,Household transit accessibility,@df.trOpRetail,0,coef_tr_hh_emp +#approximate measure for the time being,,, +util_pkcost,Daily parking cost (dollars),@df.PRKCST+df.OPRKCST,0,coef_pkcost +utils_sub_asc,Constant,1,0,coef_sub_asc diff --git a/activitysim/examples/example_semcog/configs/transit_pass_subsidy.yaml b/activitysim/examples/example_semcog/configs/transit_pass_subsidy.yaml new file mode 100644 index 000000000..5f5244134 --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_subsidy.yaml @@ -0,0 +1,7 @@ + +SPEC: transit_pass_subsidy.csv +COEFFICIENTS: transit_pass_subsidy_coeffs.csv + +#LOGIT_TYPE: NL +LOGIT_TYPE: MNL + diff --git a/activitysim/examples/example_semcog/configs/transit_pass_subsidy_coeffs.csv b/activitysim/examples/example_semcog/configs/transit_pass_subsidy_coeffs.csv new file mode 100644 index 000000000..8e4b511e0 --- /dev/null +++ b/activitysim/examples/example_semcog/configs/transit_pass_subsidy_coeffs.csv @@ -0,0 +1,10 @@ +coefficient_name,coefficient_name,value,constrain +coef_ft,Full-time worker,1.882665664,F +coef_pt,Part-time worker,1.360746182,F +coef_un,University/College,2.026985147,F +coef_na70,NAICS 70 (Entertain/accom),-0.659568416,F +coef_na80,NAICS 80 (Other services),-0.352588858,F +coef_publ,NAICS 90 (Public admin),0.864991571,F +coef_tr_hh_emp,Transit accessibility to households,0.049608562,F +coef_pkcost,Daily parking cost (dollars),0.060145818,F +coef_sub_asc,Constant,-5.138015944,F diff --git a/activitysim/examples/example_semcog/configs/work_from_home.csv b/activitysim/examples/example_semcog/configs/work_from_home.csv index 5f7e178fb..6ee474f29 100755 --- a/activitysim/examples/example_semcog/configs/work_from_home.csv +++ b/activitysim/examples/example_semcog/configs/work_from_home.csv @@ -3,7 +3,7 @@ util_work_from_home_constant,Constant for Working from home,1,coef_work_from_hom util_full_time_worker,Full time worker (1 if true),@df.pemploy==PEMPLOY_FULL,coef_full_time_worker,0 util_female_worker,Female Worker,@df.sex==2,coef_female_worker,0 util_female_worker_preschool_child,Female worker with a Preschool Child in Household,"@df.sex==2 & other_than(df.household_id, df.ptype == PTYPE_SCHOOL)",coef_female_worker_preschool_child,0 -util_access_to_workplaces,Accessibility to workplaces of the home mgra,@df.workplace_location_logsum,coef_access_to_workplaces,0 +util_access_to_workplaces,Accessibility to workplaces of the home mgra,@df.auPkTotal,coef_access_to_workplaces,0 util_non_working_adult_in_hh,Presence of Non Working Adult in the Household,"@other_than(df.household_id, df.ptype == PTYPE_NONWORK)",coef_non_working_adult_in_hh,0 util_education_ba_plus,Education Level Bachelors or higher degree,0,coef_education_ba_plus,0 util_low_income,Household income Less than 30K,@df.income < 30000,coef_low_income,0 diff --git a/activitysim/examples/example_semcog/configs/work_from_home.yaml b/activitysim/examples/example_semcog/configs/work_from_home.yaml index 58cb19374..4fa41b5ef 100755 --- a/activitysim/examples/example_semcog/configs/work_from_home.yaml +++ b/activitysim/examples/example_semcog/configs/work_from_home.yaml @@ -1,6 +1,4 @@ -# borrowed from free parking model - SPEC: work_from_home.csv COEFFICIENTS: work_from_home_coeffs.csv @@ -9,11 +7,13 @@ LOGIT_TYPE: MNL WORK_FROM_HOME_ALT: 0 -DEST_CHOICE_COLUMN_NAME: workplace_zone_id +# boolean column to filter choosers (True means keep) +CHOOSER_FILTER_COLUMN_NAME: is_worker # iterative what-if analysis example # omit these settings to not iterate -WORK_FROM_HOME_ITERATIONS: 3 -WORK_FROM_HOME_TARGET_PERCENT: 0.1 -WORK_FROM_HOME_TARGET_PERCENT_TOLERANCE: 0.01 -WORK_FROM_HOME_COEFFICIENT_CONSTANT: coef_work_from_home_constant \ No newline at end of file +# WORK_FROM_HOME_ITERATIONS: 3 +# WORK_FROM_HOME_CHOOSER_FILTER: is_worker +# WORK_FROM_HOME_TARGET_PERCENT: 0.1 +# WORK_FROM_HOME_TARGET_PERCENT_TOLERANCE: 0.01 +# WORK_FROM_HOME_COEFFICIENT_CONSTANT: coef_work_from_home_constant \ No newline at end of file diff --git a/activitysim/examples/example_semcog/configs/workplace_location.yaml b/activitysim/examples/example_semcog/configs/workplace_location.yaml index 3fc8ec4bc..54cbe3129 100755 --- a/activitysim/examples/example_semcog/configs/workplace_location.yaml +++ b/activitysim/examples/example_semcog/configs/workplace_location.yaml @@ -52,7 +52,7 @@ MODEL_SELECTOR: workplace CHOOSER_SEGMENT_COLUMN_NAME: income_segment # boolean column to filter choosers (True means keep) -CHOOSER_FILTER_COLUMN_NAME: is_worker +CHOOSER_FILTER_COLUMN_NAME: is_out_of_home_worker # FIXME - these are assigned to persons in annotate_persons. we need a better way to manage this # FIXME - these are not needed for this model and should be re/factored out diff --git a/activitysim/examples/example_semcog/configs_mp/settings.yaml b/activitysim/examples/example_semcog/configs_mp/settings.yaml index 5771ff9b3..07e443c48 100755 --- a/activitysim/examples/example_semcog/configs_mp/settings.yaml +++ b/activitysim/examples/example_semcog/configs_mp/settings.yaml @@ -6,13 +6,12 @@ fail_fast: True # - ------------------------- dev config multiprocess: True strict: False -mem_tick: 30 use_shadow_pricing: True ## - example sample households_sample_size: 0 -chunk_size: 1000000000 +chunk_size: 0 num_processes: 24 # - tracing @@ -29,11 +28,14 @@ models: - initialize_landuse - initialize_households - compute_accessibility + - work_from_home + - add_size_tables ### mp_households step - school_location - workplace_location - auto_ownership_simulate - free_parking + - telecommute_frequency - cdap_simulate - mandatory_tour_frequency - mandatory_tour_scheduling diff --git a/activitysim/examples/example_semcog/extensions/work_from_home.py b/activitysim/examples/example_semcog/extensions/work_from_home.py index 543b70eb9..f6e2728b2 100755 --- a/activitysim/examples/example_semcog/extensions/work_from_home.py +++ b/activitysim/examples/example_semcog/extensions/work_from_home.py @@ -23,19 +23,17 @@ def work_from_home( """ This model predicts whether a person (worker) works from home. The output from this model is TRUE (if works from home) or FALSE (works away from home). - The workplace location choice is overridden for workers who work from home - and set to -1. - """ trace_label = 'work_from_home' model_settings_file_name = 'work_from_home.yaml' choosers = persons_merged.to_frame() - choosers = choosers[choosers.workplace_zone_id > -1] + model_settings = config.read_model_settings(model_settings_file_name) + chooser_filter_column_name = model_settings.get('CHOOSER_FILTER_COLUMN_NAME') + choosers = choosers[choosers[chooser_filter_column_name]] logger.info("Running %s with %d persons", trace_label, len(choosers)) - model_settings = config.read_model_settings(model_settings_file_name) estimator = estimation.manager.begin_estimation('work_from_home') constants = config.get_model_constants(model_settings) @@ -66,8 +64,9 @@ def work_from_home( estimator.write_coefficients(coefficients_df) estimator.write_choosers(choosers) - # - iterative what-if if specified + # - iterative single process what-if adjustment if specified iterations = model_settings.get('WORK_FROM_HOME_ITERATIONS', 1) + iterations_chooser_filter = model_settings.get('WORK_FROM_HOME_CHOOSER_FILTER', None) iterations_coefficient_constant = model_settings.get('WORK_FROM_HOME_COEFFICIENT_CONSTANT', None) iterations_target_percent = model_settings.get('WORK_FROM_HOME_TARGET_PERCENT', None) iterations_target_percent_tolerance = model_settings.get('WORK_FROM_HOME_TARGET_PERCENT_TOLERANCE', None) @@ -91,9 +90,11 @@ def work_from_home( estimator=estimator) if iterations_target_percent is not None: - current_percent = ((choices == work_from_home_alt).sum() / len(choices)) - logger.info("Running %s iteration %i current percent %f target percent %f", - trace_label, iteration, current_percent, iterations_target_percent) + choices_for_filter = choices[choosers[iterations_chooser_filter]] + + current_percent = ((choices_for_filter == work_from_home_alt).sum() / len(choices_for_filter)) + logger.info("Running %s iteration %i choosers %i current percent %f target percent %f", + trace_label, iteration, len(choices_for_filter), current_percent, iterations_target_percent) if current_percent <= (iterations_target_percent + iterations_target_percent_tolerance @@ -114,8 +115,6 @@ def work_from_home( choices = (choices == work_from_home_alt) - dest_choice_column_name = model_settings['DEST_CHOICE_COLUMN_NAME'] - if estimator: estimator.write_choices(choices) choices = estimator.get_survey_values(choices, 'persons', 'work_from_home') @@ -124,7 +123,7 @@ def work_from_home( persons = persons.to_frame() persons['work_from_home'] = choices.reindex(persons.index).fillna(0).astype(bool) - persons[dest_choice_column_name] = np.where(persons.work_from_home is True, -1, persons[dest_choice_column_name]) + persons['is_out_of_home_worker'] = persons[chooser_filter_column_name] & ~persons['work_from_home'] pipeline.replace_table("persons", persons) diff --git a/activitysim/examples/example_semcog/test/regress/final_trips.csv b/activitysim/examples/example_semcog/test/regress/final_trips.csv index 993a07369..0a57e8f71 100644 --- a/activitysim/examples/example_semcog/test/regress/final_trips.csv +++ b/activitysim/examples/example_semcog/test/regress/final_trips.csv @@ -1,15 +1,19 @@ trip_id,person_id,household_id,tour_id,primary_purpose,trip_num,outbound,trip_count,purpose,destination,origin,destination_logsum,depart,trip_mode,mode_choice_logsum 1015768905,3096856,1247711,126971113,othmaint,1,True,1,othmaint,155,170,,24,SHARED3,-0.5224065888961006 1015768909,3096856,1247711,126971113,othmaint,1,False,1,Home,170,155,,24,SHARED3,-0.5214112548235572 -1015768937,3096858,1247711,126971117,social,1,True,1,social,170,170,,14,SHARED2,0.01835064949733467 -1015768941,3096858,1247711,126971117,social,1,False,1,Home,170,170,,18,SHARED2,0.01835064949733467 +1015768937,3096858,1247711,126971117,social,1,True,1,social,170,170,,29,SHARED2,0.018380193040923982 +1015768941,3096858,1247711,126971117,social,1,False,1,Home,170,170,,30,SHARED2,0.018380193040923982 +1015769409,3096857,1247711,126971176,work,1,True,1,work,158,170,,9,BIKE,-1.551361834854566 +1015769413,3096857,1247711,126971176,work,1,False,1,Home,170,158,,32,BIKE,-1.5954322251021176 +1015770001,3096859,1247711,126971250,school,1,True,1,school,160,170,,10,SCHOOLBUS,-1.106635583043288 +1015770005,3096859,1247711,126971250,school,1,False,1,Home,170,160,,28,SCHOOLBUS,-1.096217080563748 1015770153,3096860,1247711,126971269,escort,1,True,2,shopping,197,170,9.340663518005645,10,SHARED3,-0.38521051166029324 1015770154,3096860,1247711,126971269,escort,2,True,2,escort,169,197,,10,SHARED2,-0.5143323902010828 -1015770157,3096860,1247711,126971269,escort,1,False,1,Home,170,169,,10,SHARED3,0.1252561224106634 -1015770281,3096860,1247711,126971285,othdiscr,1,True,1,othdiscr,165,170,,30,WALK,-1.0876453953983702 -1015770285,3096860,1247711,126971285,othdiscr,1,False,1,Home,170,165,,36,WALK,-1.0876453135107786 -1015770329,3096860,1247711,126971291,school,1,True,1,school,161,170,,10,SHARED3,-1.114779051823783 -1015770333,3096860,1247711,126971291,school,1,False,1,Home,170,161,,24,SCHOOLBUS,-1.135220971635702 +1015770157,3096860,1247711,126971269,escort,1,False,1,Home,170,169,,11,SHARED3,0.1252561224106634 +1015770281,3096860,1247711,126971285,othdiscr,1,True,1,othdiscr,165,170,,23,WALK,-1.0876453989916266 +1015770285,3096860,1247711,126971285,othdiscr,1,False,3,escort,167,165,9.513677266467274,27,WALK,-0.4332948711405552 +1015770286,3096860,1247711,126971285,othdiscr,2,False,3,escort,163,167,10.062635404175836,28,WALK,-0.5801291209667215 +1015770287,3096860,1247711,126971285,othdiscr,3,False,3,Home,170,163,,29,WALK,-1.0333637435819232 1015770481,3096861,1247711,126971310,escort,1,True,1,escort,209,170,,22,WALK,-1.572053385843179 1015770485,3096861,1247711,126971310,escort,1,False,1,Home,170,209,,22,WALK,-1.4752747100222015 1015770489,3096861,1247711,126971311,escort,1,True,1,escort,179,170,,11,SHARED3,0.02214822606002906 @@ -36,14 +40,12 @@ trip_id,person_id,household_id,tour_id,primary_purpose,trip_num,outbound,trip_co 1020378073,3110908,1256006,127547259,school,1,True,1,school,173,173,,8,SCHOOLBUS,-0.6001706576288278 1020378077,3110908,1256006,127547259,school,1,False,2,social,167,173,5.486995392285553,21,TAXI,-2.1471364017050782 1020378078,3110908,1256006,127547259,school,2,False,2,Home,173,167,,22,SCHOOLBUS,-0.8406531484451233 -1021352089,3113878,1258160,127669011,eatout,1,True,1,eatout,187,213,,19,SHARED2,0.1631845317031507 -1021352093,3113878,1258160,127669011,eatout,1,False,1,Home,213,187,,22,SHARED2,0.15088021564151372 -1021352185,3113878,1258160,127669023,othdiscr,1,True,1,othdiscr,157,213,,31,DRIVEALONE,-0.2452930884553396 -1021352189,3113878,1258160,127669023,othdiscr,1,False,1,Home,213,157,,35,SHARED3,-0.2936021763377735 -1021352209,3113878,1258160,127669026,othmaint,1,True,1,othmaint,167,213,,13,DRIVEALONE,0.19636880472540794 -1021352213,3113878,1258160,127669026,othmaint,1,False,3,social,167,167,14.336148130876564,13,TNC_SHARED,0.518268132243031 -1021352214,3113878,1258160,127669026,othmaint,2,False,3,escort,168,167,13.447672266174596,13,TNC_SHARED,0.4497319082984743 -1021352215,3113878,1258160,127669026,othmaint,3,False,3,Home,213,168,,13,DRIVEALONE,0.12525643132946093 +1021352137,3113878,1258160,127669017,shopping,1,True,1,shopping,208,213,,31,SHARED2,0.2342801115423382 +1021352141,3113878,1258160,127669017,shopping,1,False,1,Home,213,208,,33,SHARED2,0.21393799448899808 +1021352273,3113878,1258160,127669034,social,1,True,1,social,200,213,,33,WALK,-0.5375736471412192 +1021352277,3113878,1258160,127669034,social,1,False,1,Home,213,200,,33,WALK,-0.515560757105025 +1021352297,3113878,1258160,127669037,work,1,True,1,work,149,213,,9,DRIVEALONE,-0.022708832857146595 +1021352301,3113878,1258160,127669037,work,1,False,1,Home,213,149,,26,DRIVEALONE,-0.027889305701053062 1021563089,3114521,1258716,127695386,othdiscr,1,True,1,othdiscr,184,198,,14,WALK,-2.200526355762286 1021563093,3114521,1258716,127695386,othdiscr,1,False,1,Home,198,184,,18,WALK,-2.2005370524197625 1060133985,3232115,1302573,132516748,shopping,1,True,1,shopping,172,159,,16,TNC_SHARED,-0.3624498540609999 diff --git a/docs/core.rst b/docs/core.rst index f819b18c1..053a58abe 100644 --- a/docs/core.rst +++ b/docs/core.rst @@ -69,7 +69,7 @@ API Pipeline ~~~~~~~~ -Data pipeline manager, which manages the list of model steps, runs them via orca, reads +Data pipeline manager, which manages the list of model steps, runs them, reads and writes data tables from/to the pipeline datastore, and supports restarting of the pipeline at any model step. @@ -413,12 +413,89 @@ Cache API Helpers ------- +.. index:: chunk_size +.. _chunk_size: .. _chunk_in_detail: Chunk ~~~~~ -Chunking management +Chunking management. + +.. note:: + The definition of chunk_size has changed from previous versions of ActivitySim. The revised definition + of chunk_size simplifies model setup since it is the approximate amount of RAM available to + ActivitySim as opposed to the obscure number of doubles (64-bit numbers) in a chunk of a choosers table. + +The ``chunk_size`` is the approximate amount of RAM in gigabytes to allocate to ActivitySim for batch +processing choosers across all processes. It is specified in bytes, for example ``chunk_size: 500_000_000_000`` is 500 GB. +If set to 0 then no chunking will be performed and ActivitySim will attempt to solve all the +choosers at once across all the processes. Chunking is required when all the chooser data required +to process all the choosers cannot fit within the available RAM and so ActivitySim must split the set of choosers into +batches and then process the batches in sequence. + +Configuration of the ``chunk_size`` depends on several parameters: + +* The amount of machine RAM +* The number of machine processors (CPUs/cores) +* The number of households (and number of zones for aggregate models) +* The amount of headroom required for shared data across processes, such as the skims/network LOS data +* The desired runtimes + +An example helps illustrate configuration of the ``chunk_size``. If the example model has 1 million households and the +current submodel is auto ownership, then there are 1 million choosers since every household participates in the auto +ownership model. In single process mode, ActivitySim would create one chooser table with 1 million rows, assuming this table +and the additional extra data such as the skims can fit within the available memory (RAM). If the 1 million row table cannot fit +within memory then chunking needs to be setup to split the choosers table into batches that are processed in sequence and small +enough to fit within the available memory. For example, the choosers table is split into 2 chunks of 500,000 choosers each and then +processed in sequence. In multi process mode, for example with 10 processes, ActivitySim splits the 1 million households into 10 +mini processes each with 100,000 households. Then for the auto ownership submodel, the chooser table within each process is the +100,000 choosers and there must be enough RAM to simultaneously solve all 10 processes with each 100,000 choosers at once. If not, +then chunking can be setup so each mini process table of choosers is split into chunks for sequential processing, for example from +10 tables of 100,000 choosers to 20 tables of 50,000 choosers. + +If the user desires the fastest runtimes possible given their hardware, model inputs, and model configuration, then ActivitySim +should be configured to use most of the CPUs/cores (physical, not virtual), most of the RAM, and with the :ref:`mkl_settings`. For +example, if the machine has 12 cores and 256 GB of RAM, then try configuring the model with ``num_processes: 10`` and +``chunk_size: 0`` to start and seeing if the model can fit the problem into the available RAM. If not, then try setting ``chunk_size`` +to something like 225 GB, ``chunk_size: 225_000_000_000``. Experimentation of the desired configuration of the CPUs and RAM should be done +for each new machine and model setup (with respect to the number of households, skims, and model configuration). In general, more processors +means faster runtimes and more RAM means faster runtimes, but the relationship of processors to RAM is not linear as processors can only +go so fast and because there is more to runtime than processors and RAM, including cache speed, disk speed, etc. Also, the amount of RAM +to use is approximate and ActivitySim often pushes a bit above the user specified amount due to pandas/numpy memory spikes for +memory intensive operations and so it is recommended to leave some RAM unallocated. The exact amount to leave unallocated depends on the +parameters above, but experimentation with the ActivitySim examples suggests that more processors + +To configure reasonable chunking behavior, ActivitySim must first be trained with the model setup and machine. To do so, first +run the model with ``chunk_training_mode: training``. This tracks the amount of memory used by each table by submodel and writes the results +to a cache file that is then re-used for production runs. This training mode is slower than production mode since it does +significantly more memory inspection. For a training mode run, set ``num_processors`` to about 80% of the avaiable logical processors and ``chunk_size`` +to about 80% of the available RAM. This will run the model and create the ``chunk_cache.csv`` file for reuse. After creating +the ``chunk_cache.csv`` file, the model can be run with ``chunk_training_mode: production`` and the desired ``num_processors`` and ``chunk_size``. +The software trains on the size of problem so the cache file can be re-used and only needs to be updated due to significant revisions in population, +expression, or skims/network LOS. If run in production mode and no cache file is found then ActivitySim falls back to training mode. Finally, a third +``chunk_training_mode`` is adaptive, which if a cache file exists, runs the model with the starting cache settings but also updates the cache settings based +on additional memory inspection. This may additionally improve the cache setttings to reduce runtimes when run in production mode. If ``resume_after`` is set, +then the chunk cache file is not overwritten in cache directory since the list of submodels would be incomplete. + +The following ``chunk_methods`` are supported to calculate memory overhead when chunking is enabled: + +* bytes - expected rowsize based on actual size (as reported by numpy and pandas) of explicitly allocated data this can underestimate overhead due to transient data requirements of operations (e.g. merge, sort, transpose) +* uss - expected rowsize based on change in uss both as a result of explicit data allocation, and readings by MemMonitor sniffer thread that measures transient uss during time-consuming numpy and pandas operations +* hybrid_uss - hybrid_uss avoids problems with pure uss, especially with small chunk sizes (e.g. initial training chunks) as numpy may recycle cached blocks and show no increase in uss even though data was allocated and logged + +Target is based on USS (Unique Set Size) as reported by psutil.memory_full_info. USS is the memory which is private to +a process and which would be freed if the process were terminated. This is the metric that most closely matches the rather +vague notion of memory "in use" (the meaning of which is difficult to pin down in operating systems with virtual memory +where memory can (but sometimes can't) be swapped or mapped to disk. ``hybrid_uss`` perform best and is therefore the default. + +Additional chunking settings: + +* min_available_chunk_ratio: 0.05 # minimum fraction of total chunk_size to reserve for adaptive chunking +* default_initial_rows_per_chunk: 500 # initial number of chooser rows for first chunk in training mode, when there is no pre-existing chunk_cache to set initial value, ordinarily bigger is better as long as it is not so big it causes memory issues (e.g. accessibility with lots of zones) +* keep_chunk_logs: True # whether to preserve or delete subprocess chunk logs when they are consolidated at end of multiprocess run +* keep_mem_logs: True # whether to preserve or delete subprocess mem logs when they are consolidated at end of multiprocess run + API ^^^ @@ -453,7 +530,7 @@ API Inject ~~~~~~ -Wrap ORCA class to make it easier to track and manage interaction with the data pipeline. +Model orchestration and data pipeline interaction. API ^^^ diff --git a/docs/development.rst b/docs/development.rst index 00c46fdb6..f70625052 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -29,14 +29,15 @@ debugging of problems with data and/or calculations. It also allows for checkpo resources, such as the state of each person at a point in the model simulation. Checkpointing also allows for regression testing of results at specified points in overall model run. -Earlier versions of ActivitySim depended on `ORCA `__, an orchestration/pipeline tool -that defines model steps, dynamic data sources, and connects them to processing functions. ORCA defined dynamic data tables -based on pandas DataFrames, columns based on pandas Series, and injectables (functions). Model steps -were executed as steps registered with the ORCA engine. Over time ActivitySim has extended ORCA's functionality by +ActivitySim's model orchestrator makes use of depedency injection, which is where one object (or method) +supplies the dependencies of another object. Dependency injection is done by the :mod:`activitysim.core.inject` +module, which wraps `ORCA `__, an orchestration/pipeline tool. Inject defines model +steps, dynamic data sources, and connects them to processing functions. It also defines dynamic data tables +based on pandas DataFrames, columns based on pandas Series, and injectables (functions). Model steps are executed +as steps registered with the model orchestration engine. Over time Inject has extended ORCA's functionality by adding a :ref:`pipeline_in_detail` that runs a series of model steps, manages the state of the data tables throughout the model run, allows for restarting at any model step, and integrates with the -random number generation procedures (see :ref:`random_in_detail`). As a result, ORCA is no longer a dependency of -the system. See :mod:`activitysim.core.inject` for more information. +random number generation procedures (see :ref:`random_in_detail`). Data Handling ~~~~~~~~~~~~~ @@ -93,12 +94,12 @@ Models An activitysim travel model is made up of a series of models, or steps in the data pipeline. A model typically does the following: - * registers an ORCA step that is called by the model runner + * registers an Inject step that is called by the model runner * sets up logging and tracing - * gets the relevant input data tables from ORCA + * gets the relevant input data tables from Inject * gets all required settings, config files, etc. * runs a data preprocessor on each input table that needs additional fields for the calculation - * solves the model in chunks of data table rows + * solves the model in chunks of data table rows if needed * runs a data postprocessor on the output table data that needs additional fields for later models * writes the resulting table data to the pipeline diff --git a/docs/estimation.rst b/docs/estimation.rst index af844990f..da9a7ad52 100644 --- a/docs/estimation.rst +++ b/docs/estimation.rst @@ -59,7 +59,7 @@ To run the estimation example, do the following: :: cd test_example_estimation_sf - activitysim run -c configs_estimation/configs -c configs -o output -d data_test + activitysim run -c configs_estimation/configs -c configs -o output -d data_sf * ActivitySim should log some information and write outputs to the output folder, including EDBs for each submodel. The estimation example runs for about 15 minutes and writes EDBs for 2000 households. @@ -72,7 +72,7 @@ Additional settings for running ActivitySim in estimation mode are specified in * ``enable`` - enable estimation, either True or False * ``bundles`` - the list of submodels for which to write EDBs -* ``survey_tables`` - the list of input ActivitySim format survey tables with observed choices to override model simulation choices in order to write EDBs. These tables are the output of the ``scripts\infer.py`` script that pre-processes the ActivitySim format household travel survey files +* ``survey_tables`` - the list of input ActivitySim format survey tables with observed choices to override model simulation choices in order to write EDBs. These tables are the output of the ``scripts\infer.py`` script that pre-processes the ActivitySim format household travel survey files for the example data and submodels .. _estimation_example_notebooks: diff --git a/docs/examples.rst b/docs/examples.rst index 6d6e7369a..9377b7124 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -9,25 +9,25 @@ Examples This page describes the example models included with ActivitySim. The current examples are: -+---------------------------------+---------------------------------------------+--------------+ -| Example | Purpose | Zone Systems | -+=================================+=============================================+==============+ -| :ref:`example_mtc` | Primary example; MTC travel model one | 1 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_estimation` | Estimation example with example_mtc | 1 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_multiple_zones` | Simple test of 2 or 3 zone system models | 2 or 3 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_marin` | 3 zone system tour mode choice only example | 3 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_arc` | ARC example under development | 1 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_semcog` | SEMCOG example under development | 1 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_psrc` | PSRC example under development | 2 | -+---------------------------------+---------------------------------------------+--------------+ -| :ref:`example_sandag` | SANDAG example under development | 3 | -+---------------------------------+---------------------------------------------+--------------+ ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| Example | Purpose | Zone Systems | Status | ++=================================+===========================================================+==============+======================+ +| :ref:`example_mtc` | Primary MTC travel model one example | 1 | Mature | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_estimation` | Estimation example with example_mtc | 1 | Mature | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_multiple_zones` | 2 or 3 zone system example using example_mtc data | 2 or 3 | Simple test example | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_marin` | 3 zone system example using Marin tour mode choice model | 3 | Mature | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_arc` | ARC agency example | 1 | In development | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_semcog` | SEMCOG agency example | 1 | In development | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_psrc` | PSRC agency example | 2 | In development | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ +| :ref:`example_sandag` | SANDAG agency example | 3 | In development | ++---------------------------------+-----------------------------------------------------------+--------------+----------------------+ .. note:: The `example_manifest.yaml `_ @@ -301,7 +301,7 @@ In order to run example_mtc, you first need the input files in the ``data`` fold * taz_skims: skims.omx - an OMX matrix file containing the MTC TM1 skim matrices for a subset of zones. The time period for the matrix must be represented at the end of the matrix name and be seperated by a double_underscore (e.g. BUS_IVT__AM indicates base skim BUS_IVT with a time period of AM). -These files are used in the tests as well and are in the ``activitysim\abm\test\data`` folder. The full set +These files are used in the tests as well. The full set of MTC TM1 households, persons, and OMX skims are on the ActivitySim `resources repository `__. Additional details on these files is available in the original `Travel Model 1 repository `_, @@ -499,12 +499,15 @@ is the main settings file for the model run. This file includes: * ``keep_columns`` - columns to keep once read in to memory to save on memory needs and file I/O * ``h5_tablename`` - table name if reading from HDF5 and different from `tablename` -* ``create_input_store`` - write new 'input_data.h5' file to outputs folder using CSVs from `input_table_list` to use for subsequent model runs +* ``create_input_store`` - write new `input_data.h5` file to outputs folder using CSVs from `input_table_list` to use for subsequent model runs * ``households_sample_size`` - number of households to sample and simulate; comment out to simulate all households * ``trace_hh_id`` - trace household id; comment out for no trace * ``trace_od`` - trace origin, destination pair in accessibility calculation; comment out for no trace -* ``chunk_size`` - batch size for processing choosers, see :ref:`chunk_size`. +* ``chunk_size`` - approximate amount of RAM in gigabytes to allocate to ActivitySim for batch processing choosers, see :ref:`chunk_size`. +* ``chunk_training_mode`` - training or production, see :ref:`chunk_size`. +* ``checkpoints`` - if True, checkpoints are written at each step; if False, no intermediate checkpoints will be written before the end of run; also supports an explicit list of models to checkpoint * ``check_for_variability`` - disable check for variability in an expression result debugging feature in order to speed-up runtime +* ``log_alt_losers`` - if True, log (i.e. write out) expressions for debugging that return prohibitive utility values that exclude all alternatives. This feature slows down the model run and so it is recommended for debugging purposes only. * ``use_shadow_pricing`` - turn shadow_pricing on and off for work and school location * ``output_tables`` - list of output tables to write to CSV or HDF5 * ``want_dest_choice_sample_tables`` - turn writing of sample_tables on and off for all models @@ -539,7 +542,7 @@ Python/pandas/numpy expressions, alternatives, and other settings used by each m alternatives file since the alternatives are not easily described as columns in the expressions file. An example of this is the ``non_mandatory_tour_frequency_alternatives.csv`` file, which lists each alternative as a row and each columns indicates the number of non-mandatory tours by purpose. The set of files for the example_mtc are below. The -:ref:`example_arc` example added some additional submodels and files as well. +:ref:`example_arc` example and :ref:`example_semcog` example added additional submodels. +------------------------------------------------+--------------------------------------------------------------------+ | Model | Specification Files | @@ -723,36 +726,6 @@ columns indicates the number of non-mandatory tours by purpose. The set of fil | | - write_trip_matrices_annotate_trips_preprocessor.csv | +------------------------------------------------+--------------------------------------------------------------------+ -.. index:: chunk_size -.. _chunk_size: - -Chunk size -^^^^^^^^^^ - -The ``chunk_size`` is the number of doubles (64-bit numbers) in a chunk of a choosers table. It is approximately the number -of rows times the number of columns. If set to zero, no chunking will be performed. If there is a chunk size setting, -dynamic chunking will start out using the estimated number of rows per chunk calculation performed by the various -submodels but will adjust the number of chooser rows per chunk in light of how much memory is actually -used by the chunk iteration. - -Dynamic chunking will do its best to adjust chunks to hit the specified chunk size, not the available memory. -So if the chunk size setting is too high, it will do its best to adjust the number of rows per chunk to -achieve that mark, even if there is not enough RAM to accommodate it. Therefore, the user needs to set a guestimated -chunk_size and adjust it upwards or downwards according to the observed memory footprint activitysim leaves -relative to the available resources. - -Logging -^^^^^^^ - -Included in the ``configs`` folder is the ``logging.yaml``, which configures Python logging -library and defines two key log files: - -* ``activitysim.log`` - overall system log file -* ``hhtrace.log`` - household trace log file if tracing active -* ``timing_log.txt`` - submodel step runtimes - -Refer to the :ref:`tracing` section for more detail on tracing. - .. _model_steps : Pipeline @@ -797,7 +770,7 @@ The ``models`` setting contains the specification of the data pipeline model ste - write_trip_matrices - write_tables -These model steps must be registered orca steps, as noted below. If you provide a ``resume_after`` +These model steps must be registered Inject steps, as noted below. If you provide a ``resume_after`` argument to :func:`activitysim.core.pipeline.run` the pipeliner will load checkpointed tables from the checkpoint store and resume pipeline processing on the next model step after the specified checkpoint. @@ -812,9 +785,6 @@ The model is run by calling the :func:`activitysim.core.pipeline.run` method. pipeline.run(models=_MODELS, resume_after=resume_after) -.. note:: - Users can skip persisting tables to the pipeline data store on disk by adding an underscore prefix to the models in the - models list in the settings file: _school_location instead of school_location. This will cut down on the disk writes. .. _example_run : @@ -841,18 +811,18 @@ To run the example, do the following: :: cd my_test_example - activitysim -c configs -d data -o output + activitysim run -c configs -d data -o output -* ActivitySim should log some information and write outputs to the output folder. +* ActivitySim will log progress and write outputs to the output folder. -The example should complete within a couple minutes since it is running a small sample of households. +The example should run in a few minutes since it runs a small sample of households. .. note:: - A customizable run script for power users can be found in the `Github repo `__. + A customizable run script for power users can be found in the `Github repo `__. This script takes many of the same arguments as the ``activitysim run`` command, including paths to - ``--config``, ``--data``, and ``--output`` directories. It looks for these folders in the current + ``--config``, ``--data``, and ``--output`` directories. The script looks for these folders in the current working directory by default. :: @@ -872,33 +842,58 @@ include the multiprocessing configuration settings via settings file inheritance The multiprocessing example also writes outputs to the output folder. -The default multiprocessed example is configured to run with two processors: ``num_processes: 2``. Additional more performant configurations are -included and commented out in the example settings file. For example, the 100 percent sample multiprocessing example was run on a Windows Server -machine with 28 cores @ 2.56GHz and 224GB RAM with the configuration below. See :ref:`multiprocessing` for more information. +The default multiprocessed example is configured to run with two processors and no chunking: ``num_processes: 2`` and ``chunk_size: 0``. Additional more performant +configurations are included and commented out in the example settings file. For example, the 100 percent sample full scale multiprocessing example - ``example_mtc_full`` - +was run on a Windows Server machine with 28 cores and 256GB RAM with the configuration below. See :ref:`multiprocessing` and +:ref:`chunk_size` for more information. If the machine does not have enough RAM to solve all the choosers at once then chunking needs to +be configured, as discussed below. :: - households_sample_size: 0 + households_sample_size: 0 num_processes: 24 + chunk_size: 0 + chunk_training_mode: production -.. note:: - Anaconda Python on Windows uses the `Intel Math Kernel Library `__ for - many of its computationally intensive low-level C/C++ calculations. By default, MKL threads many of its routines - in order to be performant out-of-the-box. However, for ActivitySim multiprocessing, which processes households in - parallel since they are largely independent of one another, it can be advantageous to override threading within - processes and instead let ActivitySim run each process with one computing core or thread. In order to do so, - override the MKL number of threads setting via a system environment variable that is set before running the model. - In practice, this means before running the model, first set the MKL number of threads variable via the command - line as follows: SET MKL_NUM_THREADS=1 +.. _configuring_chunking : + +Configuring chunking +^^^^^^^^^^^^^^^^^^^^ + +As described in :ref:`chunk_size`, to configure reasonable chunking behavior, ActivitySim must first be trained with the +model setup and machine. The steps to configure chunking behavior are: + +* Run the full scale model with ``chunk_training_mode: training``. Set ``num_processors`` to about 80% of the avaiable logical processors and ``chunk_size`` to about 80% of the available RAM. This will run the model and create the ``chunk_cache.csv`` file for reuse. +* Run the full scale model with ``chunk_training_mode: production``. Experiment with different ``num_processors`` and ``chunk_size`` settings depending on desired runtimes and machine resources. Outputs ~~~~~~~ -The key output of ActivitySim is the HDF5 data pipeline file ``outputs\pipeline.h5``. This file contains a copy -of each key data table after each model step in which the table was modified. The example also writes the final tables to -CSV files by using the :func:`activitysim.core.pipeline.get_table` method via the ``write_tables`` step. -This method returns a pandas DataFrame, which is then written to a CSV file by the ``write_tables`` step. +The key output of ActivitySim is the HDF5 data pipeline file ``outputs\pipeline.h5``. By default, this datastore file +contains a copy of each data table after each model step in which the table was modified. + +The example also writes the final tables to CSV files by using the ``write_tables`` step. This step calls +:func:`activitysim.core.pipeline.get_table` to get a pandas DataFrame and write a CSV file for each table +specified in ``output_tables`` in the settings.yaml file. + +:: + + output_tables: + h5_store: False + action: include + prefix: final_ + tables: + - checkpoints + - accessibility + - land_use + - households + - persons + - tours + - trips + - joint_tour_participants + + The ``other_resources\scripts\make_pipeline_output.py`` script uses the information stored in the pipeline file to create the table below for a small sample of households. The table shows that for each table in the pipeline, the number of rows @@ -972,14 +967,28 @@ restarting the pipeline at any step. | workplace_modeled_size | workplace_location | 1454 | 4 | +-----------------------------------+------------------------------------+------+------+ +.. index:: logs +.. _logs : + +Logging +^^^^^^^ + +Included in the ``configs`` folder is the ``logging.yaml``, which configures Python logging +library. The following key log files are created with a model run: + +* ``activitysim.log`` - overall system log file +* ``timing_log.csv`` - submodel step runtimes +* ``omnibus_mem.csv`` - multiprocessed submodel memory usage + +Refer to the :ref:`tracing` section for more detail on tracing. + +Trip Matrices +^^^^^^^^^^^^^ + The ``write_trip_matrices`` step processes the trips table to create open matrix (OMX) trip matrices for assignment. The matrices are configured and coded according to the expressions in the model step trip annotation file. See :ref:`write_trip_matrices` for more information. -ActivitySim also writes log and trace files to the ``outputs`` folder. The activitysim.log file, -which is the overall log file is always produced. If tracing is specified, then trace files are -output as well. - .. _tracing : Tracing @@ -989,8 +998,7 @@ There are two types of tracing in ActivtiySim: household and origin-destination is specified, then ActivitySim will output a comprehensive set (i.e. hundreds) of trace files for all calculations for all household members: -* ``hhtrace.log`` - household trace log file, which specifies the CSV files traced. The order of output files is consistent with the model sequence. -* ``various CSV files`` - every input, intermediate, and output data table - chooser, expressions/utilities, probabilities, choices, etc. - for the trace household for every sub-model +* ``Several CSV files`` - each input, intermediate, and output data table - chooser, expressions/utilities, probabilities, choices, etc. - for the trace household for each sub-model If an OD pair trace is specified, then ActivitySim will output the acessibility calculations trace file: @@ -1070,16 +1078,15 @@ ActivitySim supports models with multiple zone systems. The three versions of m Regions that have an interest in more precise transit forecasts may wish to adopt the three-zone approach, while other regions may adopt the one or two-zone approach. The microzone version requires coding households and land use at the microzone level. Typically an all-streets network is used for representation of non-motorized impedances. This requires a routable all-streets network, with centroids and connectors for microzones. If the three-zone system is adopted, procedures need to be developed to code TAPs from transit stops and populate the all-street network with TAP centroids and centroid connectors. A model with transit virtual path building takes longer to run than a traditional TAZ only model, but it provides a much richer framework for transit modeling. -Example configurations and inputs for two and three-zone system models are described below. - .. note:: - The two and three zone system test examples are dummy examples developed from the TM1 example. To develop the two zone system + The two and three zone system test examples are simple test examples developed from the TM1 example. To develop the two zone system example, TM1 TAZs were labeled MAZs, each MAZ was assigned a TAZ, and MAZ to MAZ impedance files were created from the TAZ to TAZ impedances. To develop the three zone example system example, the TM1 TAZ model was further transformed so select TAZs also became TAPs and TAP to TAP skims and MAZ to TAP impedances files were created. While sufficient for initial development, these examples were insufficient for validation and performance testing of the new software. As a result, the :ref:`example_marin` example was created. +Example simple test configurations and inputs for two and three-zone system models are described below. Examples ~~~~~~~~ @@ -1121,7 +1128,7 @@ Two Zone In ``settings.yaml``: -* ``want_dest_choice_presampling`` - enable presampling for multizone systems, which means first select a TAZ using the sampling model and then select a microzone within the TAZ based on the microzone's share of TAZ size term. +* ``want_dest_choice_presampling`` - enable presampling for multizone systems, which means first select a TAZ using the sampling model and then select a microzone within the TAZ based on the microzone share of TAZ size term. In ``network_los.yaml``: @@ -1130,7 +1137,13 @@ The additional two zone system settings and inputs are described and illustrated * ``zone_system`` - set to 2 for two zone system * ``maz`` - MAZ data file, with MAZ ID, TAZ, and land use and other MAZ attributes * ``maz_to_maz:tables`` - list of MAZ to MAZ impedance tables. These tables are read as pandas DataFrames and the columns are exposed to expressions. -* ``maz_to_maz:max_blend_distance`` - in order to avoid cliff effects, the lookup of MAZ to MAZ impedance can be a blend of origin MAZ to destination MAZ impedance and origin TAZ to destination TAZ impedance up to a max distance. The calculated value is the (MAZ to MAZ distance) * (distance / max distance) * (TAZ to TAZ distance) * (1 - (distance / max distance)). This requires specifying a distance TAZ skim and distance columns from the MAZ to MAZ files. The TAZ skim name and MAZ to MAZ column name need to be the same so the blending can happen on-the-fly. +* ``maz_to_maz:max_blend_distance`` - in order to avoid cliff effects, the lookup of MAZ to MAZ impedance can be a blend of origin MAZ to destination MAZ impedance and origin TAZ to destination TAZ impedance up to a max distance. The blending formula is below. This requires specifying a distance TAZ skim and distance columns from the MAZ to MAZ files. The TAZ skim name and MAZ to MAZ column name need to be the same so the blending can happen on-the-fly or else a value of 0 is returned. + +:: + + (MAZ to MAZ distance) * (distance / max distance) * (TAZ to TAZ distance) * (1 - (distance / max distance)) + + * ``maz_to_maz:blend_distance_skim_name`` - Identify the distance skim for the blending calculation if different than the blend skim. :: @@ -1159,7 +1172,7 @@ In addition to the extra two zone system settings and inputs above, the followin In ``settings.yaml``: * ``models`` - add initialize_los and initialize_tvpb to load network LOS inputs / skims and pre-compute TAP to TAP utilities for TVPB. See :ref:`initialize_los`. -* ``want_dest_choice_presampling`` - enable presampling for multizone systems, which means first select a TAZ using the sampling model and then select a microzone within the TAZ based on the microzone's share of TAZ size term. +* ``want_dest_choice_presampling`` - enable presampling for multizone systems, which means first select a TAZ using the sampling model and then select a microzone within the TAZ based on the microzone share of TAZ size term. :: @@ -1179,7 +1192,7 @@ In ``network_los.yaml``: * ``zone_system`` - set to 3 for three zone system * ``rebuild_tvpb_cache`` - rebuild and overwrite existing pre-computed TAP to TAP utilities cache * ``trace_tvpb_cache_as_csv`` - write a CSV version of TVPB cache for tracing -* ``tap_skims`` - TAP to TAP skims OMX file name. The time period for the matrix must be represented at the end of the matrix name and be seperated by a double_underscore (e.g. BUS_IVT__AM indicates base skim BUS_IVT with a time period of AM. +* ``tap_skims`` - TAP to TAP skims OMX file name. The time period for the matrix must be represented at the end of the matrix name and be seperated by a double_underscore (e.g. BUS_IVT__AM indicates base skim BUS_IVT with a time period of AM). * ``tap`` - TAPs table * ``tap_lines`` - table of transit line names served for each TAP. This file is used to trimmed the set of nearby TAP for each MAZ so only TAPs that are further away and serve new service are included in the TAP set for consideration. It is a very important file to include as it can considerably reduce runtimes. * ``maz_to_tap`` - list of MAZ to TAP access/egress impedance files by user defined mode. Examples include walk and drive. The file also includes MAZ to TAP impedances. @@ -1346,6 +1359,8 @@ To run example_marin, do the following: # Marin TM2 work tour mode choice for the MTC region activitysim run -c configs -d data -o output -s settings_mp.yaml +* For optimal performance, configure multiprocessing and chunk_size based on machine hardware. + Settings ~~~~~~~~ @@ -1366,7 +1381,12 @@ file to include as it can considerably reduce runtimes. example_arc ----------- -(**In development**) The example_arc added a :ref:`trip_scheduling_choice`, :ref:`trip_departure_choice`, and :ref:`parking_location_choice` +.. note:: + + This example is in development + + +The example_arc added a :ref:`trip_scheduling_choice`, :ref:`trip_departure_choice`, and :ref:`parking_location_choice` submodel. These submodel specification files are below, and are in addition to the :ref:`example_mtc` submodel :ref:`sub-model-spec-files`. @@ -1396,15 +1416,20 @@ Example ~~~~~~~ See example commands in `example_manifest.yaml `_ -for running example_arc. +for running example_arc. For optimal performance, configure multiprocessing and chunk_size based on machine hardware. .. _example_semcog : example_semcog -------------- -(**In development**) The example_semcog added a :ref:`work_from_home` and :ref:`telecommute_frequency` -submodel. These submodel specification files are below, and are in addition to the :ref:`example_mtc` +.. note:: + + This example is in development + + +The example_semcog added a :ref:`work_from_home`, :ref:`telecommute_frequency`, :ref:`transit_pass_subsidy` +and :ref:`transit_pass_ownership` submodel. These submodel specification files are below, and are in addition to the :ref:`example_mtc` submodel :ref:`sub-model-spec-files`. .. _semcog-sub-model-spec-files: @@ -1423,12 +1448,20 @@ Example SEMCOG Sub-Model Specification Files | | - telecommute_frequency.csv | | | - telecommute_frequency_coeffs.csv | +------------------------------------------------+--------------------------------------------------------------------+ +| :ref:`transit_pass_subsidy` | - transit_pass_subsidy.yaml | +| | - transit_pass_subsidy.csv | +| | - transit_pass_subsidy_coeffs.csv | ++------------------------------------------------+--------------------------------------------------------------------+ +| :ref:`transit_pass_ownership` | - transit_pass_ownership.yaml | +| | - transit_pass_ownership.csv | +| | - transit_pass_ownership_coeffs.csv | ++------------------------------------------------+--------------------------------------------------------------------+ Example ~~~~~~~ See example commands in `example_manifest.yaml `_ -for running example_semcog. +for running example_semcog. For optimal performance, configure multiprocessing and chunk_size based on machine hardware. .. _example_psrc : @@ -1436,25 +1469,35 @@ for running example_semcog. example_psrc ------------ -(**In development**) The example_psrc is a two zone system (MAZs and TAZs) implementation of the +.. note:: + + This example is in development + + +The example_psrc is a two zone system (MAZs and TAZs) implementation of the example_mtc model design. It uses PSRC zones, land use, synthetic population, and network LOS (skims). Example ~~~~~~~ See example commands in `example_manifest.yaml `_ -for running example_psrc. +for running example_psrc. For optimal performance, configure multiprocessing and chunk_size based on machine hardware. .. _example_sandag : example_sandag -------------- -(**In development**) The example_sandag is a three zone system (MAZs, TAZs, and TAPs) implementation of the +.. note:: + + This example is in development + + +The example_sandag is a three zone system (MAZs, TAZs, and TAPs) implementation of the example_mtc model design. It uses SANDAG zones, land use, synthetic population, and network LOS (skims). Example ~~~~~~~ See example commands in `example_manifest.yaml `_ -for running example_sandag. \ No newline at end of file +for running example_sandag. For optimal performance, configure multiprocessing and chunk_size based on machine hardware. \ No newline at end of file diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst index 85c9074a8..3b95dcf28 100644 --- a/docs/gettingstarted.rst +++ b/docs/gettingstarted.rst @@ -36,22 +36,25 @@ Installation #Mac source activate asimtest -4. Get and install other required libraries on the activated conda Python environment using `pip `__: +4. Get and install other required libraries on the activated conda Python environment using `pip `__ or `conda `__. Conda is preferred but some packages are only on pip. :: # required packages for running ActivitySim - conda install cytoolz numpy pandas psutil pyarrow numba - conda install -c anaconda pytables pyyaml + conda install cytoolz numpy pandas psutil pyarrow numba -c conda-forge + conda install pytables pyyaml -c conda-forge pip install openmatrix zbox requests # optional required packages for testing and building documentation - conda install pytest pytest-cov coveralls pycodestyle - pip install pytest-regressions - conda install sphinx numpydoc sphinx_rtd_theme + conda install pytest pytest-cov coveralls pycodestyle pytest-regressions -c conda-forge + conda install sphinx numpydoc sphinx_rtd_theme -c conda-forge - # optional required packages for example notebooks and estimation integration - conda install jupyterlab matplotlib geopandas descartes larch + # optional required packages for estimation integration + conda install larch -c conda-forge + + # optional required packages for example notebooks + conda install jupyterlab matplotlib -c conda-forge + conda install geopandas descartes -c conda-forge 5. If you access the internet from behind a firewall, then you need to configure your proxy server when downloading packages. @@ -79,6 +82,9 @@ For `pip` for example: #update to a new release pip install -U activitysim + + #install a specific (older) version + pip install activitysim==0.9.5.2 .. note:: @@ -139,6 +145,7 @@ ActivitySim includes a `Jupyter Notebook `__ recipe book wi * `Summarizing results `__ * `Testing a change in auto ownership `__ * `Adding TNCs `__ + * `Memory usage `__ Hardware -------- @@ -154,17 +161,23 @@ The computing hardware required to run a model implemented in the ActivitySim fr ActivitySim framework models use a significant amount of RAM since they store data in-memory to reduce data access time in order to minimize runtime. For example, the example MTC Travel Model One model has 2.7 million households, 7.5 million people, 1475 zones, 826 network skims and has been run between one hour and one day depending -on the amount of RAM and number of processors allocated. +on the amount of RAM and number of processors allocated. See :ref:`multiprocessing` and :ref:`chunk_size` for more information. .. note:: ActivitySim has been run in the cloud, on both Windows and Linux using `Microsoft Azure `__. Example configurations, scripts, and runtimes are in the ``other_resources\example_azure`` folder. -.. note:: - Anaconda Python depends on the `Intel Math Kernel Library `__ - which multithreads some low level numpy and C/C++ functions used by ActivitySim. This low level threading - can compete with ActivitySim's multiprocessing and so it is recommended to turn off MKL threading - when running multiprocessed with the intent to use all the available CPUs. To do so, set the - MKL_NUM_THREADS environment variable at runtime to one. On Windows, this means running ``set MKL_NUM_THREADS=1`` - before running the ActivitySim Python process. +.. _mkl_settings : + +MKL Settings +~~~~~~~~~~~~ + +Anaconda Python on Windows uses the `Intel Math Kernel Library `__ for +many of its computationally intensive low-level C/C++ calculations. By default, MKL threads many of its routines +in order to be performant out-of-the-box. However, for ActivitySim multiprocessing, which processes households in +parallel since they are largely independent of one another, it can be advantageous to override threading within +processes and instead let ActivitySim run each process with one computing core or thread. In order to do so, +override the MKL number of threads setting via a system environment variable that is set before running the model. +In practice, this means before running the model, first set the MKL number of threads variable via the command +line as follows: ``SET MKL_NUM_THREADS=1`` \ No newline at end of file diff --git a/docs/howitworks.rst b/docs/howitworks.rst index ffcf92f2f..91046053c 100644 --- a/docs/howitworks.rst +++ b/docs/howitworks.rst @@ -35,10 +35,10 @@ which then loads the misc, tables, and models class definitions. Loading :mod:` from activitysim.core import config from activitysim.core import inject -which loads the config and inject classes. These define `ORCA `__ inspired injectables (functions) and +which loads the config and inject classes. These define Inject injectables (functions) and helper functions for running models. For example, the Python decorator ``@inject.injectable`` overrides the function definition ``settings`` to execute this function whenever the ``settings`` object is called by the system. The :mod:`activitysim.core.inject` manages the data -pipeline. The inject class does everything ORCA did in previous versions of ActivitySim and so ORCA is no longer a dependency. +pipeline. :: @@ -1341,22 +1341,61 @@ uses the information stored in the pipeline file to create the table below for a Skims ~~~~~ -The skims class defines orca injectables to access the skim matrices. The skims class reads the +The skims class defines Inject injectables to access the skim matrices. The skims class reads the skims from the omx_file on disk. The injectables and omx_file for the example are listed below. The skims are float64 matrix. -Skims are named ___