From 85051fb0c253faadb5ea84e12c8e0879a24f6f33 Mon Sep 17 00:00:00 2001 From: Jeff Newman Date: Thu, 18 Dec 2025 12:55:39 -0600 Subject: [PATCH 01/15] use all TAZs when using sharrow --- activitysim/abm/models/trip_destination.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/activitysim/abm/models/trip_destination.py b/activitysim/abm/models/trip_destination.py index 853cfc35e..126101632 100644 --- a/activitysim/abm/models/trip_destination.py +++ b/activitysim/abm/models/trip_destination.py @@ -273,12 +273,14 @@ def destination_sample( return choices -def aggregate_size_term_matrix(maz_size_term_matrix, network_los): +def aggregate_size_term_matrix(maz_size_term_matrix, network_los, all_tazs=None): df = maz_size_term_matrix.df assert ALT_DEST_TAZ not in df dest_taz = network_los.map_maz_to_taz(df.index) taz_size_term_matrix = df.groupby(dest_taz).sum() + if all_tazs is not None: + taz_size_term_matrix = taz_size_term_matrix.reindex(all_tazs, fill_value=0).rename_axis(taz_size_term_matrix.index.name, axis=0) taz_size_term_matrix = DataFrameMatrix(taz_size_term_matrix) @@ -612,7 +614,14 @@ def destination_presample( alt_dest_col_name = model_settings.ALT_DEST_COL_NAME - TAZ_size_term_matrix = aggregate_size_term_matrix(size_term_matrix, network_los) + if state.settings.sharrow: + # when using sharrow, we use the skim_dataset structure, and need to ensure + # that all TAZs are represented in the size_term_matrix, even those with no MAZs + all_tazs = state.get_dataframe("land_use_taz").index + else: + all_tazs = None + + TAZ_size_term_matrix = aggregate_size_term_matrix(size_term_matrix, network_los, all_tazs) TRIP_ORIGIN = model_settings.TRIP_ORIGIN PRIMARY_DEST = model_settings.PRIMARY_DEST @@ -627,6 +636,15 @@ def destination_presample( network_los.map_maz_to_taz(alternatives.index) ).sum() + # We now have aggregated alternatives indexed by TAZ instead of MAZ. + # For sharrow, we need the TAZ indexing to be "complete", i.e. include all TAZ ids, + # even those that had no MAZs (and so were missing from the aggregation result). + # this is needed because we are going to taking the entire set of TAZ alternatives + # as a vector which will need to align with the TAZ skims. + if state.settings.sharrow: + all_tazs = state.get_dataframe("land_use_taz").index + alternatives = alternatives.reindex(all_tazs, fill_value=0).rename_axis(alternatives.index.name, axis=0) + # # i did this but after changing alt_dest_col_name to 'trip_dest' it # # shouldn't be needed anymore # alternatives.index.name = ALT_DEST_TAZ From a5e0999fb70576dc21ade65e71c4fa907a090100 Mon Sep 17 00:00:00 2001 From: Jeff Newman Date: Mon, 22 Dec 2025 10:11:22 -0600 Subject: [PATCH 02/15] better error message --- activitysim/core/los.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/activitysim/core/los.py b/activitysim/core/los.py index 5ac90f930..8b44ca4ed 100644 --- a/activitysim/core/los.py +++ b/activitysim/core/los.py @@ -497,7 +497,8 @@ def load_data(self): else: # SkimDataset assert len(skims.dataset.indexes["otaz"]) == len( self.state.get_dataframe("land_use_taz") - ) + ), f"land_use_taz table length {len(self.state.get_dataframe('land_use_taz'))} does not match " \ + f"taz skim length {len(skims.dataset.indexes['otaz'])}" def create_skim_dict(self, skim_tag, _override_offset_int=None): """ From 7f8c511af36d7fed59e9536645d76ff8a4782cec Mon Sep 17 00:00:00 2001 From: Jeff Newman Date: Mon, 22 Dec 2025 15:42:44 -0600 Subject: [PATCH 03/15] change default fastmath to false --- .../trip_dest/configs/_dummy_coefficients.csv | 2 + .../abm/test/trip_dest/configs/constants.yaml | 3 + .../configs/destination_choice_size_terms.csv | 24 ++++++++ .../test/trip_dest/configs/network_los.yaml | 14 +++++ .../abm/test/trip_dest/configs/settings.yaml | 56 ++++++++++++++++++ .../trip_dest/configs/trip_destination.csv | 10 ++++ .../trip_dest/configs/trip_destination.yaml | 35 +++++++++++ ...estination_annotate_trips_preprocessor.csv | 9 +++ .../configs/trip_destination_sample.csv | 8 +++ .../trip_dest/configs/trip_mode_choice.csv | 6 ++ .../trip_dest/configs/trip_mode_choice.yaml | 52 ++++++++++++++++ ...ode_choice_annotate_trips_preprocessor.csv | 8 +++ .../configs/trip_mode_choice_coefficients.csv | 32 ++++++++++ ...trip_mode_choice_coefficients_template.csv | 17 ++++++ .../abm/test/trip_dest/data/households.csv | 11 ++++ .../abm/test/trip_dest/data/land_use.csv | 10 ++++ activitysim/abm/test/trip_dest/data/maz.csv | 10 ++++ .../test/trip_dest/data/maz_to_maz_walk.csv | 15 +++++ activitysim/abm/test/trip_dest/data/mini.omx | Bin 0 -> 25072 bytes .../abm/test/trip_dest/data/out_trips.csv | 7 +++ .../abm/test/trip_dest/data/persons.csv | 16 +++++ activitysim/abm/test/trip_dest/data/taz.csv | 6 ++ activitysim/abm/test/trip_dest/data/tours.csv | 3 + activitysim/abm/test/trip_dest/data/trips.csv | 7 +++ .../test/trip_dest/test_trip_destination.py | 32 ++++++++++ activitysim/core/configuration/base.py | 10 +++- activitysim/core/skim_dataset.py | 11 +++- 27 files changed, 412 insertions(+), 2 deletions(-) create mode 100644 activitysim/abm/test/trip_dest/configs/_dummy_coefficients.csv create mode 100644 activitysim/abm/test/trip_dest/configs/constants.yaml create mode 100644 activitysim/abm/test/trip_dest/configs/destination_choice_size_terms.csv create mode 100644 activitysim/abm/test/trip_dest/configs/network_los.yaml create mode 100644 activitysim/abm/test/trip_dest/configs/settings.yaml create mode 100644 activitysim/abm/test/trip_dest/configs/trip_destination.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_destination.yaml create mode 100644 activitysim/abm/test/trip_dest/configs/trip_destination_annotate_trips_preprocessor.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_destination_sample.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_mode_choice.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_mode_choice.yaml create mode 100644 activitysim/abm/test/trip_dest/configs/trip_mode_choice_annotate_trips_preprocessor.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients.csv create mode 100644 activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients_template.csv create mode 100644 activitysim/abm/test/trip_dest/data/households.csv create mode 100644 activitysim/abm/test/trip_dest/data/land_use.csv create mode 100644 activitysim/abm/test/trip_dest/data/maz.csv create mode 100644 activitysim/abm/test/trip_dest/data/maz_to_maz_walk.csv create mode 100644 activitysim/abm/test/trip_dest/data/mini.omx create mode 100644 activitysim/abm/test/trip_dest/data/out_trips.csv create mode 100644 activitysim/abm/test/trip_dest/data/persons.csv create mode 100644 activitysim/abm/test/trip_dest/data/taz.csv create mode 100644 activitysim/abm/test/trip_dest/data/tours.csv create mode 100644 activitysim/abm/test/trip_dest/data/trips.csv create mode 100644 activitysim/abm/test/trip_dest/test_trip_destination.py diff --git a/activitysim/abm/test/trip_dest/configs/_dummy_coefficients.csv b/activitysim/abm/test/trip_dest/configs/_dummy_coefficients.csv new file mode 100644 index 000000000..9d471534a --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/_dummy_coefficients.csv @@ -0,0 +1,2 @@ +coefficient_name,value,constrain +coef_one,1,T diff --git a/activitysim/abm/test/trip_dest/configs/constants.yaml b/activitysim/abm/test/trip_dest/configs/constants.yaml new file mode 100644 index 000000000..b093206ab --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/constants.yaml @@ -0,0 +1,3 @@ +max_walk_distance: 3 +walkSpeed: 3.00 +walkThresh: 1.50 diff --git a/activitysim/abm/test/trip_dest/configs/destination_choice_size_terms.csv b/activitysim/abm/test/trip_dest/configs/destination_choice_size_terms.csv new file mode 100644 index 000000000..5d0b192b8 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/destination_choice_size_terms.csv @@ -0,0 +1,24 @@ +segment,model_selector,Acres,Population +work_low,workplace,0,0.602938343 +work_med,workplace,0,0.487310988 +work_high,workplace,0,0.359519129 +work_veryhigh,workplace,0,0.169128839 +university,school,1,0 +preschool,school,0.07552,1 +gradeschool,school,1,0 +highschool,school,1,0 +escort,non_mandatory,0.465,0.144 +shopping,non_mandatory,1,0 +eatout,non_mandatory,0.4,0.6 +othmaint,non_mandatory,0,0.518 +social,non_mandatory,0.2,0.478 +othdiscr,non_mandatory,0.252252252,0.272272272 +atwork,atwork,0,0.258 +work,trip,0.2,0.166666667 +escort,trip,0.655,0.144 +shopping,trip,0.86,0 +eatout,trip,0.2,1 +othmaint,trip,0.001,0.518 +social,trip,0.3,0.478 +othdiscr,trip,0.252252252,0.272272272 +univ,trip,0.999001,0 \ No newline at end of file diff --git a/activitysim/abm/test/trip_dest/configs/network_los.yaml b/activitysim/abm/test/trip_dest/configs/network_los.yaml new file mode 100644 index 000000000..fdc77dc2f --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/network_los.yaml @@ -0,0 +1,14 @@ +read_skim_cache: False +write_skim_cache: False +zone_system: 2 +taz_skims: + omx: min*.omx +maz: maz.csv +maz_to_maz: + tables: + - maz_to_maz_walk.csv +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 5, 9, 15, 18, 20, 24] + labels: ['EA', 'AM', 'MD', 'PM', 'EV', 'EA'] diff --git a/activitysim/abm/test/trip_dest/configs/settings.yaml b/activitysim/abm/test/trip_dest/configs/settings.yaml new file mode 100644 index 000000000..6cd0132bd --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/settings.yaml @@ -0,0 +1,56 @@ +sharrow: test +recode_pipeline_columns: true + +expression_profile: False +households_sample_size: 0 +sharrow_cache_dir: sharrow_cache +chunk_training_mode: explicit +check_for_variability: False +use_shadow_pricing: False +want_dest_choice_sample_tables: False +trace_hh_id: +cleanup_trace_files_on_resume: True + +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + MAZ: home_zone_id + hhno: household_id + recode_columns: + home_zone_id: land_use.zone_id + keep_columns: + - home_zone_id + - income + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + PERID: person_id + keep_columns: + - household_id + - age + - PNUM + - tablename: land_use # MAZ,TAZ,Acres,Population + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ: zone_id + recode_columns: + zone_id: zero-based + TAZ: land_use_taz.TAZ + keep_columns: + - TAZ + - Acres + - Population + - tablename: land_use_taz + filename: taz.csv + index_col: TAZ + recode_columns: + TAZ: zero-based + +resume_after: + +models: + - trip_destination diff --git a/activitysim/abm/test/trip_dest/configs/trip_destination.csv b/activitysim/abm/test/trip_dest/configs/trip_destination.csv new file mode 100644 index 000000000..fcd8b48df --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_destination.csv @@ -0,0 +1,10 @@ +Description,Expression,work,univ,school,escort,shopping,eatout,othmaint,social,othdiscr,atwork +size term,"@np.log1p(size_terms.get(df.alt_dest, df.purpose)) # sharrow: np.log1p(size_terms['sizearray'])",1,1,1,1,1,1,1,1,1,1 +no attractions,"@size_terms.get(df.alt_dest, df.purpose) == 0 # sharrow: size_terms['sizearray'] == 0",-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 +stop proximity to home (outbound),@df.outbound * od_skims['distwalk'],-0.3800,0,0,0,0,0,0,0,0,0 +stop proximity to home (inbound),@~df.outbound * dp_skims['distwalk'],-0.1500,0,0,0,0,0,0,0,0,0 +stop proximity to main destination (outbound),@df.outbound * dp_skims['distwalk'],-0.26,,,,,,,,, +"Sample of alternatives correction factor","@np.minimum(np.log(df.pick_count/df.prob), 60)",1,1,1,1,1,1,1,1,1,1 +Mode choice logsum from origin to stop,od_logsum,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821 +Mode choice logsum from stop to destination,dp_logsum,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821,1.821 +meaty,@odt_skims['meat'],-0.01,-0.01,-0.01,-0.01,-0.01,-0.01,-0.01,-0.01,-0.01,-0.01 diff --git a/activitysim/abm/test/trip_dest/configs/trip_destination.yaml b/activitysim/abm/test/trip_dest/configs/trip_destination.yaml new file mode 100644 index 000000000..a4a2c418e --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_destination.yaml @@ -0,0 +1,35 @@ +SAMPLE_SIZE: 30 + +DESTINATION_SAMPLE_SPEC: trip_destination_sample.csv +DESTINATION_SPEC: trip_destination.csv +COEFFICIENTS: _dummy_coefficients.csv + +LOGSUM_SETTINGS: trip_mode_choice.yaml + +# optional (comment out if not desired) +DEST_CHOICE_LOGSUM_COLUMN_NAME: destination_logsum + +# comment out DEST_CHOICE_LOGSUM_COLUMN_NAME if saved alt logsum table +DEST_CHOICE_SAMPLE_TABLE_NAME: trip_destination_sample + +# model-specific logsum-related settings +TRIP_ORIGIN: origin +ALT_DEST_COL_NAME: alt_dest +PRIMARY_DEST: destination + +REDUNDANT_TOURS_MERGED_CHOOSER_COLUMNS: + - tour_mode + +preprocessor: + SPEC: trip_destination_annotate_trips_preprocessor + DF: trips + TABLES: + - tours + - persons + +# drop failed trips and cleanup failed trip leg_mates for consistency +# (i.e. adjust trip_count, trip_num, first for missing failed trips) +CLEANUP: False + +# this setting is used by testing code to force failed trip_destination +# fail_some_trips_for_testing: False diff --git a/activitysim/abm/test/trip_dest/configs/trip_destination_annotate_trips_preprocessor.csv b/activitysim/abm/test/trip_dest/configs/trip_destination_annotate_trips_preprocessor.csv new file mode 100644 index 000000000..157ae07b4 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_destination_annotate_trips_preprocessor.csv @@ -0,0 +1,9 @@ +Description,Target,Expression +,tour_mode,"reindex(tours.tour_mode, df.tour_id)" +,_tod,"np.where(df.outbound,reindex_i(tours.start, df.tour_id),reindex_i(tours.end, df.tour_id))" +,trip_period,network_los.skim_time_period_label(_tod) +,is_joint,"reindex(tours.tour_category, df.tour_id)=='joint'" +,purpose_index_num,"size_terms.get_cols(df.purpose)" +,tour_mode_is_walk,"reindex(tours.tour_mode, df.tour_id)=='WALK'" +,tour_mode_is_bike,"reindex(tours.tour_mode, df.tour_id)=='BIKE'" +,tour_leg_dest,"np.where(df.outbound,reindex(tours.destination, df.tour_id), reindex(tours.origin, df.tour_id)).astype(int)" diff --git a/activitysim/abm/test/trip_dest/configs/trip_destination_sample.csv b/activitysim/abm/test/trip_dest/configs/trip_destination_sample.csv new file mode 100644 index 000000000..549e5e2da --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_destination_sample.csv @@ -0,0 +1,8 @@ +Description,Expression,work,univ,school,escort,shopping,eatout,othmaint,social,othdiscr,atwork +,_od_DIST@od_skims['distwalk'],1,1,1,1,1,1,1,1,1,1 +,_dp_DIST@dp_skims['distwalk'],1,1,1,1,1,1,1,1,1,1 +size term,"@np.log1p(size_terms.get(df.alt_dest, df.purpose)) # sharrow: np.log1p(size_terms['sizearray'])",1,1,1,1,1,1,1,1,1,1 +no attractions,"@size_terms.get(df.alt_dest, df.purpose) == 0 # sharrow: size_terms['sizearray'] == 0",-999,-999,-999,-999,-999,-999,-999,-999,-999,-999 +stop proximity to home (outbound),@df.outbound * _od_DIST,-0.3800,0,0,0,0,0,0,0,0,0 +stop proximity to home (inbound),@~df.outbound * _od_DIST,-0.1500,0,0,0,0,0,0,0,0,0 +stop proximity to main destination (outbound),@df.outbound * _dp_DIST,-0.26,,,,,,,,, diff --git a/activitysim/abm/test/trip_dest/configs/trip_mode_choice.csv b/activitysim/abm/test/trip_dest/configs/trip_mode_choice.csv new file mode 100644 index 000000000..947247bba --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_mode_choice.csv @@ -0,0 +1,6 @@ +Label,Description,Expression,DRIVEALONEFREE,SHAREDRIDE,WALK +#,Drive alone ,,,, +util_DRIVEALONEFREE_Unavailable_for_persons_less_than_16,DRIVEALONEFREE - Unavailable for persons less than 16,age < 16,-999,, +util_DRIVEALONEFREE_Person_is_between_16_and_19_years_old,DRIVEALONEFREE - Person is between 16 and 19 years old,@(df.age >= 16) & (df.age <= 19),coef_age1619_da,, +util_SHARED2FREE_In_vehicle_time,SHARED2FREE - In-vehicle time,@odt_skims['meat'],,coef_ivt, +util_WALK_Time_short,WALK - Time up to 1.5 miles,@od_skims['distwalk'],,,coef_walktime_short diff --git a/activitysim/abm/test/trip_dest/configs/trip_mode_choice.yaml b/activitysim/abm/test/trip_dest/configs/trip_mode_choice.yaml new file mode 100644 index 000000000..557e0dd82 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_mode_choice.yaml @@ -0,0 +1,52 @@ +# trip_mode_choice.yaml + +compute_settings: + fastmath: false # use of isnan in utility functions requires fastmath=False + +SPEC: trip_mode_choice.csv +COEFFICIENTS: trip_mode_choice_coefficients.csv +COEFFICIENT_TEMPLATE: trip_mode_choice_coefficients_template.csv + +LOGIT_TYPE: NL + +NESTS: + name: root + coefficient: coef_nest_root + alternatives: + - name: AUTO + coefficient: coef_nest_AUTO + alternatives: + - DRIVEALONEFREE + - SHAREDRIDE + - name: NONMOTORIZED + coefficient: coef_nest_NONMOTORIZED + alternatives: + - WALK + +CONSTANTS: + orig_col_name: origin + dest_col_name: destination + I_MODE_MAP: + DRIVEALONEFREE: 1 + SHAREDRIDE: 2 + WALK: 3 + I_SOV_MODES: 1 + I_AUTO_MODES: [1,2] + I_WALK_MODE: 3 + +# so far, we can use the same spec as for non-joint tours +preprocessor: + SPEC: trip_mode_choice_annotate_trips_preprocessor + DF: df + TABLES: + - land_use + - tours + +MODE_CHOICE_LOGSUM_COLUMN_NAME: mode_choice_logsum + +TOURS_MERGED_CHOOSER_COLUMNS: + - tour_category + - tour_mode + - start + - end + - age diff --git a/activitysim/abm/test/trip_dest/configs/trip_mode_choice_annotate_trips_preprocessor.csv b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_annotate_trips_preprocessor.csv new file mode 100644 index 000000000..e0d2844e0 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_annotate_trips_preprocessor.csv @@ -0,0 +1,8 @@ +Description,Target,Expression +,i_tour_mode,df.tour_mode.map(I_MODE_MAP) +,tour_mode_is_SOV,i_tour_mode == I_SOV_MODES +,tour_mode_is_auto,i_tour_mode.isin(I_AUTO_MODES) +,tour_mode_is_walk,i_tour_mode == I_WALK_MODE +,inbound,~df.outbound +,first_trip,df.trip_num == 1 +,last_trip,df.trip_num == df.trip_count \ No newline at end of file diff --git a/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients.csv b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients.csv new file mode 100644 index 000000000..4618bf244 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients.csv @@ -0,0 +1,32 @@ +coefficient_name,value,constrain +coef_one,1,T +coef_zero,0,T +coef_nest_root,1,T +coef_nest_AUTO,0.72,T +coef_nest_AUTO_DRIVEALONE,0.35,T +coef_nest_AUTO_SHAREDRIDE2,0.35,T +coef_nest_AUTO_SHAREDRIDE3,0.35,T +coef_nest_NONMOTORIZED,0.72,T +coef_nest_TRANSIT,0.72,T +coef_nest_TRANSIT_WALKACCESS,0.5,T +coef_nest_TRANSIT_DRIVEACCESS,0.5,T +coef_nest_RIDEHAIL,0.36,T +coef_nest_SCHOOL_BUS,0.5,T +coef_ivt_disc,-0.03,F +coef_ivt_maint,-0.034,F +coef_ivt_school,-0.02,F +coef_ivt_univ,-0.032,F +coef_ivt_work,-0.01,F +coef_ivt_atwork,-0.064,F +coef_walktime_short_disc,-0.0558,F +coef_walktime_short_maint,-0.0558,F +coef_walktime_short_school,-0.0542,F +coef_walktime_short_univ,-0.0542,F +coef_walktime_short_work,-0.1,F +coef_walktime_short_atwork,-0.0558,F +coef_age1619_da_disc,0,F +coef_age1619_da_maint,0,F +coef_age1619_da_school,0,F +coef_age1619_da_univ,0,F +coef_age1619_da_work,0,F +coef_age1619_da_atwork,0,F diff --git a/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients_template.csv b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients_template.csv new file mode 100644 index 000000000..8e3f77d91 --- /dev/null +++ b/activitysim/abm/test/trip_dest/configs/trip_mode_choice_coefficients_template.csv @@ -0,0 +1,17 @@ +coefficient_name,eatout,escort,othdiscr,othmaint,school,shopping,social,univ,work,atwork +coef_one,,,,,,,,,, +coef_nest_root,,,,,,,,,, +coef_nest_AUTO,,,,,,,,,, +coef_nest_AUTO_DRIVEALONE,,,,,,,,,, +coef_nest_AUTO_SHAREDRIDE2,,,,,,,,,, +coef_nest_AUTO_SHAREDRIDE3,,,,,,,,,, +coef_nest_NONMOTORIZED,,,,,,,,,, +coef_nest_TRANSIT,,,,,,,,,, +coef_nest_TRANSIT_WALKACCESS,,,,,,,,,, +coef_nest_TRANSIT_DRIVEACCESS,,,,,,,,,, +coef_nest_RIDEHAIL,,,,,,,,,, +coef_nest_SCHOOL_BUS,,,,,,,,,, +#,,,,,,,,,, +coef_ivt,coef_ivt_disc,coef_ivt_maint,coef_ivt_disc,coef_ivt_maint,coef_ivt_school,coef_ivt_maint,coef_ivt_disc,coef_ivt_univ,coef_ivt_work,coef_ivt_atwork +coef_walktime_short,coef_walktime_short_disc,coef_walktime_short_maint,coef_walktime_short_disc,coef_walktime_short_maint,coef_walktime_short_school,coef_walktime_short_maint,coef_walktime_short_disc,coef_walktime_short_univ,coef_walktime_short_work,coef_walktime_short_atwork +coef_age1619_da,coef_age1619_da_disc,coef_age1619_da_maint,coef_age1619_da_disc,coef_age1619_da_maint,coef_age1619_da_school,coef_age1619_da_maint,coef_age1619_da_disc,coef_age1619_da_univ,coef_age1619_da_work,coef_age1619_da_atwork diff --git a/activitysim/abm/test/trip_dest/data/households.csv b/activitysim/abm/test/trip_dest/data/households.csv new file mode 100644 index 000000000..068c894d5 --- /dev/null +++ b/activitysim/abm/test/trip_dest/data/households.csv @@ -0,0 +1,11 @@ +income,hhno,MAZ +83800,1,101 +83800,2,102 +54650,3,103 +54650,4,104 +54650,5,108 +80000,6,109 +40000,7,111 +65000,8,121 +45800,9,122 +9600,10,101 diff --git a/activitysim/abm/test/trip_dest/data/land_use.csv b/activitysim/abm/test/trip_dest/data/land_use.csv new file mode 100644 index 000000000..329b64fb2 --- /dev/null +++ b/activitysim/abm/test/trip_dest/data/land_use.csv @@ -0,0 +1,10 @@ +MAZ,TAZ,Acres,Population +101,2,3.2,553 +102,2,2.6,9089 +103,3,0.4,14 +104,5,3.7,376 +108,11,6.6,884 +109,11,9.1,234 +111,11,1.1,67 +121,2,8.2,1 +122,3,45.6,0 diff --git a/activitysim/abm/test/trip_dest/data/maz.csv b/activitysim/abm/test/trip_dest/data/maz.csv new file mode 100644 index 000000000..f24add676 --- /dev/null +++ b/activitysim/abm/test/trip_dest/data/maz.csv @@ -0,0 +1,10 @@ +MAZ,TAZ +101,2 +102,2 +103,3 +104,5 +108,11 +109,11 +111,11 +121,2 +122,3 diff --git a/activitysim/abm/test/trip_dest/data/maz_to_maz_walk.csv b/activitysim/abm/test/trip_dest/data/maz_to_maz_walk.csv new file mode 100644 index 000000000..5bf0804b3 --- /dev/null +++ b/activitysim/abm/test/trip_dest/data/maz_to_maz_walk.csv @@ -0,0 +1,15 @@ +OMAZ,DMAZ,distwalk +101,101,0.078 +101,102,0.178 +101,103,0.098 +101,104,0.118 +101,108,0.348 +101,109,0.118 +101,111,0.503 +101,121,0.578 +103,103,0.098 +103,104,0.118 +103,108,0.348 +103,109,0.118 +103,111,0.503 +103,121,0.578 diff --git a/activitysim/abm/test/trip_dest/data/mini.omx b/activitysim/abm/test/trip_dest/data/mini.omx new file mode 100644 index 0000000000000000000000000000000000000000..122693fb7d4d75331597832aaaa0c465207ced5b GIT binary patch literal 25072 zcmeHPdsI}%8K1iZU2s=GR0yYr)zkn+HVc}RqeXXt#icB=EXzY;!$WykdCEfs48?c| z0yg!e1zHaVC8&|3AR$VcB3NRKG5Dw1CL>JJC3XhG}{f@o+>I5qVgIJsg+? zP?|l7wXE2tq=AKT+5e>h78qrlPh2d>0`-3 zT?zd8`e_X?3$PZ$;mm6&`76!Gao8sT9wgo#>WP7Fok8WLRR>4<2I>P;hRBKT>n?ZW z^NrpY-Bk<%1Hwo0AO&0a8(Uw6+@0i8@{$8KBl*1bYL!9l6B*`b(C~@yf^dZYN7|dZ zEh8Z%S(cKNEmO#s$(JGAQA?;D(0*#gjRu{hpvmSH^~WV%&(MjQqx?>UkwcsgIVwLVIMXoY zDMeOTFB^-It2ulkppryp_ztrmPeWmj@Lcr7;NZXXgv_|O#8~o7LOcn_Z;XvgjLwMV z^Pob-gdv&10!iPaDxvD|PnbDS137e$f1 z2+;Li5veo%dyfPt`55&6LIT$w!5WoL4P(&zXv_&^IGwzQCd(T9vK*$Mg$ep`z=G$g z;e>}i={jpNKK=h(XZ?V0ArN$(HM%ZCtFkeF7l8NrZ|@mR<^S(a!vBxLwcl9B`2Scm zn4clQ5MT%}1Q-Gg0fxZzLtqN?^C~CY9aEa0*G$6CgI+bZImXY8@n9i_07HNwzz|>v zFa#I^(+zdvGxydTTO8x(#(1z0Lx3T`5MT%}1Q-Ggf$4_86z1nW zt8iybX?|We$@}y2*NiQW@pEH5ScoCO5MT%}1Q-Gg0fxYILx2NP{`+%$LEod}ouS+l z?(>zA^BZ*I022E9bGom%lblo@&n9}m`^{45NE6416migmMM(Y(*zmGpcD>^}ie4~sL*!sa34;Eqw zFa#I^3;~7!Lx3SL-4Nh_<+$|&KKX{8zlip@B1a|V@AY9gp7P(3b%F>lJVtmecb{m^ z#Tm%;v3Wi`3<&SD#Tm(QK97C=q`Q1MpK(GS4a-Lq8Sd}pxA@}o?$9Yk*oB7>4--#> z06N79;fl_38oQr*bbs(net)p9Ruvkk$LDB{?dRmoq||LNFX|MuZy2SaB`P{TFq`YU zcwL2p5lXE*1u{}8_6`|FatJbaG;eRLI+;YeEtmvlGKXdO4k^F9_U$4|L zGPh@EUsktETjG@$>!S5rDCN+{$PvS!-t`_ z7nzO%tZ?hh0mb4l)IrCkT(te!Z(f>n-~{)<`WQ3$Z}%#z;|l&J-(%0Uhs20?7hc%D zcvqS9&yoXCJ8Spl58Ui~{haNE-uBxI4%R*R$g%kQocFx1HD6UL1n3``vg+A_2JO|@ z1jkozxLogWJ?iyxgkjsVw0VLQE{j_izp|wHM)E5~ZP$l1FLRxZaP-9Gj!b+H%579zFG~cmOQrn$;D;BQ`)Z!Mkv7m|_hHkq;xu1xL563>B3)QV z!;w>iA9c6ihz${Bf^GC#-x0X>8;3 zx{v_dw)%I@{`A|AGk;WgKkw|?l|qf8U&jtMX_}Khu&?n;Yo7a_hii$SmoR=ixNyywlY;?n+f-t2`vVGF9$8pSh?+n3rpwMaWN z%**1_XTD$Hc+kQjlbf$rev(>YY8bGe7nQ*!nO_NYaZsdU)*CM z$Z*oVsWf!-<TQ (max_float_precision // 8): + current_data = current_data.astype( + f"float{max_float_precision}" + ) dataset.redirection.sparse_blender( colname, df.OMAZ, df.DMAZ, - df[colname], + current_data, max_blend_distance=max_blend_distance_i, index=land_use_index, ) From 2aded625d549d28f8dca8412c4576ea1b67e5d5e Mon Sep 17 00:00:00 2001 From: Jeff Newman Date: Mon, 22 Dec 2025 15:48:08 -0600 Subject: [PATCH 04/15] blacken --- activitysim/abm/models/trip_destination.py | 24 ++++++++++------ .../test/trip_dest/test_trip_destination.py | 28 +++++++++++++++---- activitysim/core/los.py | 6 ++-- activitysim/core/skim_dataset.py | 2 +- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/activitysim/abm/models/trip_destination.py b/activitysim/abm/models/trip_destination.py index 126101632..407d50844 100644 --- a/activitysim/abm/models/trip_destination.py +++ b/activitysim/abm/models/trip_destination.py @@ -30,12 +30,12 @@ ) from activitysim.core.configuration.base import PreprocessorSettings from activitysim.core.configuration.logit import LocationComponentSettings +from activitysim.core.exceptions import DuplicateWorkflowTableError, InvalidTravelError from activitysim.core.interaction_sample import interaction_sample from activitysim.core.interaction_sample_simulate import interaction_sample_simulate from activitysim.core.skim_dictionary import DataFrameMatrix from activitysim.core.tracing import print_elapsed_time from activitysim.core.util import assign_in_place, reindex -from activitysim.core.exceptions import InvalidTravelError, DuplicateWorkflowTableError logger = logging.getLogger(__name__) @@ -280,7 +280,9 @@ def aggregate_size_term_matrix(maz_size_term_matrix, network_los, all_tazs=None) dest_taz = network_los.map_maz_to_taz(df.index) taz_size_term_matrix = df.groupby(dest_taz).sum() if all_tazs is not None: - taz_size_term_matrix = taz_size_term_matrix.reindex(all_tazs, fill_value=0).rename_axis(taz_size_term_matrix.index.name, axis=0) + taz_size_term_matrix = taz_size_term_matrix.reindex( + all_tazs, fill_value=0 + ).rename_axis(taz_size_term_matrix.index.name, axis=0) taz_size_term_matrix = DataFrameMatrix(taz_size_term_matrix) @@ -621,7 +623,9 @@ def destination_presample( else: all_tazs = None - TAZ_size_term_matrix = aggregate_size_term_matrix(size_term_matrix, network_los, all_tazs) + TAZ_size_term_matrix = aggregate_size_term_matrix( + size_term_matrix, network_los, all_tazs + ) TRIP_ORIGIN = model_settings.TRIP_ORIGIN PRIMARY_DEST = model_settings.PRIMARY_DEST @@ -643,7 +647,9 @@ def destination_presample( # as a vector which will need to align with the TAZ skims. if state.settings.sharrow: all_tazs = state.get_dataframe("land_use_taz").index - alternatives = alternatives.reindex(all_tazs, fill_value=0).rename_axis(alternatives.index.name, axis=0) + alternatives = alternatives.reindex(all_tazs, fill_value=0).rename_axis( + alternatives.index.name, axis=0 + ) # # i did this but after changing alt_dest_col_name to 'trip_dest' it # # shouldn't be needed anymore @@ -1538,13 +1544,13 @@ def run_trip_destination( """ When using the trip destination model with sharrow, it is necessary - to set a value for `purpose_index_num` in the trip destination - annotate trips preprocessor. This allows for an optimized compiled + to set a value for `purpose_index_num` in the trip destination + annotate trips preprocessor. This allows for an optimized compiled lookup of the size term from the array of size terms. The value of - `purpose_index_num` should be the integer column position in the size - matrix, with usual zero-based numpy indexing semantics (i.e. the first + `purpose_index_num` should be the integer column position in the size + matrix, with usual zero-based numpy indexing semantics (i.e. the first column is zero). The preprocessor expression most likely needs to be - "size_terms.get_cols(df.purpose)" unless some unusual transform of + "size_terms.get_cols(df.purpose)" unless some unusual transform of size terms has been employed. """ diff --git a/activitysim/abm/test/trip_dest/test_trip_destination.py b/activitysim/abm/test/trip_dest/test_trip_destination.py index 0f5b1c24c..fdfd9b6de 100644 --- a/activitysim/abm/test/trip_dest/test_trip_destination.py +++ b/activitysim/abm/test/trip_dest/test_trip_destination.py @@ -1,25 +1,34 @@ -from pathlib import Path +from __future__ import annotations + import shutil -from activitysim import abm # noqa: F401 +from pathlib import Path + import pandas as pd +from activitysim import abm # noqa: F401 from activitysim.core import workflow as wf def test_trip_destination(tmp_path: Path): - shutil.copytree(Path(__file__).parent.joinpath("configs"), tmp_path.joinpath("configs")) + shutil.copytree( + Path(__file__).parent.joinpath("configs"), tmp_path.joinpath("configs") + ) shutil.copytree(Path(__file__).parent.joinpath("data"), tmp_path.joinpath("data")) state = wf.State.make_default(working_dir=tmp_path) # init tours - tours = pd.read_csv(tmp_path / state.filesystem.data_dir[0] / "tours.csv").set_index("tour_id") + tours = pd.read_csv( + tmp_path / state.filesystem.data_dir[0] / "tours.csv" + ).set_index("tour_id") state.add_table("tours", tours) state.tracing.register_traceable_table("tours", tours) state.get_rn_generator().add_channel("tours", tours) # init trips - trips = pd.read_csv(tmp_path / state.filesystem.data_dir[0] / "trips.csv").set_index("trip_id") + trips = pd.read_csv( + tmp_path / state.filesystem.data_dir[0] / "trips.csv" + ).set_index("trip_id") state.add_table("trips", trips) state.tracing.register_traceable_table("trips", trips) state.get_rn_generator().add_channel("trips", trips) @@ -29,4 +38,11 @@ def test_trip_destination(tmp_path: Path): out_trips = state.get_dataframe("trips") # logsums are generated for intermediate trips only - assert out_trips["destination_logsum"].isna().tolist() == [True, False, True, True, False, True] + assert out_trips["destination_logsum"].isna().tolist() == [ + True, + False, + True, + True, + False, + True, + ] diff --git a/activitysim/core/los.py b/activitysim/core/los.py index 8b44ca4ed..7f6f5b4c8 100644 --- a/activitysim/core/los.py +++ b/activitysim/core/los.py @@ -497,8 +497,10 @@ def load_data(self): else: # SkimDataset assert len(skims.dataset.indexes["otaz"]) == len( self.state.get_dataframe("land_use_taz") - ), f"land_use_taz table length {len(self.state.get_dataframe('land_use_taz'))} does not match " \ - f"taz skim length {len(skims.dataset.indexes['otaz'])}" + ), ( + f"land_use_taz table length {len(self.state.get_dataframe('land_use_taz'))} does not match " + f"taz skim length {len(skims.dataset.indexes['otaz'])}" + ) def create_skim_dict(self, skim_tag, _override_offset_int=None): """ diff --git a/activitysim/core/skim_dataset.py b/activitysim/core/skim_dataset.py index 35894cb87..2ee7aff00 100644 --- a/activitysim/core/skim_dataset.py +++ b/activitysim/core/skim_dataset.py @@ -594,7 +594,7 @@ def load_sparse_maz_skims( maz_to_maz_tables=(), max_blend_distance=None, data_file_resolver=None, - max_float_precision:int = 32, + max_float_precision: int = 32, ): """ Load sparse MAZ data on top of TAZ skim data. From ca9ad7c4e9621fda517183ebf0ad09da7fd6f2d1 Mon Sep 17 00:00:00 2001 From: Jeff Newman Date: Tue, 23 Dec 2025 18:48:56 -0600 Subject: [PATCH 05/15] changelog note --- docs/dev-guide/changes.md | 80 ++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/docs/dev-guide/changes.md b/docs/dev-guide/changes.md index 2cd584b3c..98879d4a5 100644 --- a/docs/dev-guide/changes.md +++ b/docs/dev-guide/changes.md @@ -8,39 +8,49 @@ configurations or code to fail to run correctly. ## Upcoming Changes -This section describes changes that are implemented in current development -branch (i.e., the main branch on GitHub), but not yet released in a stable version -of ActivitySim. See below under the various version headings for changes in +This section describes changes that are implemented in current development +branch (i.e., the main branch on GitHub), but not yet released in a stable version +of ActivitySim. See below under the various version headings for changes in released versions. +### Changed Default for Sharrow "Fastmath" Optimization + +The default setting for the "fastmath" optimization in sharrow has been changed +from `True` to `False`. This optimization can improve performance in some cases, +but can also cause subtle and hard to diagnose bugs, particularly when the +data being processed contains `NaN` or `Inf` values. By defaulting to +`False`, we aim to improve platform stability for most users. Users who wish +to enable the "fastmath" optimization can do so by setting the `fastmath` option +to `True` in the `compute_settings` for each model component where it is desired. + ## v1.5.1 -This release includes a handful of minor updates and fixes, as well as enhancements -to the ActivtySim documentation. Users should generally not expect any breaking -changes relative to v1.5.0, except that when running a simulation there will be a +This release includes a handful of minor updates and fixes, as well as enhancements +to the ActivtySim documentation. Users should generally not expect any breaking +changes relative to v1.5.0, except that when running a simulation there will be a significant reduction in logging messages displayed on screen and written to the run log. ## v1.5 -This release includes most of the new features and enhancements developed as part +This release includes most of the new features and enhancements developed as part of the Phase 10 work. ### Preprocessing & Annotation -We have expanded preprocessing & annotation functionality, which is now standardized -in formatting and available on most model components. Existing model implementations -may need to make minor upgrades to model configuration files to conform with the new -standardized formatting. +We have expanded preprocessing & annotation functionality, which is now standardized +in formatting and available on most model components. Existing model implementations +may need to make minor upgrades to model configuration files to conform with the new +standardized formatting. ### Estimation Mode -Estimation mode has been updated to work with Larch v6. This new version of Larch -is modernized and more stable across platforms, and is more consistent with ActivitySim -spec files (as both are now built on Sharrow). The overall workflow for re-estimating -model parameters is very similar to before, but users will need to use Larch v6 instead -of Larch v5. In addition, some new capabilities have been added for modifying model +Estimation mode has been updated to work with Larch v6. This new version of Larch +is modernized and more stable across platforms, and is more consistent with ActivitySim +spec files (as both are now built on Sharrow). The overall workflow for re-estimating +model parameters is very similar to before, but users will need to use Larch v6 instead +of Larch v5. In addition, some new capabilities have been added for modifying model specifications in Larch (instead of re-running ActivitySim). ### Using UV for Dependency Management @@ -52,21 +62,21 @@ for details on how to install ActivitySim using UV. ### Skim Naming Conflict Resolution -The SkimDataset structure (required when using sharrow, optional in legacy mode) -requires every skim variable to have a unique name. It also merges OMX variables -based on time period, so that e.g. `BIKETIME__AM` and `BIKETIME__PM`, which would -be 2-d arrays in the OMX file, become just two different parts of a 3-d array -called `BIKETIME` in the SkimDataset. This is problematic when the skims also -contain a 2-d array called `BIKETIME`, as that has no temporal dimension, and it -gets loaded into a 2-d array in the SkimDataset, with the same name as the 3-d array, +The SkimDataset structure (required when using sharrow, optional in legacy mode) +requires every skim variable to have a unique name. It also merges OMX variables +based on time period, so that e.g. `BIKETIME__AM` and `BIKETIME__PM`, which would +be 2-d arrays in the OMX file, become just two different parts of a 3-d array +called `BIKETIME` in the SkimDataset. This is problematic when the skims also +contain a 2-d array called `BIKETIME`, as that has no temporal dimension, and it +gets loaded into a 2-d array in the SkimDataset, with the same name as the 3-d array, and thus one is overwritten and lost. -ActivitySim now includes a skims input check to identify this overwriting condition, -and raise an error if it is happening, so that the user can correct the condition -via (1) the `omx_ignore_patterns` setting, (2) revising the skim generation process -to not create the overlapping named skims in the file in the first place, -or (3) renaming one or both skims if the users actually wants both skims variables -in the model. The error message generated includes a link to instructions and +ActivitySim now includes a skims input check to identify this overwriting condition, +and raise an error if it is happening, so that the user can correct the condition +via (1) the `omx_ignore_patterns` setting, (2) revising the skim generation process +to not create the overlapping named skims in the file in the first place, +or (3) renaming one or both skims if the users actually wants both skims variables +in the model. The error message generated includes a link to instructions and discussion of these alternatives. ### Settings Checker @@ -93,12 +103,12 @@ See [Expression Profiling](Expression-Profiling) for details. A new telecommute status model component has been added to ActivitySim. This component models the telecommute status of workers, which can be used to determine -whether a worker telecommutes full-time, part-time, or not at all. A simple -implementation of the telecommute status model can be based on the worker's telecommute -frequency. For example, if a worker telecommutes 4 days a week, then there is -a 80% probability for them to telecommute on the simulation day. The telecommute -status model software can accommodate more complex model forms if needed. An example -telecommute status model specification can be found in +whether a worker telecommutes full-time, part-time, or not at all. A simple +implementation of the telecommute status model can be based on the worker's telecommute +frequency. For example, if a worker telecommutes 4 days a week, then there is +a 80% probability for them to telecommute on the simulation day. The telecommute +status model software can accommodate more complex model forms if needed. An example +telecommute status model specification can be found in [ActivitySim/sandag-abm3-example#30](https://github.com/ActivitySim/sandag-abm3-example/pull/30). From 7a6019cf6efb7e12cd7bf527ec9efba777af1c26 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 15:59:53 -0500 Subject: [PATCH 06/15] change from dims to sizes, reduces warnings --- activitysim/core/skim_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/activitysim/core/skim_dataset.py b/activitysim/core/skim_dataset.py index 2ee7aff00..b9d16f737 100644 --- a/activitysim/core/skim_dataset.py +++ b/activitysim/core/skim_dataset.py @@ -251,7 +251,7 @@ def set_df(self, df): if ( not df[self.time_key].dtype == "category" and np.issubdtype(df[self.time_key].dtype, np.integer) - and df[self.time_key].max() < self.dataset.dims["time_period"] + and df[self.time_key].max() < self.dataset.sizes["time_period"] ): logger.debug(f"natural use for time_period={self.time_key}") positions["time_period"] = df[self.time_key] From 0031bccdb66ea683b51104c492c2fb15fb77bd0f Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 16:01:00 -0500 Subject: [PATCH 07/15] require numpy 2.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8d6496c03..e83879aa0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ "cytoolz >= 0.8.1", "multimethod < 2.0", "numba >= 0.57", - "numpy >= 1.16.1, <1.26", + "numpy >= 2.0", "openmatrix >= 0.3.4.1", "pandas >= 2", "pandera >=0.15, <0.18.1", From 160c62abfe093764326ed0d6ac41852f5c4661e8 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 16:24:24 -0500 Subject: [PATCH 08/15] lock update numpy --- pyproject.toml | 4 +- uv.lock | 242 ++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 193 insertions(+), 53 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e83879aa0..d5c1d0eff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,9 +13,9 @@ dependencies = [ "cytoolz >= 0.8.1", "multimethod < 2.0", "numba >= 0.57", - "numpy >= 2.0", + "numpy >= 2.0, <3", "openmatrix >= 0.3.4.1", - "pandas >= 2", + "pandas >= 2, <3", "pandera >=0.15, <0.18.1", "platformdirs", "psutil >= 4.1", diff --git a/uv.lock b/uv.lock index f220f3b4b..12878d4c1 100644 --- a/uv.lock +++ b/uv.lock @@ -27,7 +27,8 @@ dependencies = [ { name = "cytoolz" }, { name = "multimethod" }, { name = "numba" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "openmatrix" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -108,9 +109,9 @@ requires-dist = [ { name = "cytoolz", specifier = ">=0.8.1" }, { name = "multimethod", specifier = "<2.0" }, { name = "numba", specifier = ">=0.57" }, - { name = "numpy", specifier = ">=1.16.1,<1.26" }, + { name = "numpy", specifier = ">=2.0,<3" }, { name = "openmatrix", specifier = ">=0.3.4.1" }, - { name = "pandas", specifier = ">=2" }, + { name = "pandas", specifier = ">=2,<3" }, { name = "pandera", specifier = ">=0.15,<0.18.1" }, { name = "platformdirs" }, { name = "psutil", specifier = ">=4.1" }, @@ -559,7 +560,7 @@ dependencies = [ { name = "msgpack", marker = "python_full_version < '3.11'" }, { name = "ndindex", marker = "python_full_version < '3.11'" }, { name = "numexpr", marker = "python_full_version < '3.11'" }, - { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "py-cpuinfo", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/bb/19a5d672f86dd26be0fc4f3a4c04264c088f3309b7b9d4e3e853a1f3cfda/blosc2-2.7.1.tar.gz", hash = "sha256:34db4d41543b16e894d507d6c7d10a9a67c9dd420ff40b072f7c39185cbb8fe8", size = 5149754, upload-time = "2024-07-30T20:18:33.3Z" } @@ -601,7 +602,7 @@ dependencies = [ { name = "msgpack", marker = "python_full_version >= '3.11'" }, { name = "ndindex", marker = "python_full_version >= '3.11'" }, { name = "numexpr", marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "platformdirs", marker = "python_full_version >= '3.11'" }, { name = "py-cpuinfo", marker = "python_full_version >= '3.11'" }, ] @@ -952,7 +953,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -1024,7 +1025,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -1602,7 +1603,8 @@ name = "geopandas" version = "1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -1658,7 +1660,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/ed/6bfa4109fcb23a58819600392564fea69cdc6551ffd5e69ccf1d52a40cbc/greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c", size = 271061, upload-time = "2025-08-07T13:17:15.373Z" }, { url = "https://files.pythonhosted.org/packages/2a/fc/102ec1a2fc015b3a7652abab7acf3541d58c04d3d17a8d3d6a44adae1eb1/greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590", size = 629475, upload-time = "2025-08-07T13:42:54.009Z" }, { url = "https://files.pythonhosted.org/packages/c5/26/80383131d55a4ac0fb08d71660fd77e7660b9db6bdb4e8884f46d9f2cc04/greenlet-3.2.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f10fd42b5ee276335863712fa3da6608e93f70629c631bf77145021600abc23c", size = 640802, upload-time = "2025-08-07T13:45:25.52Z" }, - { url = "https://files.pythonhosted.org/packages/9f/7c/e7833dbcd8f376f3326bd728c845d31dcde4c84268d3921afcae77d90d08/greenlet-3.2.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c8c9e331e58180d0d83c5b7999255721b725913ff6bc6cf39fa2a45841a4fd4b", size = 636703, upload-time = "2025-08-07T13:53:12.622Z" }, { url = "https://files.pythonhosted.org/packages/e9/49/547b93b7c0428ede7b3f309bc965986874759f7d89e4e04aeddbc9699acb/greenlet-3.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58b97143c9cc7b86fc458f215bd0932f1757ce649e05b640fea2e79b54cedb31", size = 635417, upload-time = "2025-08-07T13:18:25.189Z" }, { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d", size = 584358, upload-time = "2025-08-07T13:18:23.708Z" }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5", size = 1113550, upload-time = "2025-08-07T13:42:37.467Z" }, @@ -1669,7 +1670,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, { url = "https://files.pythonhosted.org/packages/ae/8f/95d48d7e3d433e6dae5b1682e4292242a53f22df82e6d3dda81b1701a960/greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3", size = 644646, upload-time = "2025-08-07T13:45:26.523Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5e/405965351aef8c76b8ef7ad370e5da58d57ef6068df197548b015464001a/greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633", size = 640519, upload-time = "2025-08-07T13:53:13.928Z" }, { url = "https://files.pythonhosted.org/packages/25/5d/382753b52006ce0218297ec1b628e048c4e64b155379331f25a7316eb749/greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079", size = 639707, upload-time = "2025-08-07T13:18:27.146Z" }, { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, @@ -1680,7 +1680,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" }, { url = "https://files.pythonhosted.org/packages/3b/16/035dcfcc48715ccd345f3a93183267167cdd162ad123cd93067d86f27ce4/greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968", size = 655185, upload-time = "2025-08-07T13:45:27.624Z" }, - { url = "https://files.pythonhosted.org/packages/31/da/0386695eef69ffae1ad726881571dfe28b41970173947e7c558d9998de0f/greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9", size = 649926, upload-time = "2025-08-07T13:53:15.251Z" }, { url = "https://files.pythonhosted.org/packages/68/88/69bf19fd4dc19981928ceacbc5fd4bb6bc2215d53199e367832e98d1d8fe/greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6", size = 651839, upload-time = "2025-08-07T13:18:30.281Z" }, { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" }, @@ -1691,7 +1690,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814, upload-time = "2025-08-07T13:15:50.011Z" }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073, upload-time = "2025-08-07T13:42:57.23Z" }, { url = "https://files.pythonhosted.org/packages/f7/0b/bc13f787394920b23073ca3b6c4a7a21396301ed75a655bcb47196b50e6e/greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc", size = 655191, upload-time = "2025-08-07T13:45:29.752Z" }, - { url = "https://files.pythonhosted.org/packages/f2/d6/6adde57d1345a8d0f14d31e4ab9c23cfe8e2cd39c3baf7674b4b0338d266/greenlet-3.2.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c5111ccdc9c88f423426df3fd1811bfc40ed66264d35aa373420a34377efc98a", size = 649516, upload-time = "2025-08-07T13:53:16.314Z" }, { url = "https://files.pythonhosted.org/packages/7f/3b/3a3328a788d4a473889a2d403199932be55b1b0060f4ddd96ee7cdfcad10/greenlet-3.2.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76383238584e9711e20ebe14db6c88ddcedc1829a9ad31a584389463b5aa504", size = 652169, upload-time = "2025-08-07T13:18:32.861Z" }, { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497, upload-time = "2025-08-07T13:18:31.636Z" }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662, upload-time = "2025-08-07T13:42:41.117Z" }, @@ -1702,7 +1700,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" }, { url = "https://files.pythonhosted.org/packages/c0/aa/687d6b12ffb505a4447567d1f3abea23bd20e73a5bed63871178e0831b7a/greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5", size = 699218, upload-time = "2025-08-07T13:45:30.969Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" }, { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, @@ -2342,7 +2339,8 @@ dependencies = [ { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "numba" }, { name = "numexpr" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "pyarrow" }, @@ -2532,7 +2530,8 @@ dependencies = [ { name = "cycler" }, { name = "fonttools" }, { name = "kiwisolver" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, { name = "pillow" }, { name = "pyparsing" }, @@ -2959,7 +2958,8 @@ version = "0.62.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "llvmlite" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e5/96/66dae7911cb331e99bf9afe35703317d8da0fad81ff49fed77f4855e4b60/numba-0.62.0.tar.gz", hash = "sha256:2afcc7899dc93fefecbb274a19c592170bc2dbfae02b00f83e305332a9857a5a", size = 2749680, upload-time = "2025-09-18T17:58:11.394Z" } wheels = [ @@ -2993,7 +2993,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/56/8895a76abe4ec94ebd01eeb6d74f587bc4cddd46569670e1402852a5da13/numcodecs-0.13.1.tar.gz", hash = "sha256:a3cf37881df0898f3a9c0d4477df88133fe85185bffe57ba31bcc2fa207709bc", size = 5955215, upload-time = "2024-10-09T16:28:00.188Z" } wheels = [ @@ -3026,7 +3026,7 @@ resolution-markers = [ ] dependencies = [ { name = "deprecated", marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/fc/bb532969eb8236984ba65e4f0079a7da885b8ac0ce1f0835decbb3938a62/numcodecs-0.15.1.tar.gz", hash = "sha256:eeed77e4d6636641a2cc605fbc6078c7a8f2cc40f3dfa2b3f61e52e6091b04ff", size = 6267275, upload-time = "2025-02-10T10:23:33.254Z" } wheels = [ @@ -3049,7 +3049,8 @@ name = "numexpr" version = "2.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/45/6e/8164bc96108991fcd74e9d3eda4a4bf5752c394dde5b2408ecbefeaa339f/numexpr-2.13.0.tar.gz", hash = "sha256:3363d804f202437586447a49b5c83b01322e8be72279d49e0bf524720edc01b6", size = 118688, upload-time = "2025-09-24T12:18:17.621Z" } wheels = [ @@ -3113,24 +3114,153 @@ wheels = [ [[package]] name = "numpy" -version = "1.25.2" +version = "2.2.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760", size = 10805282, upload-time = "2023-07-31T15:17:43.198Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/50/8aedb5ff1460e7c8527af15c6326115009e7c270ec705487155b779ebabb/numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3", size = 20814934, upload-time = "2023-07-31T14:50:49.761Z" }, - { url = "https://files.pythonhosted.org/packages/c3/ea/1d95b399078ecaa7b5d791e1fdbb3aee272077d9fd5fb499593c87dec5ea/numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f", size = 13994425, upload-time = "2023-07-31T14:51:12.312Z" }, - { url = "https://files.pythonhosted.org/packages/b1/39/3f88e2bfac1fb510c112dc0c78a1e7cad8f3a2d75e714d1484a044c56682/numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187", size = 14167163, upload-time = "2023-07-31T14:51:34.507Z" }, - { url = "https://files.pythonhosted.org/packages/71/3c/3b1981c6a1986adc9ee7db760c0c34ea5b14ac3da9ecfcf1ea2a4ec6c398/numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357", size = 18219190, upload-time = "2023-07-31T14:52:07.478Z" }, - { url = "https://files.pythonhosted.org/packages/73/6f/2a0d0ad31a588d303178d494787f921c246c6234eccced236866bc1beaa5/numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9", size = 18068385, upload-time = "2023-07-31T14:52:35.891Z" }, - { url = "https://files.pythonhosted.org/packages/63/bd/a1c256cdea5d99e2f7e1acc44fc287455420caeb2e97d43ff0dda908fae8/numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044", size = 12661360, upload-time = "2023-07-31T14:52:56.694Z" }, - { url = "https://files.pythonhosted.org/packages/b7/db/4d37359e2c9cf8bf071c08b8a6f7374648a5ab2e76e2e22e3b808f81d507/numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545", size = 15554633, upload-time = "2023-07-31T14:53:21.013Z" }, - { url = "https://files.pythonhosted.org/packages/c9/57/3cb8131a0e6d559501e088d3e685f4122e9ff9104c4b63e4dfd3a577b491/numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418", size = 20801693, upload-time = "2023-07-31T14:53:53.29Z" }, - { url = "https://files.pythonhosted.org/packages/86/a1/b8ef999c32f26a97b5f714887e21f96c12ae99a38583a0a96e65283ac0a1/numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f", size = 14004130, upload-time = "2023-07-31T14:54:16.413Z" }, - { url = "https://files.pythonhosted.org/packages/50/67/3e966d99a07d60a21a21d7ec016e9e4c2642a86fea251ec68677daf71d4d/numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2", size = 14158219, upload-time = "2023-07-31T14:54:39.032Z" }, - { url = "https://files.pythonhosted.org/packages/32/6a/65dbc57a89078af9ff8bfcd4c0761a50172d90192eaeb1b6f56e5fbf1c3d/numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf", size = 18209344, upload-time = "2023-07-31T14:55:08.584Z" }, - { url = "https://files.pythonhosted.org/packages/cd/fe/e900cb2ebafae04b7570081cefc65b6fdd9e202b9b353572506cea5cafdf/numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364", size = 18072378, upload-time = "2023-07-31T14:55:39.551Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e4/990c6cb09f2cd1a3f53bcc4e489dad903faa01b058b625d84bb62d2e9391/numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d", size = 12654351, upload-time = "2023-07-31T14:56:10.623Z" }, - { url = "https://files.pythonhosted.org/packages/72/b2/02770e60c4e2f7e158d923ab0dea4e9f146a2dbf267fec6d8dc61d475689/numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4", size = 15546748, upload-time = "2023-07-31T14:57:13.015Z" }, +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14'", + "python_full_version >= '3.12' and python_full_version < '3.14'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, + { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, + { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, + { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, + { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, + { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, + { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, + { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, + { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, + { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, + { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, + { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, + { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, + { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, + { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, + { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, + { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, + { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, + { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, + { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" }, + { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" }, + { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" }, + { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" }, + { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" }, + { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" }, + { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" }, + { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" }, + { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" }, + { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" }, + { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" }, + { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, + { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, + { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, ] [[package]] @@ -3151,7 +3281,8 @@ name = "openmatrix" version = "0.3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "tables", version = "3.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "tables", version = "3.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] @@ -3187,7 +3318,7 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.14'", ] dependencies = [ - { name = "numpy", marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "python-dateutil", marker = "python_full_version >= '3.12'" }, { name = "pytz", marker = "python_full_version >= '3.12'" }, { name = "tzdata", marker = "python_full_version >= '3.12'" }, @@ -3217,7 +3348,8 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, { name = "python-dateutil", marker = "python_full_version < '3.12'" }, { name = "pytz", marker = "python_full_version < '3.12'" }, { name = "tzdata", marker = "python_full_version < '3.12'" }, @@ -3266,7 +3398,8 @@ version = "0.18.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "multimethod" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -3816,7 +3949,8 @@ version = "0.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bf/1d/ae0340237207664e2da1b77f2cdbcb5f81fd0fc9f3200a48ca993a5e12ef/pyogrio-0.11.1.tar.gz", hash = "sha256:e1441dc9c866f10d8e6ae7ea9249a10c1f57ea921b1f19a5b0977ab91ef8082c", size = 287267, upload-time = "2025-08-02T20:19:20.167Z" } @@ -4797,7 +4931,8 @@ version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "scipy" }, { name = "threadpoolctl" }, ] @@ -4840,7 +4975,8 @@ name = "scipy" version = "1.15.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } wheels = [ @@ -4928,7 +5064,8 @@ name = "shapely" version = "2.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/bc/0989043118a27cccb4e906a46b7565ce36ca7b57f5a18b78f4f1b0f72d9d/shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9", size = 315489, upload-time = "2025-09-24T13:51:41.432Z" } wheels = [ @@ -5001,7 +5138,8 @@ dependencies = [ { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "numba" }, { name = "numexpr" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "pyarrow" }, @@ -5100,7 +5238,8 @@ version = "0.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numba" }, - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/74/5c674277fc3d61bd1863d233a8e1f7ddf35cb1adeeaf9973888629e7a9b1/sparse-0.17.0.tar.gz", hash = "sha256:6b1ad51a810c5be40b6f95e28513ec810fe1c785923bd83b2e4839a751df4bf7", size = 642387, upload-time = "2025-05-20T08:17:03.256Z" } wheels = [ @@ -5450,7 +5589,7 @@ resolution-markers = [ dependencies = [ { name = "blosc2", version = "2.7.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numexpr", marker = "python_full_version < '3.11'" }, - { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "packaging", marker = "python_full_version < '3.11'" }, { name = "py-cpuinfo", marker = "python_full_version < '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, @@ -5490,7 +5629,7 @@ resolution-markers = [ dependencies = [ { name = "blosc2", version = "3.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "numexpr", marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging", marker = "python_full_version >= '3.11'" }, { name = "py-cpuinfo", marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, @@ -5902,7 +6041,8 @@ name = "xarray" version = "2025.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, @@ -5954,7 +6094,7 @@ dependencies = [ { name = "asciitree", marker = "python_full_version < '3.11'" }, { name = "fasteners", marker = "python_full_version < '3.11' and sys_platform != 'emscripten'" }, { name = "numcodecs", version = "0.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/23/c4/187a21ce7cf7c8f00c060dd0e04c2a81139bb7b1ab178bba83f2e1134ce2/zarr-2.18.3.tar.gz", hash = "sha256:2580d8cb6dd84621771a10d31c4d777dca8a27706a1a89b29f42d2d37e2df5ce", size = 3603224, upload-time = "2024-09-04T23:20:16.595Z" } wheels = [ @@ -5974,7 +6114,7 @@ dependencies = [ { name = "asciitree", marker = "python_full_version >= '3.11'" }, { name = "fasteners", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten'" }, { name = "numcodecs", version = "0.15.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/da/1d/01cf9e3ab2d85190278efc3fca9f68563de35ae30ee59e7640e3af98abe3/zarr-2.18.7.tar.gz", hash = "sha256:b2b8f66f14dac4af66b180d2338819981b981f70e196c9a66e6bfaa9e59572f5", size = 3604558, upload-time = "2025-04-09T07:59:28.482Z" } wheels = [ From 3b29711a2839aeb5ec02ab6a52f2471f4f24feaf Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 16:55:41 -0500 Subject: [PATCH 09/15] unpin pandera, update to latest --- pyproject.toml | 4 ++-- uv.lock | 15 +++++---------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d5c1d0eff..60160fca4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "numpy >= 2.0, <3", "openmatrix >= 0.3.4.1", "pandas >= 2, <3", - "pandera >=0.15, <0.18.1", + "pandera >=0.30", "platformdirs", "psutil >= 4.1", "pyarrow >= 2.0", @@ -26,7 +26,7 @@ dependencies = [ "requests >= 2.7", "scikit-learn >= 1.2", "setuptools>=80.9.0", - "sharrow>=2.15", + "sharrow>=2.15.0", "sparse", "tables >= 3.9", # pytables is tables in pypi "xarray >= 2024.05", diff --git a/uv.lock b/uv.lock index 12878d4c1..4cda4a7c7 100644 --- a/uv.lock +++ b/uv.lock @@ -112,7 +112,7 @@ requires-dist = [ { name = "numpy", specifier = ">=2.0,<3" }, { name = "openmatrix", specifier = ">=0.3.4.1" }, { name = "pandas", specifier = ">=2,<3" }, - { name = "pandera", specifier = ">=0.15,<0.18.1" }, + { name = "pandera", specifier = ">=0.30" }, { name = "platformdirs" }, { name = "psutil", specifier = ">=4.1" }, { name = "pyarrow", specifier = ">=2.0" }, @@ -3394,23 +3394,18 @@ wheels = [ [[package]] name = "pandera" -version = "0.18.0" +version = "0.30.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "multimethod" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "packaging" }, - { name = "pandas", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, - { name = "pandas", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "pydantic" }, { name = "typeguard" }, + { name = "typing-extensions" }, { name = "typing-inspect" }, - { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/60/d928125aca458c0dcaa07fe231c9149137ef038697eae872332a1b1136e0/pandera-0.18.0.tar.gz", hash = "sha256:97ab33d884362c0bb99668a12be2855d15c1a71f4934c588a999947b47764bc1", size = 165999, upload-time = "2023-12-08T21:11:37.019Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/82/e5c312159bba3220e0ba2a3f30d2f89c44ab611d5b4d2655f952caad22f0/pandera-0.30.1.tar.gz", hash = "sha256:84af217d96dd6541026b75e273c06c5ce70bb54f3a63c8b0a1f371935e24460d", size = 592585, upload-time = "2026-03-18T00:58:58.277Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/2b/c01ef6aad281332f2628a4ae9c3cd8ba6fd632e547e9a645ffe18aeaa94f/pandera-0.18.0-py3-none-any.whl", hash = "sha256:fe2da835a16df5a7e49fbfb828f1eeaea9d6f4534f124630957e64fef53e7e73", size = 209007, upload-time = "2023-12-08T21:11:34.688Z" }, + { url = "https://files.pythonhosted.org/packages/37/17/4c89d26ba4f6fb7fc5d3c7f3558aaf4b1e4d843b855e01300a86876987cf/pandera-0.30.1-py3-none-any.whl", hash = "sha256:910656a8c1e10a9759b57dd58ac9dd16298e64baaaae476f1c2c40ee326fb263", size = 303587, upload-time = "2026-03-18T00:58:56.993Z" }, ] [[package]] From 9a60665733d48f779cf746b007e506af895d3e4d Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 17:57:06 -0500 Subject: [PATCH 10/15] fixes for numpy 2.0 --- .pre-commit-config.yaml | 3 +++ activitysim/abm/models/util/school_escort_tours_trips.py | 6 +++--- activitysim/core/timetable.py | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 41fecfab5..8ddf528b6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,6 +17,9 @@ repos: rev: 22.6.0 hooks: - id: black + language_version: python3.12 + # explicitly set the Python version for the hook environment for black, + # as older versions of black don't work with the latest Python. #- repo: https://github.com/PyCQA/flake8 # rev: 5.0.4 diff --git a/activitysim/abm/models/util/school_escort_tours_trips.py b/activitysim/abm/models/util/school_escort_tours_trips.py index 1bfdd22aa..43eed64bb 100644 --- a/activitysim/abm/models/util/school_escort_tours_trips.py +++ b/activitysim/abm/models/util/school_escort_tours_trips.py @@ -125,7 +125,7 @@ def join_attributes(df, column_names): escortee_num1 = pd.Series( np.where( filtered_bundles[f"bundle_child{first_child}"] > 0, - first_child, + str(first_child), "", ), index=filtered_bundles.index, @@ -133,7 +133,7 @@ def join_attributes(df, column_names): escortee_num2 = pd.Series( np.where( filtered_bundles[f"bundle_child{second_child}"] > 0, - second_child, + str(second_child), "", ), index=filtered_bundles.index, @@ -141,7 +141,7 @@ def join_attributes(df, column_names): escortee_num3 = pd.Series( np.where( filtered_bundles[f"bundle_child{third_child}"] > 0, - third_child, + str(third_child), "", ), index=filtered_bundles.index, diff --git a/activitysim/core/timetable.py b/activitysim/core/timetable.py index cedb3d267..7686d833d 100644 --- a/activitysim/core/timetable.py +++ b/activitysim/core/timetable.py @@ -221,7 +221,7 @@ def tour_map(persons, tours, tdd_alts, persons_id_col="person_id"): "maint": "mnt", } - sigil_type = "S3" + sigil_type = np.dtypes.StringDType() # we can only map scheduled tours tours = tours[tours.tdd.notnull()] @@ -229,7 +229,7 @@ def tour_map(persons, tours, tdd_alts, persons_id_col="person_id"): # convert tdd_alts_df start, end times to time_windows min_period = tdd_alts.start.min() max_period = tdd_alts.end.max() - n_periods = max_period - min_period + 1 + n_periods = int(max_period - min_period + 1) n_persons = len(persons.index) agenda = np.array([sigil["empty"]] * (n_periods * n_persons), dtype=sigil_type) From 98db8bcf5f4080504629a419f042b335525e7ab2 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 18:19:06 -0500 Subject: [PATCH 11/15] address pandera import warnings --- activitysim/abm/models/input_checker.py | 4 ++-- .../models/util/test/test_input_checker.py | 2 +- .../data_model/input_checks.py | 22 ++++++++++--------- .../data_model/input_checks.py | 2 +- .../data_model/input_checks_pydantic_dev.py | 15 ++++++++----- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/activitysim/abm/models/input_checker.py b/activitysim/abm/models/input_checker.py index 68274ba69..ae8972e49 100644 --- a/activitysim/abm/models/input_checker.py +++ b/activitysim/abm/models/input_checker.py @@ -8,12 +8,12 @@ import numpy as np import pandas as pd -import pandera as pa +import pandera.pandas as pa import pydantic from activitysim.core import workflow -from activitysim.core.input import read_input_table from activitysim.core.exceptions import ModelConfigurationError +from activitysim.core.input import read_input_table logger = logging.getLogger(__name__) file_logger = logger.getChild("logfile") diff --git a/activitysim/abm/models/util/test/test_input_checker.py b/activitysim/abm/models/util/test/test_input_checker.py index daecc47bf..ee9af09b5 100644 --- a/activitysim/abm/models/util/test/test_input_checker.py +++ b/activitysim/abm/models/util/test/test_input_checker.py @@ -7,7 +7,7 @@ import pandas as pd import pandas.testing as pdt -import pandera as pa +import pandera.pandas as pa import pytest import yaml diff --git a/activitysim/examples/production_semcog/data_model/input_checks.py b/activitysim/examples/production_semcog/data_model/input_checks.py index ce93a86e0..eb7cb9f4e 100644 --- a/activitysim/examples/production_semcog/data_model/input_checks.py +++ b/activitysim/examples/production_semcog/data_model/input_checks.py @@ -4,24 +4,26 @@ Instructions: customize these example values for your own ActivitySim implementation """ -from typing import List, Optional -import os, sys, logging +from __future__ import annotations -from pydantic import BaseModel, validator -import pandera as pa -import numpy as np -import pandas as pd -import openmatrix as omx +import csv +import logging +import os # for skim name parsing import re -import csv - -from activitysim.core import config +import sys +from typing import List, Optional import enums as e +import numpy as np +import openmatrix as omx +import pandas as pd +import pandera.pandas as pa +from pydantic import BaseModel, validator from activitysim.abm.models.input_checker import TABLE_STORE, log_info +from activitysim.core import config class Household(pa.DataFrameModel): diff --git a/activitysim/examples/prototype_mtc_extended/data_model/input_checks.py b/activitysim/examples/prototype_mtc_extended/data_model/input_checks.py index f87767ab6..f04491a5a 100644 --- a/activitysim/examples/prototype_mtc_extended/data_model/input_checks.py +++ b/activitysim/examples/prototype_mtc_extended/data_model/input_checks.py @@ -19,7 +19,7 @@ import numpy as np import openmatrix as omx import pandas as pd -import pandera as pa +import pandera.pandas as pa from pydantic import BaseModel, validator from activitysim.abm.models.input_checker import TABLE_STORE, log_info diff --git a/activitysim/examples/prototype_mtc_extended/data_model/input_checks_pydantic_dev.py b/activitysim/examples/prototype_mtc_extended/data_model/input_checks_pydantic_dev.py index f2c3ddb99..72ec27bbe 100644 --- a/activitysim/examples/prototype_mtc_extended/data_model/input_checks_pydantic_dev.py +++ b/activitysim/examples/prototype_mtc_extended/data_model/input_checks_pydantic_dev.py @@ -4,16 +4,19 @@ Instructions: customize these example values for your own ActivitySim implementation """ +from __future__ import annotations + +import logging +import os +import sys from typing import List, Optional -import os, sys, logging -from pydantic import BaseModel, validator -import pandera as pa +import enums as e import numpy as np -import pandas as pd import openmatrix as omx - -import enums as e +import pandas as pd +import pandera.pandas as pa +from pydantic import BaseModel, validator from activitysim.abm.models.input_checker import TABLE_STORE From fa9e603e51903256679ab4199541d3175c2ba628 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 6 Apr 2026 18:19:18 -0500 Subject: [PATCH 12/15] fix offset overflow --- activitysim/core/skim_dictionary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/activitysim/core/skim_dictionary.py b/activitysim/core/skim_dictionary.py index 59692e3d3..bdf09b89f 100644 --- a/activitysim/core/skim_dictionary.py +++ b/activitysim/core/skim_dictionary.py @@ -89,7 +89,7 @@ def set_offset_list(self, offset_list): # - for performance, check if this is a simple range that can ber represented by an int offset first_offset = offset_list[0] if offset_list == list(range(first_offset, len(offset_list) + first_offset)): - offset_int = -1 * first_offset + offset_int = -1 * int(first_offset) self.set_offset_int(offset_int) else: offset_series = pd.Series( From 5194dad156fbf05c002dbbb005e91551502b4431 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Tue, 7 Apr 2026 18:10:52 -0500 Subject: [PATCH 13/15] stable sorting of ProtoPop --- .../abm/models/disaggregate_accessibility.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/activitysim/abm/models/disaggregate_accessibility.py b/activitysim/abm/models/disaggregate_accessibility.py index aa2703e19..106d67986 100644 --- a/activitysim/abm/models/disaggregate_accessibility.py +++ b/activitysim/abm/models/disaggregate_accessibility.py @@ -647,6 +647,8 @@ def create_proto_pop(self): households.name, persons.name, tours.name = klist # Create hhid + # the households dataframe created by generate_replicates above is indexed by a + # simple zero-based RangeIndex, so we will create new ID's by adding 1. households[hhid] = households.index + 1 households["household_serial_no"] = households[hhid] @@ -658,8 +660,14 @@ def create_proto_pop(self): .set_index("index") .rename(columns={"hhid": hhid}) ) + # NOTE: in order to get a stable and reproducible sort of persons here, + # the sort keys need to be given all in a single sort command. This code + # originally sorted the join (to in theory get all the persons joined in + # order, then sorted again by hhid to get the households order, but this + # does not guarantee that the persons stay in order, and sorting implementations + # can and do vary by platform and dependency version. persons = ( - rep.join(persons, sort=True).sort_values(hhid).reset_index(drop=True) + rep.join(persons).sort_values([hhid, "index"]).reset_index(drop=True) ) persons[perid] = persons.index + 1 @@ -668,6 +676,10 @@ def create_proto_pop(self): tours = tours.merge( persons[[pkey, hhid, perid]], left_on=tkey, right_on=pkey ) + # We sort tours on the three keys, then drop the index (which is just a row number but scrambled), + # then set the tour id, based on the sorted row number. This is to ensure that the tour ids are + # assigned in a stable way that is not dependent on the order of the merge. + tours = tours.sort_values([hhid, perid, tkey]).reset_index(drop=True) tours.index = tours.index.set_names([tourid]) tours.index += 1 tours = tours.reset_index().drop(columns=[pkey]) From 43f17dbf569cad02386e4dcf61660ce46eb70e7b Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Tue, 7 Apr 2026 18:11:10 -0500 Subject: [PATCH 14/15] update pins for nbmake and pytest --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 60160fca4..6854c027d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -124,7 +124,7 @@ dev = [ "myst-parser", # allows markdown in sphinx "nbconvert", "nbformat", - "nbmake==1.4.6", + "nbmake==1.5.5", "numexpr", "numpydoc", "pre-commit", @@ -132,7 +132,7 @@ dev = [ "pydata-sphinx-theme", "pydot>=4.0.1", "pyinstrument==4.4", - "pytest==7.2", + "pytest>=8.4.2", "pytest-cov", "pytest-regressions", "requests>=2.32.3", From 15f77d7e48e34382f4ffa2f6acb50c37dbc93122 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Tue, 7 Apr 2026 18:15:20 -0500 Subject: [PATCH 15/15] update lockfile --- uv.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/uv.lock b/uv.lock index 4cda4a7c7..446c40ca0 100644 --- a/uv.lock +++ b/uv.lock @@ -122,7 +122,7 @@ requires-dist = [ { name = "requests", specifier = ">=2.7" }, { name = "scikit-learn", specifier = ">=1.2" }, { name = "setuptools", specifier = ">=80.9.0" }, - { name = "sharrow", specifier = ">=2.15" }, + { name = "sharrow", specifier = ">=2.15.0" }, { name = "sparse" }, { name = "tables", specifier = ">=3.9" }, { name = "xarray", specifier = ">=2024.5" }, @@ -152,7 +152,7 @@ dev = [ { name = "myst-parser" }, { name = "nbconvert" }, { name = "nbformat" }, - { name = "nbmake", specifier = "==1.4.6" }, + { name = "nbmake", specifier = "==1.5.5" }, { name = "numexpr" }, { name = "numpydoc" }, { name = "pre-commit" }, @@ -160,7 +160,7 @@ dev = [ { name = "pydata-sphinx-theme" }, { name = "pydot", specifier = ">=4.0.1" }, { name = "pyinstrument", specifier = "==4.4" }, - { name = "pytest", specifier = "==7.2" }, + { name = "pytest", specifier = ">=8.4.2" }, { name = "pytest-cov" }, { name = "pytest-regressions" }, { name = "requests", specifier = ">=2.32.3" }, @@ -2811,7 +2811,7 @@ wheels = [ [[package]] name = "nbmake" -version = "1.4.6" +version = "1.5.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ipykernel" }, @@ -2820,9 +2820,9 @@ dependencies = [ { name = "pygments" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e5/b7/69206084d99046c5f9153dbc1329a6039c7e9234f3d1ea11e0dbd0bb293c/nbmake-1.4.6.tar.gz", hash = "sha256:874c5b9d99922f88bf0c92a3b869e75bff154edba2538efef0a1d7ad2263f5fb", size = 13996, upload-time = "2023-10-16T10:14:37.712Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/9a/aae201cee5639e1d562b3843af8fd9f8d018bb323e776a2b973bdd5fc64b/nbmake-1.5.5.tar.gz", hash = "sha256:239dc868ea13a7c049746e2aba2c229bd0f6cdbc6bfa1d22f4c88638aa4c5f5c", size = 85929, upload-time = "2024-12-23T18:33:46.774Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/06/c4d83f6eeb9a3624902b9bb619beeed593a9eb304f5246b784d91bfe1623/nbmake-1.4.6-py3-none-any.whl", hash = "sha256:233603c9186c659cb42524de36b556197c352ede1f9daeaa1b1141dfad226218", size = 13378, upload-time = "2023-10-16T10:14:36.372Z" }, + { url = "https://files.pythonhosted.org/packages/eb/be/b257e12f9710819fde40adc972578bee6b72c5992da1bc8369bef2597756/nbmake-1.5.5-py3-none-any.whl", hash = "sha256:c6fbe6e48b60cacac14af40b38bf338a3b88f47f085c54ac5b8639ff0babaf4b", size = 12818, upload-time = "2024-12-23T18:33:44.566Z" }, ] [[package]] @@ -4136,20 +4136,20 @@ wheels = [ [[package]] name = "pytest" -version = "7.2.0" +version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, + { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/21/055f39bf8861580b43f845f9e8270c7786fe629b2f8562ff09007132e2e7/pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59", size = 1300608, upload-time = "2022-10-25T07:58:12.847Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/68/a5eb36c3a8540594b6035e6cdae40c1ef1b6a2bfacbecc3d1a544583c078/pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71", size = 316791, upload-time = "2022-10-25T07:58:10.747Z" }, + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, ] [[package]]