From 3ca67f46a4ef9c4711395ce80a085f54ceabf517 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Tue, 19 Aug 2025 20:14:50 +0500 Subject: [PATCH 01/18] WIP: added migration file. --- .../timed_beliefs_materialized_views.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py diff --git a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py new file mode 100644 index 0000000000..f4aa64e4d5 --- /dev/null +++ b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py @@ -0,0 +1,63 @@ +"""Add materialized view for belief optimization + +Revision ID: c98798csds8c +Revises: b8f3cda5e023 +Create Date: 2025-08-08 04:55:33.722545 + +""" + +from alembic import op + +# revision identifiers +revision = "c98798csds8c" +down_revision = "b8f3cda5e023" +branch_labels = None +depends_on = None + + +def upgrade(): + # Create the materialized view with proper alias + op.execute( + """ + CREATE MATERIALIZED VIEW timed_belief_min_v AS + SELECT * + FROM ( + SELECT + timed_belief.sensor_id, + timed_belief.event_start, + timed_belief.source_id, + MIN(timed_belief.belief_horizon) AS most_recent_belief_horizon + FROM timed_belief + INNER JOIN data_source + ON data_source.id = timed_belief.source_id + GROUP BY + timed_belief.sensor_id, + timed_belief.event_start, + timed_belief.source_id + ) AS belief_mins + GROUP BY + sensor_id, + event_start, + source_id, + most_recent_belief_horizon; + """ + ) + + # Create indexes + op.execute( + """ + CREATE INDEX idx_timed_belief_min_v_sensor_event + ON timed_belief_min_v(sensor_id, event_start); + """ + ) + + op.execute( + """ + CREATE INDEX idx_timed_belief_min_v_event_start + ON timed_belief_min_v(event_start); + """ + ) + + +def downgrade(): + op.execute("DROP MATERIALIZED VIEW IF EXISTS timed_belief_min_v CASCADE;") From 14226badb047b117dbc8c3bb86de37c258fd0250 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Wed, 20 Aug 2025 19:23:11 +0500 Subject: [PATCH 02/18] Added materialized view boolean to backend logic and created CLI command for refresh. --- flexmeasures/api/dev/sensors.py | 5 +++ flexmeasures/api/v3_0/assets.py | 5 +++ flexmeasures/cli/db_ops.py | 29 +++++++++++++++ flexmeasures/data/models/generic_assets.py | 6 +++- flexmeasures/data/models/time_series.py | 10 +++++- .../data/schemas/tests/test_input_schema.py | 2 ++ flexmeasures/utils/validation_utils.py | 35 +++++++++++++++++++ 7 files changed, 90 insertions(+), 2 deletions(-) diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index b8f52669e0..9a5dbadfc9 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -20,6 +20,9 @@ from flexmeasures.data.models.time_series import Sensor from flexmeasures.data.services.annotations import prepare_annotations_for_chart from flexmeasures.ui.utils.view_utils import set_session_variables +from flexmeasures.utils.validation_utils import ( + validate_timed_belief_min_v, +) class SensorAPI(FlaskView): @@ -90,6 +93,7 @@ def get_chart(self, id: int, sensor: Sensor, **kwargs): "most_recent_beliefs_only": fields.Boolean( required=False, load_default=True ), + "use_materialized_view": fields.Boolean(required=False, load_default=True), }, location="query", ) @@ -110,6 +114,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "resolution" (see :ref:`resolutions`) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) """ + kwargs["timed_belief_min_v"] = validate_timed_belief_min_v(db.session) return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index 55a13a8e24..4b123e298a 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -47,6 +47,9 @@ from flexmeasures.utils.coding_utils import ( flatten_unique, ) +from flexmeasures.utils.validation_utils import ( + validate_timed_belief_min_v, +) from flexmeasures.ui.utils.view_utils import clear_session, set_session_variables from flexmeasures.auth.policy import check_access from werkzeug.exceptions import Forbidden, Unauthorized @@ -657,6 +660,7 @@ def get_chart(self, id: int, asset: GenericAsset, **kwargs): "beliefs_after": AwareDateTimeField(format="iso", required=False), "beliefs_before": AwareDateTimeField(format="iso", required=False), "most_recent_beliefs_only": fields.Boolean(required=False), + "use_materialized_view": fields.Boolean(required=False, load_default=True), }, location="query", ) @@ -669,6 +673,7 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): Data for use in charts (in case you have the chart specs already). """ sensors = flatten_unique(asset.validate_sensors_to_show()) + kwargs["timed_belief_min_v"] = validate_timed_belief_min_v(db.session) return asset.search_beliefs(sensors=sensors, as_json=True, **kwargs) @route("//auditlog") diff --git a/flexmeasures/cli/db_ops.py b/flexmeasures/cli/db_ops.py index 21173150ef..01c04a41cf 100644 --- a/flexmeasures/cli/db_ops.py +++ b/flexmeasures/cli/db_ops.py @@ -9,6 +9,7 @@ import click from flexmeasures.cli.utils import MsgStyle +from flexmeasures.data import db @click.group("db-ops") @@ -95,4 +96,32 @@ def restore(file: str): click.secho("db restore unsuccessful", **MsgStyle.ERROR) +@fm_db_ops.command("refresh-materialized-views") +@with_appcontext +@click.option("--concurrent", is_flag=True, default=False) +def refresh_materialized_views(concurrent: bool): + """Refresh materialized views for better query performance.""" + from sqlalchemy import text + + refresh_type = "CONCURRENTLY" if concurrent else "" + import time + + start_time = time.time() + click.echo( + f"Refreshing materialized views {'CONCURRENTLY' if concurrent else 'without concurrency'}..." + ) + try: + db.session.execute( + text(f"REFRESH MATERIALIZED {refresh_type} VIEW timed_belief_min_v;") + ) + db.session.commit() + elapsed_time = time.time() - start_time + click.echo( + f"✓ Materialized views refreshed successfully in {elapsed_time:.2f} seconds" + ) + except Exception as e: + db.session.rollback() + click.echo(f"✗ Error refreshing materialized views: {e}") + + app.cli.add_command(fm_db_ops) diff --git a/flexmeasures/data/models/generic_assets.py b/flexmeasures/data/models/generic_assets.py index 4aae30d47f..564dbc312c 100644 --- a/flexmeasures/data/models/generic_assets.py +++ b/flexmeasures/data/models/generic_assets.py @@ -7,7 +7,7 @@ from flask import current_app from flask_security import current_user import pandas as pd -from sqlalchemy import select +from sqlalchemy import select, Table from sqlalchemy.engine import Row from sqlalchemy.ext.hybrid import hybrid_method from sqlalchemy.sql.expression import func, text @@ -647,6 +647,8 @@ def search_beliefs( most_recent_events_only: bool = False, as_json: bool = False, resolution: timedelta | None = None, + use_materialized_view: bool = True, + timed_belief_min_v: Table | None = None, ) -> BeliefsDataFrame | str: """Search all beliefs about events for all sensors of this asset @@ -686,6 +688,8 @@ def search_beliefs( most_recent_events_only=most_recent_events_only, one_deterministic_belief_per_event_per_source=True, resolution=resolution, + use_materialized_view=use_materialized_view, + timed_belief_min_v=timed_belief_min_v, ) if as_json: from flexmeasures.data.services.time_series import simplify_index diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index 803a541053..2b068c57c4 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -8,7 +8,7 @@ from flask import current_app import pandas as pd -from sqlalchemy import select +from sqlalchemy import select, Table from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.schema import UniqueConstraint @@ -354,6 +354,8 @@ def search_beliefs( one_deterministic_belief_per_event_per_source: bool = False, as_json: bool = False, resolution: str | timedelta | None = None, + use_materialized_view: bool = True, + timed_belief_min_v: Table | None = None, ) -> tb.BeliefsDataFrame | str: """Search all beliefs about events for this sensor. @@ -398,6 +400,8 @@ def search_beliefs( one_deterministic_belief_per_event=one_deterministic_belief_per_event, one_deterministic_belief_per_event_per_source=one_deterministic_belief_per_event_per_source, resolution=resolution, + use_materialized_view=use_materialized_view, + timed_belief_min_v=timed_belief_min_v, ) if as_json: df = bdf.reset_index() @@ -715,6 +719,8 @@ def search( one_deterministic_belief_per_event_per_source: bool = False, resolution: str | timedelta = None, sum_multiple: bool = True, + use_materialized_view: bool = True, + timed_belief_min_v: Table | None = None, ) -> tb.BeliefsDataFrame | dict[str, tb.BeliefsDataFrame]: """Search all beliefs about events for the given sensors. @@ -798,6 +804,8 @@ def search( **most_recent_filters, custom_filter_criteria=source_criteria, custom_join_targets=custom_join_targets, + use_materialized_view=use_materialized_view, + timed_belief_min_v=timed_belief_min_v, ) if use_latest_version_per_event: bdf = keep_latest_version( diff --git a/flexmeasures/data/schemas/tests/test_input_schema.py b/flexmeasures/data/schemas/tests/test_input_schema.py index 37fd6daf10..325c395332 100644 --- a/flexmeasures/data/schemas/tests/test_input_schema.py +++ b/flexmeasures/data/schemas/tests/test_input_schema.py @@ -18,6 +18,8 @@ def test_input_schema(): # These arguments are not mapped to a field at all (state a reason) excluded_arg_names = [ "as_json", # used in Sensor.search_beliefs but not in TimedBelief.search + "timed_belief_min_v", # used in Sensor.search_beliefs but not in TimedBelief.search + "use_materialized_view", # used in Sensor.search_beliefs but not in ] arg_names_without_associated_fields = [ diff --git a/flexmeasures/utils/validation_utils.py b/flexmeasures/utils/validation_utils.py index 50935ed544..183d967feb 100644 --- a/flexmeasures/utils/validation_utils.py +++ b/flexmeasures/utils/validation_utils.py @@ -1,4 +1,6 @@ import re +from sqlalchemy import MetaData, Table, Column, Integer, DateTime, Interval +from sqlalchemy.sql import text def validate_color_hex(value): @@ -51,3 +53,36 @@ def validate_url(value): ) return value + + +def validate_timed_belief_min_v(session) -> Table | None: + """Define the structure of the timed_belief_min_v materialized view if it exists.""" + # Check if materialized view exists + result = session.execute( + text( + """ + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_name = 'timed_belief_min_v' + AND table_schema = 'public' + ); + """ + ) + ) + + exists = result.scalar() + if not exists: + return None + print("Using timed_belief_min_v materialized view for optimized queries.") + + # Only create the table definition if it exists + metadata = MetaData() + timed_belief_min_v = Table( + "timed_belief_min_v", + metadata, + Column("sensor_id", Integer), + Column("event_start", DateTime), + Column("source_id", Integer), + Column("most_recent_belief_horizon", Interval), + ) + return timed_belief_min_v From ce19cb012bd0a3e08969016e989aab74f118c7ec Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Fri, 22 Aug 2025 20:08:26 +0500 Subject: [PATCH 03/18] Added refresh interval, Fixed some bugs. --- flexmeasures/api/dev/sensors.py | 4 +- flexmeasures/api/v3_0/assets.py | 4 +- flexmeasures/ui/templates/base.html | 96 +++++++++++++++++++++++++- flexmeasures/ui/views/assets/views.py | 4 ++ flexmeasures/utils/config_defaults.py | 1 + flexmeasures/utils/validation_utils.py | 22 +----- 6 files changed, 105 insertions(+), 26 deletions(-) diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index 9a5dbadfc9..ec54f821f3 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -21,7 +21,7 @@ from flexmeasures.data.services.annotations import prepare_annotations_for_chart from flexmeasures.ui.utils.view_utils import set_session_variables from flexmeasures.utils.validation_utils import ( - validate_timed_belief_min_v, + get_timed_belief_min_v, ) @@ -114,7 +114,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "resolution" (see :ref:`resolutions`) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) """ - kwargs["timed_belief_min_v"] = validate_timed_belief_min_v(db.session) + kwargs["timed_belief_min_v"] = get_timed_belief_min_v(db.session) return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index 4b123e298a..b90a79bb0b 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -48,7 +48,7 @@ flatten_unique, ) from flexmeasures.utils.validation_utils import ( - validate_timed_belief_min_v, + get_timed_belief_min_v, ) from flexmeasures.ui.utils.view_utils import clear_session, set_session_variables from flexmeasures.auth.policy import check_access @@ -673,7 +673,7 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): Data for use in charts (in case you have the chart specs already). """ sensors = flatten_unique(asset.validate_sensors_to_show()) - kwargs["timed_belief_min_v"] = validate_timed_belief_min_v(db.session) + kwargs["timed_belief_min_v"] = get_timed_belief_min_v(db.session) return asset.search_beliefs(sensors=sensors, as_json=True, **kwargs) @route("//auditlog") diff --git a/flexmeasures/ui/templates/base.html b/flexmeasures/ui/templates/base.html index 8c07697b81..dc98592321 100644 --- a/flexmeasures/ui/templates/base.html +++ b/flexmeasures/ui/templates/base.html @@ -227,7 +227,13 @@ {% endfor %} + {% if active_subpage == "asset_graph" %}
+ + +
+ {% endif %} +
@@ -893,20 +899,106 @@ * @param {String} queryEndDate The end date as a string in ISO format, to be used in the query. * @return {Promise} A promise that resolves with the data. */ - function fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate) { + function fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate, useMaterializedView=true) { if (previousResult && previousResult.start.getTime() === startDate.getTime() && previousResult.end.getTime() === endDate.getTime()){ return Promise.resolve(previousResult.data); } else { {% if active_subpage == "asset_graph" and has_kpis %} getAssetKPIs(); {% endif %} - return fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, { + return fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&use_materialized_view=' + useMaterializedView, { method: "GET", headers: { "Content-Type": "application/json" }, signal: signal, }).then(response => response.json()); } } + + const useMaterializedViewCheckbox = document.getElementById("useMaterializedView"); + useMaterializedViewCheckbox.addEventListener("change", function() { + toggleMaterializedView(); + }); + + // Toggle materialized view usage for timely beliefs + function toggleMaterializedView() { + // Get the checked status of the checkbox + const isChecked = useMaterializedViewCheckbox.checked; + const pickerStartDate = picker.getStartDate().toJSDate(); + const queryStartDate= encodeURIComponent(toIsoStringWithOffset(pickerStartDate)); + var queryEndDate = picker.getEndDate(); + queryEndDate.setDate(queryEndDate.getDate() + 1); + queryEndDate = encodeURIComponent(toIsoStringWithOffset(queryEndDate.toJSDate())); + // Since we are going to make a call anyway so we'll send these values as null + const startDate = null; + const endDate = null; + previousResult = null; + + $("#spinner").show(); + if (isChecked) { + console.log("Checked.") + // fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate, true); + Promise.all([ + fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate, true), + /** + // Fetch annotations + fetch(dataPath + '/chart_annotations?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, { + method: "GET", + headers: {"Content-Type": "application/json"}, + signal: signal, + }) + .then(function(response) { return response.json(); }), + */ + + // Embed chart + embedAndLoad(chartSpecsPath + 'event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&', elementId, datasetName, previousResult, startDate, endDate), + ]).then(function(result) { + $("#spinner").hide(); + vegaView.change(datasetName, vega.changeset().remove(vega.truthy).insert(result[0])).resize().run(); + previousResult = { + start: startDate, + end: endDate, + data: result[0] + }; + checkSourceMasking(previousResult.data); + playBackDataLoadedForKnownDateRange = false; + /** + vegaView.change(datasetName + '_annotations', vega.changeset().remove(vega.truthy).insert(result[1])).resize().run(); + */ + }).catch(console.error); + } + else { + // fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate, false); + Promise.all([ + fetchGraphDataAndKPIs(previousResult, startDate, endDate, queryStartDate, queryEndDate, false), + /** + // Fetch annotations + fetch(dataPath + '/chart_annotations?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate, { + method: "GET", + headers: {"Content-Type": "application/json"}, + signal: signal, + }) + .then(function(response) { return response.json(); }), + */ + + // Embed chart + embedAndLoad(chartSpecsPath + 'event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&', elementId, datasetName, previousResult, startDate, endDate), + ]).then(function(result) { + $("#spinner").hide(); + vegaView.change(datasetName, vega.changeset().remove(vega.truthy).insert(result[0])).resize().run(); + previousResult = { + start: startDate, + end: endDate, + data: result[0] + }; + checkSourceMasking(previousResult.data); + playBackDataLoadedForKnownDateRange = false; + /** + vegaView.change(datasetName + '_annotations', vega.changeset().remove(vega.truthy).insert(result[1])).resize().run(); + */ + }).catch(console.error); + } + $("#spinner").hide(); + } {% if active_subpage == "asset_graph" and has_kpis %} function getAssetKPIs() { diff --git a/flexmeasures/ui/views/assets/views.py b/flexmeasures/ui/views/assets/views.py index d01cf18501..d513b46057 100644 --- a/flexmeasures/ui/views/assets/views.py +++ b/flexmeasures/ui/views/assets/views.py @@ -363,12 +363,16 @@ def graphs(self, id: str, start_time=None, end_time=None): asset_form = AssetForm() asset_form.with_options() asset_form.process(obj=asset) + mv_refresh_interval = current_app.config.get( + "FLEXMEASURES_MVIEW_UPDATE_INTERVAL", None + ) return render_flexmeasures_template( "assets/asset_graph.html", asset=asset, has_kpis=has_kpis, asset_kpis=asset_kpis, + mv_refresh_interval=mv_refresh_interval, current_page="Graphs", ) diff --git a/flexmeasures/utils/config_defaults.py b/flexmeasures/utils/config_defaults.py index a4afa4a07c..ce323b26e9 100644 --- a/flexmeasures/utils/config_defaults.py +++ b/flexmeasures/utils/config_defaults.py @@ -21,6 +21,7 @@ class Config(object): DEBUG: bool = False LOGGING_LEVEL: int = logging.WARNING SECRET_KEY: str | None = None + FLEXMEASURES_MVIEW_UPDATE_INTERVAL: int | None = None FLEXMEASURES_ENV_DEFAULT = "production" diff --git a/flexmeasures/utils/validation_utils.py b/flexmeasures/utils/validation_utils.py index 183d967feb..5b3aec5eb9 100644 --- a/flexmeasures/utils/validation_utils.py +++ b/flexmeasures/utils/validation_utils.py @@ -1,6 +1,5 @@ import re from sqlalchemy import MetaData, Table, Column, Integer, DateTime, Interval -from sqlalchemy.sql import text def validate_color_hex(value): @@ -55,25 +54,8 @@ def validate_url(value): return value -def validate_timed_belief_min_v(session) -> Table | None: - """Define the structure of the timed_belief_min_v materialized view if it exists.""" - # Check if materialized view exists - result = session.execute( - text( - """ - SELECT EXISTS ( - SELECT FROM information_schema.tables - WHERE table_name = 'timed_belief_min_v' - AND table_schema = 'public' - ); - """ - ) - ) - - exists = result.scalar() - if not exists: - return None - print("Using timed_belief_min_v materialized view for optimized queries.") +def get_timed_belief_min_v(session) -> Table | None: + """Define the structure of the timed_belief_min_v materialized view.""" # Only create the table definition if it exists metadata = MetaData() From fd41966d54877f74b61b9d539f4e677fc70b0e14 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Mon, 25 Aug 2025 19:59:40 +0500 Subject: [PATCH 04/18] Resolved comments. --- documentation/configuration.rst | 11 +++++++++- flexmeasures/api/dev/sensors.py | 2 +- flexmeasures/api/v3_0/assets.py | 2 +- flexmeasures/cli/db_ops.py | 22 +++++++++++++------ .../timed_beliefs_materialized_views.py | 8 +++++++ .../data/schemas/tests/test_input_schema.py | 2 +- flexmeasures/utils/validation_utils.py | 2 +- 7 files changed, 37 insertions(+), 12 deletions(-) diff --git a/documentation/configuration.rst b/documentation/configuration.rst index da8c20c214..9ef69c4481 100644 --- a/documentation/configuration.rst +++ b/documentation/configuration.rst @@ -671,4 +671,13 @@ FLEXMEASURES_API_SUNSET_LINK Allow to override the default sunset link for your clients. -Default: ``None`` (defaults are set internally for each sunset API version, e.g. ``"https://flexmeasures.readthedocs.io/en/v0.13.0/api/v2_0.html"`` for v2.0) \ No newline at end of file +Default: ``None`` (defaults are set internally for each sunset API version, e.g. ``"https://flexmeasures.readthedocs.io/en/v0.13.0/api/v2_0.html"`` for v2.0) + +Perforamance optimizations +---------------------------- + +FLEXMEASURES_MVIEW_UPDATE_INTERVAL +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Interval in minutes to refresh the materialized views in the background. + +Default: ``0`` (minutes) diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index 75171eff44..7a452411a9 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -115,7 +115,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "resolution" (see :ref:`resolutions`) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) """ - kwargs["timed_belief_min_v"] = get_timed_belief_min_v(db.session) + kwargs["timed_belief_min_v"] = get_timed_belief_min_v() return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index ae460053c2..5f693755d8 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -674,7 +674,7 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): Data for use in charts (in case you have the chart specs already). """ sensors = flatten_unique(asset.validate_sensors_to_show()) - kwargs["timed_belief_min_v"] = get_timed_belief_min_v(db.session) + kwargs["timed_belief_min_v"] = get_timed_belief_min_v() return asset.search_beliefs(sensors=sensors, as_json=True, **kwargs) @route("//auditlog") diff --git a/flexmeasures/cli/db_ops.py b/flexmeasures/cli/db_ops.py index 01c04a41cf..8977acb288 100644 --- a/flexmeasures/cli/db_ops.py +++ b/flexmeasures/cli/db_ops.py @@ -100,28 +100,36 @@ def restore(file: str): @with_appcontext @click.option("--concurrent", is_flag=True, default=False) def refresh_materialized_views(concurrent: bool): - """Refresh materialized views for better query performance.""" + """ + Refresh the materialized views for getting the most recent data. + By default, this locks the materialized view for the duration of the refresh. + Use the --concurrent option to avoid locking, at the cost of higher resource usage and + the requirement that a unique index exists on the materialized view. + """ from sqlalchemy import text refresh_type = "CONCURRENTLY" if concurrent else "" import time start_time = time.time() - click.echo( - f"Refreshing materialized views {'CONCURRENTLY' if concurrent else 'without concurrency'}..." + click.secho( + f"Refreshing materialized views {'CONCURRENTLY' if concurrent else 'without concurrency'}...", + **MsgStyle.INFO, ) try: db.session.execute( - text(f"REFRESH MATERIALIZED {refresh_type} VIEW timed_belief_min_v;") + text(f"REFRESH MATERIALIZED VIEW {refresh_type} timed_belief_min_v;") ) db.session.commit() elapsed_time = time.time() - start_time - click.echo( - f"✓ Materialized views refreshed successfully in {elapsed_time:.2f} seconds" + click.secho( + f"✓ Materialized views refreshed successfully in {elapsed_time:.2f} seconds", + **MsgStyle.SUCCESS, ) except Exception as e: db.session.rollback() - click.echo(f"✗ Error refreshing materialized views: {e}") + click.secho(f"✗ Error refreshing materialized views: {e}", **MsgStyle.ERROR) + raise click.Abort() app.cli.add_command(fm_db_ops) diff --git a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py index f4aa64e4d5..3bc5a8657c 100644 --- a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py +++ b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py @@ -58,6 +58,14 @@ def upgrade(): """ ) + # Create a unique index to allow concurrent refreshes + op.execute( + """ + CREATE UNIQUE INDEX idx_timed_belief_min_v_unique + ON timed_belief_min_v(sensor_id, event_start, source_id); + """ + ) + def downgrade(): op.execute("DROP MATERIALIZED VIEW IF EXISTS timed_belief_min_v CASCADE;") diff --git a/flexmeasures/data/schemas/tests/test_input_schema.py b/flexmeasures/data/schemas/tests/test_input_schema.py index 97bcdd6ebb..05df9c1e58 100644 --- a/flexmeasures/data/schemas/tests/test_input_schema.py +++ b/flexmeasures/data/schemas/tests/test_input_schema.py @@ -19,7 +19,7 @@ def test_input_schema(): excluded_arg_names = [ "as_json", # used in Sensor.search_beliefs but not in TimedBelief.search "timed_belief_min_v", # used in Sensor.search_beliefs but not in TimedBelief.search - "use_materialized_view", # used in Sensor.search_beliefs but not in + "use_materialized_view", # used in Sensor.search_beliefs as well as in TimedBelief.search "compress_json", # used in Sensor.search_beliefs but not in TimedBelief.search ] diff --git a/flexmeasures/utils/validation_utils.py b/flexmeasures/utils/validation_utils.py index 5b3aec5eb9..558180e77e 100644 --- a/flexmeasures/utils/validation_utils.py +++ b/flexmeasures/utils/validation_utils.py @@ -54,7 +54,7 @@ def validate_url(value): return value -def get_timed_belief_min_v(session) -> Table | None: +def get_timed_belief_min_v() -> Table | None: """Define the structure of the timed_belief_min_v materialized view.""" # Only create the table definition if it exists From e483d982367fd1283f9c4e8778ee49378200a23b Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Mon, 25 Aug 2025 20:15:16 +0500 Subject: [PATCH 05/18] Tiny refactor. --- flexmeasures/utils/validation_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flexmeasures/utils/validation_utils.py b/flexmeasures/utils/validation_utils.py index 558180e77e..92832e3090 100644 --- a/flexmeasures/utils/validation_utils.py +++ b/flexmeasures/utils/validation_utils.py @@ -54,7 +54,7 @@ def validate_url(value): return value -def get_timed_belief_min_v() -> Table | None: +def get_timed_belief_min_v() -> Table: """Define the structure of the timed_belief_min_v materialized view.""" # Only create the table definition if it exists From 74d66518d3823cabff8de59dacf15d49d5e046ce Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Tue, 2 Sep 2025 14:03:10 +0500 Subject: [PATCH 06/18] Update documentation/configuration.rst Co-authored-by: Felix Claessen <30658763+Flix6x@users.noreply.github.com> Signed-off-by: Muhammad-Moiz626 --- documentation/configuration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/configuration.rst b/documentation/configuration.rst index 9ef69c4481..63b3691b03 100644 --- a/documentation/configuration.rst +++ b/documentation/configuration.rst @@ -673,7 +673,7 @@ Allow to override the default sunset link for your clients. Default: ``None`` (defaults are set internally for each sunset API version, e.g. ``"https://flexmeasures.readthedocs.io/en/v0.13.0/api/v2_0.html"`` for v2.0) -Perforamance optimizations +Performance optimizations ---------------------------- FLEXMEASURES_MVIEW_UPDATE_INTERVAL From c65ef8c08c0465a1e0594180dd0df2b7ddb4b46a Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Tue, 2 Sep 2025 20:36:30 +0500 Subject: [PATCH 07/18] Moved get_timed_belief_min_v and some other small changes. --- documentation/configuration.rst | 6 ++-- flexmeasures/api/dev/sensors.py | 6 ++-- flexmeasures/api/v3_0/assets.py | 6 ++-- flexmeasures/data/config.py | 7 ++++- flexmeasures/data/models/time_series.py | 38 ++++++++++++++++++++++++- flexmeasures/ui/views/assets/views.py | 2 +- flexmeasures/utils/config_defaults.py | 2 +- flexmeasures/utils/validation_utils.py | 17 ----------- 8 files changed, 52 insertions(+), 32 deletions(-) diff --git a/documentation/configuration.rst b/documentation/configuration.rst index 9ef69c4481..902c74ea39 100644 --- a/documentation/configuration.rst +++ b/documentation/configuration.rst @@ -676,8 +676,8 @@ Default: ``None`` (defaults are set internally for each sunset API version, e.g. Perforamance optimizations ---------------------------- -FLEXMEASURES_MVIEW_UPDATE_INTERVAL +FLEXMEASURES_MVIEW_REFRESH_INTERVAL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Interval in minutes to refresh the materialized views in the background. +Interval in minutes to refresh the materialized db view which caches the most recent beliefs at a given point in time (for faster queries). -Default: ``0`` (minutes) +Default: None diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index 7a452411a9..d7a153ba96 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -20,9 +20,7 @@ from flexmeasures.data.models.time_series import Sensor from flexmeasures.data.services.annotations import prepare_annotations_for_chart from flexmeasures.ui.utils.view_utils import set_session_variables -from flexmeasures.utils.validation_utils import ( - get_timed_belief_min_v, -) +from flexmeasures.data.config import timed_belief_min_v class SensorAPI(FlaskView): @@ -115,7 +113,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "resolution" (see :ref:`resolutions`) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) """ - kwargs["timed_belief_min_v"] = get_timed_belief_min_v() + kwargs["timed_belief_min_v"] = timed_belief_min_v return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index 5f693755d8..180661e465 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -47,9 +47,7 @@ from flexmeasures.utils.coding_utils import ( flatten_unique, ) -from flexmeasures.utils.validation_utils import ( - get_timed_belief_min_v, -) +from flexmeasures.data.config import timed_belief_min_v from flexmeasures.ui.utils.view_utils import clear_session, set_session_variables from flexmeasures.auth.policy import check_access from werkzeug.exceptions import Forbidden, Unauthorized @@ -674,7 +672,7 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): Data for use in charts (in case you have the chart specs already). """ sensors = flatten_unique(asset.validate_sensors_to_show()) - kwargs["timed_belief_min_v"] = get_timed_belief_min_v() + kwargs["timed_belief_min_v"] = timed_belief_min_v return asset.search_beliefs(sensors=sensors, as_json=True, **kwargs) @route("//auditlog") diff --git a/flexmeasures/data/config.py b/flexmeasures/data/config.py index f8c98c6c8e..3d3a741613 100644 --- a/flexmeasures/data/config.py +++ b/flexmeasures/data/config.py @@ -16,6 +16,7 @@ ) Base = None # type: ignore session_options = None +timed_belief_min_v = None def init_db(): @@ -32,7 +33,7 @@ def init_db(): def configure_db_for(app: Flask): """Call this to configure the database and the tools we use on it for the Flask app. This should only be called once in the app's lifetime.""" - global db, Base + global db, Base, timed_belief_min_v with app.app_context(): db.init_app(app) @@ -51,6 +52,10 @@ def configure_db_for(app: Flask): forecasting, ) # noqa: F401 + from flexmeasures.data.models.time_series import get_timed_belief_min_v + + timed_belief_min_v = get_timed_belief_min_v(db.session) + # This would create db structure based on models, but you should use `flask db upgrade` for that. # Base.metadata.create_all(bind=db.engine) diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index 736168431b..1b43565144 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -8,7 +8,17 @@ from flask import current_app import pandas as pd -from sqlalchemy import select, Table +from sqlalchemy import ( + select, + Table, + Column, + DateTime, + Integer, + MetaData, + text, + Interval, +) +from sqlalchemy.orm import Session from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.schema import UniqueConstraint @@ -47,6 +57,32 @@ from flexmeasures.utils.geo_utils import parse_lat_lng +def get_timed_belief_min_v(session: Session) -> Table | None: + """Define the structure of the timed_belief_min_v materialized view.""" + + timed_belief_min_v = session.execute( + text( + """ + SELECT * + FROM pg_matviews + WHERE matviewname = 'timed_belief_min_v'; + """ + ) + ).fetchone() + if timed_belief_min_v: + metadata = MetaData() + timed_belief_min_v = Table( + "timed_belief_min_v", + metadata, + Column("sensor_id", Integer), + Column("event_start", DateTime), + Column("source_id", Integer), + Column("most_recent_belief_horizon", Interval), + ) + + return timed_belief_min_v + + class Sensor(db.Model, tb.SensorDBMixin, AuthModelMixin): """A sensor measures events.""" diff --git a/flexmeasures/ui/views/assets/views.py b/flexmeasures/ui/views/assets/views.py index 50bf17d310..62a38421b0 100644 --- a/flexmeasures/ui/views/assets/views.py +++ b/flexmeasures/ui/views/assets/views.py @@ -356,7 +356,7 @@ def graphs(self, id: str, start_time=None, end_time=None): asset_form.with_options() asset_form.process(obj=asset) mv_refresh_interval = current_app.config.get( - "FLEXMEASURES_MVIEW_UPDATE_INTERVAL", None + "FLEXMEASURES_MVIEW_REFRESH_INTERVAL", None ) return render_flexmeasures_template( diff --git a/flexmeasures/utils/config_defaults.py b/flexmeasures/utils/config_defaults.py index ce323b26e9..8df4fb6f5b 100644 --- a/flexmeasures/utils/config_defaults.py +++ b/flexmeasures/utils/config_defaults.py @@ -21,7 +21,7 @@ class Config(object): DEBUG: bool = False LOGGING_LEVEL: int = logging.WARNING SECRET_KEY: str | None = None - FLEXMEASURES_MVIEW_UPDATE_INTERVAL: int | None = None + FLEXMEASURES_MVIEW_REFRESH_INTERVAL: int | None = None FLEXMEASURES_ENV_DEFAULT = "production" diff --git a/flexmeasures/utils/validation_utils.py b/flexmeasures/utils/validation_utils.py index 92832e3090..50935ed544 100644 --- a/flexmeasures/utils/validation_utils.py +++ b/flexmeasures/utils/validation_utils.py @@ -1,5 +1,4 @@ import re -from sqlalchemy import MetaData, Table, Column, Integer, DateTime, Interval def validate_color_hex(value): @@ -52,19 +51,3 @@ def validate_url(value): ) return value - - -def get_timed_belief_min_v() -> Table: - """Define the structure of the timed_belief_min_v materialized view.""" - - # Only create the table definition if it exists - metadata = MetaData() - timed_belief_min_v = Table( - "timed_belief_min_v", - metadata, - Column("sensor_id", Integer), - Column("event_start", DateTime), - Column("source_id", Integer), - Column("most_recent_belief_horizon", Interval), - ) - return timed_belief_min_v From 942380cba6c069ec82719ea9290a3d1273b201ae Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Wed, 3 Sep 2025 20:03:12 +0500 Subject: [PATCH 08/18] Moved get_timed_belief_min_v to timely-beliefs repo. --- flexmeasures/data/config.py | 13 +++++++--- flexmeasures/data/models/time_series.py | 33 ------------------------- 2 files changed, 10 insertions(+), 36 deletions(-) diff --git a/flexmeasures/data/config.py b/flexmeasures/data/config.py index 3d3a741613..414f13f814 100644 --- a/flexmeasures/data/config.py +++ b/flexmeasures/data/config.py @@ -52,9 +52,16 @@ def configure_db_for(app: Flask): forecasting, ) # noqa: F401 - from flexmeasures.data.models.time_series import get_timed_belief_min_v - - timed_belief_min_v = get_timed_belief_min_v(db.session) + import timely_beliefs.utils as tb_utils + + try: + timed_belief_min_v = tb_utils.get_timed_belief_min_v(db.session) + except Exception: + timed_belief_min_v = None + app.logger.warning( + "Could not determine timed_belief_min_v. Do you have timely-beliefs installed and is the latest version?" + " Beliefs will be retrieved from the actual table instead of the materialized view.", + ) # This would create db structure based on models, but you should use `flask db upgrade` for that. # Base.metadata.create_all(bind=db.engine) diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index b42fee7839..49d45919e4 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -11,14 +11,7 @@ from sqlalchemy import ( select, Table, - Column, - DateTime, - Integer, - MetaData, - text, - Interval, ) -from sqlalchemy.orm import Session from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.schema import UniqueConstraint @@ -58,32 +51,6 @@ from flexmeasures.utils.geo_utils import parse_lat_lng -def get_timed_belief_min_v(session: Session) -> Table | None: - """Define the structure of the timed_belief_min_v materialized view.""" - - timed_belief_min_v = session.execute( - text( - """ - SELECT * - FROM pg_matviews - WHERE matviewname = 'timed_belief_min_v'; - """ - ) - ).fetchone() - if timed_belief_min_v: - metadata = MetaData() - timed_belief_min_v = Table( - "timed_belief_min_v", - metadata, - Column("sensor_id", Integer), - Column("event_start", DateTime), - Column("source_id", Integer), - Column("most_recent_belief_horizon", Interval), - ) - - return timed_belief_min_v - - class Sensor(db.Model, tb.SensorDBMixin, AuthModelMixin, OrderByIdMixin): """A sensor measures events.""" From b6ca3d457e4d8763274b60c9214241ab857fbaa1 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Thu, 4 Sep 2025 11:12:55 +0500 Subject: [PATCH 09/18] Updated base.html according to materialized view refresh interval --- flexmeasures/ui/templates/base.html | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/flexmeasures/ui/templates/base.html b/flexmeasures/ui/templates/base.html index f2832b1d9d..1172043039 100644 --- a/flexmeasures/ui/templates/base.html +++ b/flexmeasures/ui/templates/base.html @@ -227,15 +227,23 @@ {% endfor %} - {% if active_subpage == "asset_graph" %} -
- - -
- {% endif %} -
- - +
+ {# Option to refresh data from materialized view if applicable #} + {# Note: the checkbox is checked by default, meaning the materialized view is used (for faster loading) #} + {# Unchecking it will reload the graph with fresh data, which may take more time #} + {# This option is only shown when a materialized view refresh interval is configured #} + {% if active_subpage == "asset_graph" and mv_refresh_interval %} +
+ + +
+ {% endif %} +
+ + +
{% endif %} From e2140a16b1efe80bae51f44abb8f8b066f2cca82 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Thu, 4 Sep 2025 11:29:44 +0500 Subject: [PATCH 10/18] Renamed timed_belief_min_v to most_recent_beliefs_mview --- flexmeasures/api/dev/sensors.py | 4 ++-- flexmeasures/api/v3_0/assets.py | 4 ++-- flexmeasures/cli/db_ops.py | 2 +- flexmeasures/data/config.py | 11 ++++++----- .../versions/timed_beliefs_materialized_views.py | 16 ++++++++-------- flexmeasures/data/models/generic_assets.py | 4 ++-- flexmeasures/data/models/time_series.py | 8 ++++---- .../data/schemas/tests/test_input_schema.py | 2 +- 8 files changed, 26 insertions(+), 25 deletions(-) diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index d7a153ba96..b720273ccb 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -20,7 +20,7 @@ from flexmeasures.data.models.time_series import Sensor from flexmeasures.data.services.annotations import prepare_annotations_for_chart from flexmeasures.ui.utils.view_utils import set_session_variables -from flexmeasures.data.config import timed_belief_min_v +from flexmeasures.data.config import most_recent_beliefs_mview class SensorAPI(FlaskView): @@ -113,7 +113,7 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "resolution" (see :ref:`resolutions`) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) """ - kwargs["timed_belief_min_v"] = timed_belief_min_v + kwargs["most_recent_beliefs_mview"] = most_recent_beliefs_mview return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index c562a77afe..363e33628c 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -48,7 +48,7 @@ from flexmeasures.utils.coding_utils import ( flatten_unique, ) -from flexmeasures.data.config import timed_belief_min_v +from flexmeasures.data.config import most_recent_beliefs_mview from flexmeasures.ui.utils.view_utils import clear_session, set_session_variables from flexmeasures.auth.policy import check_access from werkzeug.exceptions import Forbidden, Unauthorized @@ -710,7 +710,7 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): Data for use in charts (in case you have the chart specs already). """ sensors = flatten_unique(asset.validate_sensors_to_show()) - kwargs["timed_belief_min_v"] = timed_belief_min_v + kwargs["most_recent_beliefs_mview"] = most_recent_beliefs_mview return asset.search_beliefs(sensors=sensors, as_json=True, **kwargs) @route("//auditlog") diff --git a/flexmeasures/cli/db_ops.py b/flexmeasures/cli/db_ops.py index 8977acb288..6bb649eeaa 100644 --- a/flexmeasures/cli/db_ops.py +++ b/flexmeasures/cli/db_ops.py @@ -118,7 +118,7 @@ def refresh_materialized_views(concurrent: bool): ) try: db.session.execute( - text(f"REFRESH MATERIALIZED VIEW {refresh_type} timed_belief_min_v;") + text(f"REFRESH MATERIALIZED VIEW {refresh_type} most_recent_beliefs_mview;") ) db.session.commit() elapsed_time = time.time() - start_time diff --git a/flexmeasures/data/config.py b/flexmeasures/data/config.py index 414f13f814..55a78ed9a7 100644 --- a/flexmeasures/data/config.py +++ b/flexmeasures/data/config.py @@ -16,7 +16,7 @@ ) Base = None # type: ignore session_options = None -timed_belief_min_v = None +most_recent_beliefs_mview = None def init_db(): @@ -33,7 +33,7 @@ def init_db(): def configure_db_for(app: Flask): """Call this to configure the database and the tools we use on it for the Flask app. This should only be called once in the app's lifetime.""" - global db, Base, timed_belief_min_v + global db, Base, most_recent_beliefs_mview with app.app_context(): db.init_app(app) @@ -55,11 +55,12 @@ def configure_db_for(app: Flask): import timely_beliefs.utils as tb_utils try: - timed_belief_min_v = tb_utils.get_timed_belief_min_v(db.session) + most_recent_beliefs_mview = tb_utils.get_most_recent_beliefs_mview( + db.session + ) except Exception: - timed_belief_min_v = None app.logger.warning( - "Could not determine timed_belief_min_v. Do you have timely-beliefs installed and is the latest version?" + "Could not determine most_recent_beliefs_mview. Do you have timely-beliefs installed and is the latest version?" " Beliefs will be retrieved from the actual table instead of the materialized view.", ) diff --git a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py index 3bc5a8657c..d82ed668ff 100644 --- a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py +++ b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py @@ -19,7 +19,7 @@ def upgrade(): # Create the materialized view with proper alias op.execute( """ - CREATE MATERIALIZED VIEW timed_belief_min_v AS + CREATE MATERIALIZED VIEW most_recent_beliefs_mview AS SELECT * FROM ( SELECT @@ -46,26 +46,26 @@ def upgrade(): # Create indexes op.execute( """ - CREATE INDEX idx_timed_belief_min_v_sensor_event - ON timed_belief_min_v(sensor_id, event_start); + CREATE INDEX idx_most_recent_beliefs_mview_sensor_event + ON most_recent_beliefs_mview(sensor_id, event_start); """ ) op.execute( """ - CREATE INDEX idx_timed_belief_min_v_event_start - ON timed_belief_min_v(event_start); + CREATE INDEX idx_most_recent_beliefs_mview_event_start + ON most_recent_beliefs_mview(event_start); """ ) # Create a unique index to allow concurrent refreshes op.execute( """ - CREATE UNIQUE INDEX idx_timed_belief_min_v_unique - ON timed_belief_min_v(sensor_id, event_start, source_id); + CREATE UNIQUE INDEX idx_most_recent_beliefs_mview_unique + ON most_recent_beliefs_mview(sensor_id, event_start, source_id); """ ) def downgrade(): - op.execute("DROP MATERIALIZED VIEW IF EXISTS timed_belief_min_v CASCADE;") + op.execute("DROP MATERIALIZED VIEW IF EXISTS most_recent_beliefs_mview CASCADE;") diff --git a/flexmeasures/data/models/generic_assets.py b/flexmeasures/data/models/generic_assets.py index 78666aee3b..1178ebce9d 100644 --- a/flexmeasures/data/models/generic_assets.py +++ b/flexmeasures/data/models/generic_assets.py @@ -649,7 +649,7 @@ def search_beliefs( # noqa C901 compress_json: bool = False, resolution: timedelta | None = None, use_materialized_view: bool = True, - timed_belief_min_v: Table | None = None, + most_recent_beliefs_mview: Table | None = None, ) -> BeliefsDataFrame | str: """Search all beliefs about events for all sensors of this asset @@ -691,7 +691,7 @@ def search_beliefs( # noqa C901 one_deterministic_belief_per_event_per_source=True, resolution=resolution, use_materialized_view=use_materialized_view, - timed_belief_min_v=timed_belief_min_v, + most_recent_beliefs_mview=most_recent_beliefs_mview, ) if as_json and not compress_json: from flexmeasures.data.services.time_series import simplify_index diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index 49d45919e4..34b8f6718e 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -360,7 +360,7 @@ def search_beliefs( # noqa: C901 compress_json: bool = False, resolution: str | timedelta | None = None, use_materialized_view: bool = True, - timed_belief_min_v: Table | None = None, + most_recent_beliefs_mview: Table | None = None, ) -> tb.BeliefsDataFrame | str: """Search all beliefs about events for this sensor. @@ -407,7 +407,7 @@ def search_beliefs( # noqa: C901 one_deterministic_belief_per_event_per_source=one_deterministic_belief_per_event_per_source, resolution=resolution, use_materialized_view=use_materialized_view, - timed_belief_min_v=timed_belief_min_v, + most_recent_beliefs_mview=most_recent_beliefs_mview, ) if as_json and not compress_json: df = bdf.reset_index() @@ -812,7 +812,7 @@ def search( resolution: str | timedelta = None, sum_multiple: bool = True, use_materialized_view: bool = True, - timed_belief_min_v: Table | None = None, + most_recent_beliefs_mview: Table | None = None, ) -> tb.BeliefsDataFrame | dict[str, tb.BeliefsDataFrame]: """Search all beliefs about events for the given sensors. @@ -897,7 +897,7 @@ def search( custom_filter_criteria=source_criteria, custom_join_targets=custom_join_targets, use_materialized_view=use_materialized_view, - timed_belief_min_v=timed_belief_min_v, + most_recent_beliefs_mview=most_recent_beliefs_mview, ) if use_latest_version_per_event: bdf = keep_latest_version( diff --git a/flexmeasures/data/schemas/tests/test_input_schema.py b/flexmeasures/data/schemas/tests/test_input_schema.py index 05df9c1e58..91e7d847f8 100644 --- a/flexmeasures/data/schemas/tests/test_input_schema.py +++ b/flexmeasures/data/schemas/tests/test_input_schema.py @@ -18,7 +18,7 @@ def test_input_schema(): # These arguments are not mapped to a field at all (state a reason) excluded_arg_names = [ "as_json", # used in Sensor.search_beliefs but not in TimedBelief.search - "timed_belief_min_v", # used in Sensor.search_beliefs but not in TimedBelief.search + "most_recent_beliefs_mview", # used in Sensor.search_beliefs but not in TimedBelief.search "use_materialized_view", # used in Sensor.search_beliefs as well as in TimedBelief.search "compress_json", # used in Sensor.search_beliefs but not in TimedBelief.search ] From fa522faba3f43804039aaf47fb2845a0189451a0 Mon Sep 17 00:00:00 2001 From: Muhammad-Moiz626 Date: Thu, 4 Sep 2025 11:48:28 +0500 Subject: [PATCH 11/18] Added changelog. --- documentation/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/changelog.rst b/documentation/changelog.rst index 78293e1f38..e296371a40 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -15,6 +15,7 @@ New features * Display KPIs for asset sensors with daily event resolution [see `PR #1608 `_, `PR #1634 `_ and `PR #1656 `_] * Improved timestamp on sensor detail page to be more friendly [see `PR #1632 `_] * Asset types support: new API endpoint (`GET /assets/types`), better docs and fix CLI command `flexmeasures show asset-types` [see `PR #1663 `_] +* Added Materialized View for latest beliefs per sensor to speed up data loading [see `PR #1671 `_] Infrastructure / Support ---------------------- From aabd536a87f3488600adad996eaed7302749fb06 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 15 Dec 2025 17:01:45 +0100 Subject: [PATCH 12/18] chore: db merge Signed-off-by: F.N. Claessen --- .../migrations/versions/75a82be1c1d6_merge.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py diff --git a/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py b/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py new file mode 100644 index 0000000000..371a8ea660 --- /dev/null +++ b/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py @@ -0,0 +1,21 @@ +"""merge + +Revision ID: 75a82be1c1d6 +Revises: 6cca6c002135, c98798csds8c +Create Date: 2025-12-15 16:53:05.313298 + +""" + +# revision identifiers, used by Alembic. +revision = "75a82be1c1d6" +down_revision = ["6cca6c002135", "c98798csds8c"] +branch_labels = None +depends_on = None + + +def upgrade(): + pass + + +def downgrade(): + pass From a456cb800c3c9295006f16af85216bcdedc461a4 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Sun, 5 Jul 2026 22:16:47 +0200 Subject: [PATCH 13/18] fix: revert accidental regressions in base.html and openapi-specs.json base.html gained ~950 lines of stale template blocks (copies of JS that lives in includes/graphs.html) and openapi-specs.json had its version reverted. Restore both to main; the materialized-view UI toggle will be re-added on top of the real chart-loading code in includes/graphs.html. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Qprz6PKnXkVE1TJ8d7PYe9 --- flexmeasures/ui/static/openapi-specs.json | 39 +- flexmeasures/ui/templates/base.html | 946 ---------------------- 2 files changed, 28 insertions(+), 957 deletions(-) diff --git a/flexmeasures/ui/static/openapi-specs.json b/flexmeasures/ui/static/openapi-specs.json index 4a40b40120..599e06d878 100644 --- a/flexmeasures/ui/static/openapi-specs.json +++ b/flexmeasures/ui/static/openapi-specs.json @@ -7,7 +7,7 @@ }, "termsOfService": null, "title": "FlexMeasures", - "version": "0.31.0" + "version": "1.0.0" }, "externalDocs": { "description": "FlexMeasures runs on the open source FlexMeasures technology. Read the docs here.", @@ -1010,7 +1010,7 @@ "/api/v3_0/sensors": { "get": { "summary": "Get list of sensors", - "description": "This endpoint returns all accessible sensors.\nBy default, \"accessible sensors\" means all sensors in the same account as the current user (if they have read permission to the account).\n\nYou can also specify an `account` (an ID parameter), if the user has read access to that account. In this case, all assets under the\nspecified account will be retrieved, and the sensors associated with these assets will be returned.\n\nAlternatively, you can filter by asset hierarchy by providing the `asset` parameter (ID). When this is set, all sensors on the specified\nasset and its sub-assets are retrieved, provided the user has read access to the asset.\n\n> Note: You can't set both account and asset at the same time, you can only have one set. The only exception is if the asset being specified is\n> part of the account that was set, then we allow to see sensors under that asset but then ignore the account (account = None).\n\nFinally, you can use the `include_consultancy_clients` parameter to include sensors from accounts for which the current user account is a consultant.\nThis is only possible if the user has the role of a consultant.\n\nOnly admins can use this endpoint to fetch sensors from a different account (by using the `account_id` query parameter).\n\nThe `filter` parameter allows you to search for sensors by name or account name.\nThe `unit` parameter allows you to filter by unit.\n\nFor the pagination of the sensor list, you can use the `page` and `per_page` query parameters, the `page` parameter is used to trigger\npagination, and the `per_page` parameter is used to specify the number of records per page. The default value for `page` is 1 and for `per_page` is 10.\n", + "description": "This endpoint returns all accessible sensors.\nBy default, \"accessible sensors\" means all sensors in the same account as the current user (if they have read permission to the account).\n\nYou can also specify an `account` (an ID parameter), if the user has read access to that account. In this case, all assets under the\nspecified account will be retrieved, and the sensors associated with these assets will be returned.\n\nAlternatively, you can filter by asset hierarchy by providing the `asset` parameter (ID). When this is set, all sensors on the specified\nasset and its sub-assets are retrieved, provided the user has read access to the asset.\n\n> Note: You can't set both account and asset at the same time, you can only have one set. The only exception is if the asset being specified is\n> part of the account that was set, then we allow to see sensors under that asset but then ignore the account (account = None).\n\nFinally, you can use the `include_consultancy_clients` parameter to include sensors from accounts for which the current user account is a consultant.\nThis is only possible if the user has the role of a consultant.\n\nOnly admins can use this endpoint to fetch sensors from a different account (by using the `account_id` query parameter).\n\nThe `filter` parameter allows you to search for sensors by name, account name, asset name, or sensor ID prefix.\nThe `unit` parameter allows you to filter by unit.\n\nFor the pagination of the sensor list, you can use the `page` and `per_page` query parameters, the `page` parameter is used to trigger\npagination, and the `per_page` parameter is used to specify the number of records per page. The default value for `page` is 1 and for `per_page` is 10.\n", "security": [ { "ApiKeyAuth": [] @@ -1073,6 +1073,7 @@ { "in": "query", "name": "filter", + "description": "Return only sensors where a search term is present in the sensor name, account name, asset name, or is a prefix of the sensor ID.", "schema": { "type": "string" }, @@ -2250,7 +2251,7 @@ }, "patch": { "summary": "Update a user.", - "description": "This endpoint sets data for an existing user.\nIt has to be used by the user themselves, admins, consultant or account-admins (of the same account).\nAny subset of user fields can be sent.\nIf the user is not an (account-)admin, they can only edit a few of their own fields.\nUser roles cannot be updated by everyone - it requires certain access levels (roles, account), with the general rule that you need a higher access level than the role being updated.\n\nThe following fields are not allowed to be updated at all:\n- id\n- account_id\n", + "description": "This endpoint sets data for an existing user.\nIt has to be used by the user themselves, admins, consultant or account-admins (of the same account).\nAny subset of user fields can be sent.\nIf the user is not an (account-)admin, they can only edit a few of their own fields.\nUser role updates require explicit permission for every role being added or removed, generally by a user with a higher access level than the role being updated. Unsupported, unknown, or otherwise unresolved roles are denied.\n\nThe following fields are not allowed to be updated at all:\n- id\n- account_id\n", "security": [ { "ApiKeyAuth": [] @@ -2594,7 +2595,7 @@ "/api/v3_0/assets/{id}/sensors": { "get": { "summary": "Return all sensors under an asset.", - "description": "This endpoint returns all sensors under an asset.\n\nThe endpoint supports pagination of the sensor list using the `page` and `per_page` query parameters.\n\n- If the `page` parameter is not provided, all sensors are returned, without pagination information. The result will be a list of sensors.\n- If a `page` parameter is provided, the response will be paginated, showing a specific number of sensors per page as defined by `per_page` (default is 10).\nThe response schema for pagination is inspired by https://datatables.net/manual/server-side#Returned-data\n", + "description": "This endpoint returns all sensors under an asset.\n\nThe endpoint supports pagination of the sensor list using the `page` and `per_page` query parameters.\n\n- If the `page` parameter is not provided, all sensors are returned, without pagination information. The result will be a list of sensors.\n- If a `page` parameter is provided, the response will be paginated, showing a specific number of sensors per page as defined by `per_page` (default is 10).\n- If a search 'filter' is provided, the response will return only sensors where a search term is either present in their name or is a prefix of their ID.\nThe response schema for pagination is inspired by https://datatables.net/manual/server-side#Returned-data\n", "security": [ { "ApiKeyAuth": [] @@ -3476,7 +3477,7 @@ "/api/v3_0/assets": { "get": { "summary": "List assets accessible by the user.", - "description": "This endpoint returns all assets that are accessible by the user after applying optional filters.\n\n - The `account_id` query parameter can be used to list assets from any account (if the user is allowed to read them). Per default, the user's account is used.\n - Alternatively, the `all_accessible` query parameter can be used to list assets from all accounts the current_user has read-access to, plus all public assets. Defaults to `false`.\n - The `include_public` query parameter can be used to include public assets in the response. Defaults to `false`.\n - The `root` query parameter can be used to list only descendants of a given root asset (including the root itself).\n - The `depth` query parameter can be used to search only a max number of descendant generations from the root.\n\nThe endpoint supports pagination of the asset list using the `page` and `per_page` query parameters.\n - If the `page` parameter is not provided, all assets are returned, without pagination information. The result will be a list of assets.\n - If a `page` parameter is provided, the response will be paginated, showing a specific number of assets per page as defined by `per_page` (default is 10).\n - If a search 'filter' such as 'solar \"ACME corp\"' is provided, the response will filter out assets where each search term is either present in their name or account name.\n The response schema for pagination is inspired by [DataTables](https://datatables.net/manual/server-side#Returned-data)\n\nPer default, the response only includes a limited set of asset fields (id, name, account_id, generic_asset_type).\nYou can use the `fields` query parameter to specify a custom set of fields to include in the response.\n", + "description": "This endpoint returns all assets that are accessible by the user after applying optional filters.\n\n - The `account_id` query parameter can be used to list assets from any account (if the user is allowed to read them). Per default, the user's account is used.\n - Alternatively, the `all_accessible` query parameter can be used to list assets from all accounts the current_user has read-access to, plus all public assets. Defaults to `false`.\n - The `include_public` query parameter can be used to include public assets in the response. Defaults to `false`.\n - The `asset_type` query parameter can be used to filter by generic asset type ID.\n - The `root` query parameter can be used to list only descendants of a given root asset (including the root itself).\n - The `depth` query parameter can be used to search only a max number of descendant generations from the root.\n\nThe endpoint supports pagination of the asset list using the `page` and `per_page` query parameters.\n - If the `page` parameter is not provided, all assets are returned, without pagination information. The result will be a list of assets.\n - If a `page` parameter is provided, the response will be paginated, showing a specific number of assets per page as defined by `per_page` (default is 10).\n - If a search 'filter' such as 'solar \"ACME corp\"' is provided, the response will return only assets where each search term is either present in their name or account name, or is a prefix of their ID.\n The response schema for pagination is inspired by [DataTables](https://datatables.net/manual/server-side#Returned-data)\n\nPer default, the response only includes a limited set of asset fields (id, name, account_id, generic_asset_type).\nYou can use the `fields` query parameter to specify a custom set of fields to include in the response.\n", "security": [ { "ApiKeyAuth": [] @@ -3601,6 +3602,16 @@ "example": false }, "required": false + }, + { + "in": "query", + "name": "asset_type", + "description": "Filter assets by generic asset type ID.", + "schema": { + "type": "integer", + "example": 2 + }, + "required": false } ], "responses": { @@ -4909,6 +4920,11 @@ "default": false, "description": "Whether to include public assets. Ignored if an `account_id` is set. To fetch only public assets, use [/assets/public/](#/Assets/get_api_v3_0_assets_public) instead.", "example": false + }, + "asset_type": { + "type": "integer", + "description": "Filter assets by generic asset type ID.", + "example": 2 } }, "additionalProperties": false @@ -6085,16 +6101,16 @@ "soc-min": { "type": "string", "x-minimum": "0 MWh", - "description": "A constant and non-negotiable lower boundary for all values in the schedule (for storage devices, this defaults to 0).\nIf used, this is regarded as an unsurpassable physical limitation.\nTo set softer boundaries, use the soc-minima flex-model field instead together with the soc-minima-breach-price field in the flex-context.\n", + "description": "A constant and non-negotiable lower boundary for all SoC values in the schedule.\nIf omitted, no lower boundary is applied.\nIf used, this is regarded as an unsurpassable physical limitation.\nTo set softer boundaries, use the soc-minima flex-model field instead together with the soc-minima-breach-price field in the flex-context.\n", "example": "2.5 kWh" }, "soc-max": { "type": "string", - "description": "A constant and non-negotiable upper boundary for all values in the schedule (for storage devices, this defaults to max soc-target, if that is provided).\nIf used, this is regarded as an unsurpassable physical limitation.\nTo set softer boundaries, use the soc-maxima flex-model field instead together with the soc-maxima-breach-price field in the flex-context.\n", + "description": "A constant and non-negotiable upper boundary for all values in the schedule (for storage devices, this defaults to max soc-target, if that is provided).\nIf omitted, no upper boundary is applied.\nIf used, this is regarded as an unsurpassable physical limitation.\nTo set softer boundaries, use the soc-maxima flex-model field instead together with the soc-maxima-breach-price field in the flex-context.\n", "example": "7 kWh" }, "power-capacity": { - "description": "Device-level power constraint. How much power can be applied to this asset.", + "description": "Symmetric device-level power constraint. How much power can be applied to this asset in either direction.\nIf omitted, the scheduler infers this limit from the greatest of consumption-capacity and production-capacity when either is configured, before falling back to site-power-capacity.\nWhen exactly one of consumption-capacity or production-capacity is configured to non-zero capacity, the missing opposite capacity defaults to zero.", "example": "50 kVA", "$ref": "#/components/schemas/VariableQuantityOpenAPI" }, @@ -6254,14 +6270,16 @@ "example": "PT2H", "format": "duration" }, - "flex_model": { + "flex-model": { "type": "array", + "default": [], + "description": "Flex-model per device (identified by `sensor`). The flex-model may (partly) also be defined on the asset, and sending it here overrides those settings for the schedule at hand. The flex-model validation is handled by the scheduler. What follows is the schema used by the `StorageScheduler`.", "items": { - "description": "Flex-model per device (identified by `sensor`). The flex-model validation is handled by the scheduler. What follows is the schema used by the `StorageScheduler`.", "$ref": "#/components/schemas/StorageFlexModelSchemaOpenAPI" } }, "flex-context": { + "default": {}, "description": "The flex-context is validated according to the scheduler's `FlexContextSchema`.", "$ref": "#/components/schemas/FlexContextOpenAPISchema" }, @@ -6276,7 +6294,6 @@ } }, "required": [ - "flex-context", "start" ], "additionalProperties": false diff --git a/flexmeasures/ui/templates/base.html b/flexmeasures/ui/templates/base.html index 692945fd97..4cbddafa9d 100644 --- a/flexmeasures/ui/templates/base.html +++ b/flexmeasures/ui/templates/base.html @@ -145,18 +145,6 @@
- {# Option to refresh data from materialized view if applicable #} - {# Note: the checkbox is checked by default, meaning the materialized view is used (for faster loading) #} - {# Unchecking it will reload the graph with fresh data, which may take more time #} - {# This option is only shown when a materialized view refresh interval is configured #} - {% if active_subpage == "asset_graph" and mv_refresh_interval %} -
- - -
- {% endif %}
@@ -174,940 +162,6 @@ {% endif %} {% endblock %} - - - {% block forecastpicker %} - -
/8520k-+. - -
-
-
-
- - - - - -
-
- -
-
-
-
- - {% endblock forecastpicker %} - - {% block leftsidepanel %} - - - - {% endblock leftsidepanel %} - - {% block sensorChartSetup %} - - - - - - {% endblock sensorChartSetup %} - - {% block attributions %} - - {% endblock attributions %} - {% endblock divs %} {% include 'includes/toasts.html' %} From 7e359dd68f7dbf6cdc335839d76a1289641a2918 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 6 Jul 2026 09:57:32 +0200 Subject: [PATCH 14/18] feat: rework materialized view integration around tb ownership and a recorded refresh time - migration: frozen SQL from timely-beliefs' DDL generators (simplified view query, no CASCADE on downgrade), repointed onto main's migration head (drops the stale merge migration) - CLI: refresh-materialized-views records its run in latest_task_run via @task_with_status_report, supports --concurrent (autocommit connection), aborts with an error exit code on failure; monitorable with 'flexmeasures monitor latest-run' - config: replace FLEXMEASURES_MVIEW_REFRESH_INTERVAL with FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL (the refresh cadence now lives solely in how hosts schedule the CLI command; the recorded refresh time is the single source of truth) - queries: TimedBelief.search decides centrally whether to trust the view (it must exist at startup and have a recent enough recorded refresh) and passes a cutoff so events recorded since the last refresh are looked up in the beliefs table (live tail); new include_live_tail param threaded through Sensor/GenericAsset.search_beliefs and the chart data API endpoints - UI: 'Include latest data' toggle on asset graphs (shown only when the view is in use and the live tail is not already always included), wired to the real chart-loading code in includes/graphs.html; tooltip shows the actual last refresh time - docs: configuration.rst setting description, hosting docs section with cron example, changelog entry - tests: CLI refresh success/failure recording, mview/live search equivalence Note: requires the timely-beliefs release containing SeitaBV/timely-beliefs#204 (materialized_views module); the dependency pin should be bumped once that is released. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01Qprz6PKnXkVE1TJ8d7PYe9 --- documentation/changelog.rst | 2 +- documentation/configuration.rst | 23 ++++- documentation/host/data.rst | 29 ++++++ flexmeasures/api/dev/sensors.py | 5 +- flexmeasures/api/v3_0/assets.py | 3 +- flexmeasures/cli/db_ops.py | 69 ++++++++----- flexmeasures/cli/tests/test_db_ops.py | 96 +++++++++++++++++++ flexmeasures/data/config.py | 13 +-- .../migrations/versions/75a82be1c1d6_merge.py | 21 ---- .../timed_beliefs_materialized_views.py | 46 ++++----- flexmeasures/data/models/generic_assets.py | 6 +- flexmeasures/data/models/time_series.py | 45 +++++++-- .../data/schemas/tests/test_input_schema.py | 4 +- .../data/services/materialized_views.py | 47 +++++++++ flexmeasures/ui/templates/base.html | 9 ++ .../ui/templates/includes/graphs.html | 22 ++++- flexmeasures/ui/views/assets/views.py | 24 ++++- flexmeasures/utils/config_defaults.py | 3 +- 18 files changed, 360 insertions(+), 107 deletions(-) create mode 100644 flexmeasures/cli/tests/test_db_ops.py delete mode 100644 flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py create mode 100644 flexmeasures/data/services/materialized_views.py diff --git a/documentation/changelog.rst b/documentation/changelog.rst index 5de9b970f1..ac28685ca7 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -20,7 +20,7 @@ New features Infrastructure / Support ---------------------- -* Added Materialized View for latest beliefs per sensor to speed up data loading [see `PR #1671 `_] +* Speed up queries for the most recent beliefs with a materialized view, kept fresh by scheduling the new ``flexmeasures db-ops refresh-materialized-views`` command; also introduces the ``FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL`` setting and the ``include_live_tail`` chart data API parameter [see `PR #1671 `_] * Upgraded dependencies [see `PR #1485 `_, `PR #2215 `_ and `PR #2243 `_] * Prepare the ``device_scheduler`` to deal with commitments per device group [see `PR #1934 `_] * Support storing encrypted connection secrets on organisations and assets, including utility functions, encryption key configuration, CLI commands to set and delete secrets, and UI tables that show stored secret names and optional expiration times without exposing their values [see `PR #2236 `_] diff --git a/documentation/configuration.rst b/documentation/configuration.rst index 6b6bf2833a..cf667d22e8 100644 --- a/documentation/configuration.rst +++ b/documentation/configuration.rst @@ -812,11 +812,26 @@ Default: ``None`` (defaults are set internally for each sunset API version, e.g. Performance optimizations ---------------------------- -FLEXMEASURES_MVIEW_REFRESH_INTERVAL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Interval in minutes to refresh the materialized db view which caches the most recent beliefs at a given point in time (for faster queries). +.. _mview-live-tail-config: + +FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +FlexMeasures can serve queries for the most recent beliefs from a materialized database view, +which is considerably faster than computing them from the beliefs table (see :ref:`mview-data`). +The view only knows about beliefs recorded before its last refresh, though. -Default: None +This setting controls whether such queries also look up events recorded since the last refresh +(the "live tail"), so results are always complete, at some extra query cost. +If set to ``False``, queries are served from the view alone (events recorded since the last +refresh are not shown), and users can request inclusion of the latest data per query, +via a toggle on the asset graphs page or the ``include_live_tail`` API parameter. + +Note that in either case, *revised* beliefs about events recorded before the last refresh +only show up after the next refresh. How stale results can get is bounded by how often you +schedule the ``flexmeasures db-ops refresh-materialized-views`` command (see :ref:`mview-data`). + +Default: ``True`` .. _fallback-redirect-config: diff --git a/documentation/host/data.rst b/documentation/host/data.rst index 6e3f3cfd58..e8e1ae2e52 100644 --- a/documentation/host/data.rst +++ b/documentation/host/data.rst @@ -408,6 +408,35 @@ To log out: \q +.. _mview-data: + +Speeding up queries with a materialized view +--------------------------------------------- + +FlexMeasures stores multiple beliefs per event (e.g. subsequent forecasts, as well as measurements, from multiple sources). +The most common query — the most recent belief about each event — therefore requires an expensive aggregation over the beliefs table. +FlexMeasures maintains a materialized view (``most_recent_beliefs_mview``, created by a database migration) that pre-computes this aggregation, +speeding up such queries considerably on large databases. + +The view is used automatically, but only if it is being refreshed regularly. Set up a cron job to refresh it, for example, every 10 minutes: + +.. code-block:: bash + + */10 * * * * flexmeasures db-ops refresh-materialized-views --concurrent + +The ``--concurrent`` option avoids locking reads during the refresh, at the cost of higher resource usage. + +The time of the last successful refresh is recorded in the ``latest_task_run`` table +(so the cron schedule is the only place where you control the cadence), +and can be monitored with ``flexmeasures monitor latest-run --task refresh-materialized-views``. +If the last successful refresh is older than 24 hours, FlexMeasures stops trusting the view and queries fall back to the beliefs table. + +Events recorded since the last refresh are looked up in the beliefs table by default, +so query results are complete (see :ref:`mview-live-tail-config`). +Note that *revised* beliefs about previously recorded events only show up after the next refresh, +so the refresh cadence bounds how stale query results can get. + + Transaction management ----------------------- diff --git a/flexmeasures/api/dev/sensors.py b/flexmeasures/api/dev/sensors.py index e96c97613e..2b5089d1c6 100644 --- a/flexmeasures/api/dev/sensors.py +++ b/flexmeasures/api/dev/sensors.py @@ -20,7 +20,6 @@ from flexmeasures.data.models.time_series import Sensor from flexmeasures.data.services.annotations import prepare_annotations_for_chart from flexmeasures.ui.utils.view_utils import set_session_variables -from flexmeasures.data.config import most_recent_beliefs_mview class SensorAPI(FlaskView): @@ -95,6 +94,7 @@ def get_chart(self, id: int, sensor: Sensor, **kwargs): required=False, load_default=True ), "use_materialized_view": fields.Boolean(required=False, load_default=True), + "include_live_tail": fields.Boolean(required=False, load_default=None), "compress_json": fields.Boolean(required=False), }, location="query", @@ -115,8 +115,9 @@ def get_chart_data(self, id: int, sensor: Sensor, **kwargs): - "beliefs_before" (see the `timely-beliefs documentation `_) - "resolution" (see [docs about describing timing](https://flexmeasures.readthedocs.io/latest/api/notation.html#frequency-and-resolution)) - "most_recent_beliefs_only" (if true, returns the most recent belief for each event; if false, returns each belief for each event; defaults to true) + - "use_materialized_view" (if true, the most recent beliefs may be looked up in a materialized view, if available and recently refreshed; defaults to true) + - "include_live_tail" (whether queries served by the materialized view also look up events recorded since its last refresh; defaults to the FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL setting) """ - kwargs["most_recent_beliefs_mview"] = most_recent_beliefs_mview return sensor.search_beliefs(as_json=True, **kwargs) @route("//chart_annotations", strict_slashes=False) diff --git a/flexmeasures/api/v3_0/assets.py b/flexmeasures/api/v3_0/assets.py index 9c478d26cf..4ba83d5d1b 100644 --- a/flexmeasures/api/v3_0/assets.py +++ b/flexmeasures/api/v3_0/assets.py @@ -70,7 +70,6 @@ request_processed, ) from flexmeasures.api.common.schemas.users import AccountIdField -from flexmeasures.data.config import most_recent_beliefs_mview from flexmeasures.api.common.schemas.assets import default_response_fields from flexmeasures.ui.utils.view_utils import clear_session, set_session_variables from flexmeasures.auth.policy import check_access, user_has_admin_access @@ -962,6 +961,7 @@ def get_chart(self, id: int, asset: GenericAsset, **kwargs): ), "most_recent_beliefs_only": fields.Boolean(required=False), "use_materialized_view": fields.Boolean(required=False, load_default=True), + "include_live_tail": fields.Boolean(required=False, load_default=None), "compress_json": fields.Boolean(required=False), }, location="query", @@ -1003,7 +1003,6 @@ def get_chart_data(self, id: int, asset: GenericAsset, **kwargs): - Assets """ sensors = SensorsToShowSchema.flatten(asset.validate_sensors_to_show()) - kwargs["most_recent_beliefs_mview"] = most_recent_beliefs_mview return asset.chart_data_json(sensors=sensors, **kwargs) @route("//auditlog") diff --git a/flexmeasures/cli/db_ops.py b/flexmeasures/cli/db_ops.py index 6bb649eeaa..c02a9db1ab 100644 --- a/flexmeasures/cli/db_ops.py +++ b/flexmeasures/cli/db_ops.py @@ -98,38 +98,63 @@ def restore(file: str): @fm_db_ops.command("refresh-materialized-views") @with_appcontext -@click.option("--concurrent", is_flag=True, default=False) +@click.option( + "--concurrent", + is_flag=True, + default=False, + help="Refresh without locking reads on the materialized view, at the cost of higher resource usage." + " Requires the unique index created by the corresponding migration.", +) def refresh_materialized_views(concurrent: bool): """ - Refresh the materialized views for getting the most recent data. + Refresh the materialized view that caches the most recent beliefs (for faster queries). + By default, this locks the materialized view for the duration of the refresh. - Use the --concurrent option to avoid locking, at the cost of higher resource usage and - the requirement that a unique index exists on the materialized view. - """ - from sqlalchemy import text + Use the --concurrent option to avoid locking reads, at the cost of higher resource usage + (this requires the unique index that the corresponding migration created). - refresh_type = "CONCURRENTLY" if concurrent else "" + Run this periodically (e.g. from a cron job) to bound how stale the cached data can get. + The time of the last successful run is recorded in the latest_task_run table, which serves + as the queries' cutoff between trusting the view and reading recent events from the beliefs + table, and can be monitored with ``flexmeasures monitor latest-run``. + """ import time + from sqlalchemy import text + from timely_beliefs.beliefs.materialized_views import refresh_mview_ddl + + from flexmeasures.data.transactional import task_with_status_report + from flexmeasures.data.models.task_runs import LatestTaskRun + from flexmeasures.data.services.materialized_views import MVIEW_REFRESH_TASK_NAME + + @task_with_status_report(MVIEW_REFRESH_TASK_NAME) + def _refresh(): + ddl = refresh_mview_ddl(concurrently=concurrent) + if concurrent: + # REFRESH MATERIALIZED VIEW CONCURRENTLY cannot run inside a transaction block + with db.engine.connect().execution_options( + isolation_level="AUTOCOMMIT" + ) as connection: + connection.execute(text(ddl)) + else: + db.session.execute(text(ddl)) + start_time = time.time() click.secho( - f"Refreshing materialized views {'CONCURRENTLY' if concurrent else 'without concurrency'}...", - **MsgStyle.INFO, + f"Refreshing materialized view{' concurrently' if concurrent else ''}...", + **MsgStyle.WARN, ) - try: - db.session.execute( - text(f"REFRESH MATERIALIZED VIEW {refresh_type} most_recent_beliefs_mview;") - ) - db.session.commit() - elapsed_time = time.time() - start_time - click.secho( - f"✓ Materialized views refreshed successfully in {elapsed_time:.2f} seconds", - **MsgStyle.SUCCESS, - ) - except Exception as e: - db.session.rollback() - click.secho(f"✗ Error refreshing materialized views: {e}", **MsgStyle.ERROR) + _refresh() + + # The task decorator recorded success/failure in the db; convey it as an exit status, too + task_run = db.session.get(LatestTaskRun, MVIEW_REFRESH_TASK_NAME) + if task_run is None or not task_run.status: + click.secho("Refreshing the materialized view failed.", **MsgStyle.ERROR) raise click.Abort() + click.secho( + f"Materialized view refreshed in {time.time() - start_time:.2f} seconds.", + **MsgStyle.SUCCESS, + ) app.cli.add_command(fm_db_ops) diff --git a/flexmeasures/cli/tests/test_db_ops.py b/flexmeasures/cli/tests/test_db_ops.py new file mode 100644 index 0000000000..b672fa3b68 --- /dev/null +++ b/flexmeasures/cli/tests/test_db_ops.py @@ -0,0 +1,96 @@ +import pytest +from sqlalchemy import select, text +from timely_beliefs.beliefs.materialized_views import ( + MOST_RECENT_BELIEFS_MVIEW, + create_mview_ddl, + create_mview_indexes_ddl, + drop_mview_ddl, +) + +from flexmeasures.data.models.task_runs import LatestTaskRun +from flexmeasures.data.models.time_series import TimedBelief +from flexmeasures.data.services.materialized_views import MVIEW_REFRESH_TASK_NAME + + +@pytest.fixture(scope="function") +def setup_mview(fresh_db): + """Create the materialized view (as the corresponding migration would) and let the app know it exists.""" + from flexmeasures.data import config as data_config + + fresh_db.session.execute(text(drop_mview_ddl())) + fresh_db.session.execute(text(create_mview_ddl(TimedBelief))) + fresh_db.session.execute(text(create_mview_indexes_ddl())) + + # The app checks for the view at startup, i.e. before this fixture created it + original_mview = data_config.most_recent_beliefs_mview + data_config.most_recent_beliefs_mview = MOST_RECENT_BELIEFS_MVIEW + yield + data_config.most_recent_beliefs_mview = original_mview + # Commit the drop, because the refresh CLI command commits, thereby persisting the view + fresh_db.session.execute(text(drop_mview_ddl())) + fresh_db.session.commit() + + +def test_refresh_materialized_views(app, fresh_db, setup_mview): + """The CLI command should refresh the view and record its run in the latest_task_run table.""" + from flexmeasures.cli.db_ops import refresh_materialized_views + + runner = app.test_cli_runner() + result = runner.invoke(refresh_materialized_views) + assert result.exit_code == 0 + + task_run = fresh_db.session.get(LatestTaskRun, MVIEW_REFRESH_TASK_NAME) + assert task_run is not None + assert task_run.status is True + + +def test_refresh_materialized_views_failure(app, fresh_db): + """Without the view in place, the CLI command should fail and record the failed run.""" + from flexmeasures.cli.db_ops import refresh_materialized_views + + runner = app.test_cli_runner() + result = runner.invoke(refresh_materialized_views) + assert result.exit_code != 0 + + task_run = fresh_db.session.get(LatestTaskRun, MVIEW_REFRESH_TASK_NAME) + assert task_run is not None + assert task_run.status is False + + +def test_search_beliefs_with_mview( + app, fresh_db, setup_mview, setup_beliefs_fresh_db +): + """After a refresh, searching via the materialized view should match searching the beliefs table.""" + from flexmeasures.cli.db_ops import refresh_materialized_views + import pandas as pd + + from flexmeasures.data.models.time_series import Sensor + + # Commit the beliefs before refreshing, so the view can see them + fresh_db.session.commit() + + runner = app.test_cli_runner() + result = runner.invoke(refresh_materialized_views) + assert result.exit_code == 0 + + sensor = fresh_db.session.execute( + select(Sensor).filter_by(name="epex_da") + ).scalar_one() + + bdf_live = sensor.search_beliefs( + most_recent_beliefs_only=True, use_materialized_view=False + ) + assert not bdf_live.empty + + bdf_mview = sensor.search_beliefs( + most_recent_beliefs_only=True, use_materialized_view=True + ) + pd.testing.assert_frame_equal(bdf_mview, bdf_live) + + # Also without the live tail (i.e. from the view alone), because all data was recorded before the refresh + bdf_mview_only = sensor.search_beliefs( + most_recent_beliefs_only=True, + use_materialized_view=True, + include_live_tail=False, + ) + pd.testing.assert_frame_equal(bdf_mview_only, bdf_live) diff --git a/flexmeasures/data/config.py b/flexmeasures/data/config.py index 55a78ed9a7..17a66a9fe9 100644 --- a/flexmeasures/data/config.py +++ b/flexmeasures/data/config.py @@ -52,17 +52,18 @@ def configure_db_for(app: Flask): forecasting, ) # noqa: F401 - import timely_beliefs.utils as tb_utils + from timely_beliefs.beliefs.materialized_views import ( + get_most_recent_beliefs_mview, + ) try: - most_recent_beliefs_mview = tb_utils.get_most_recent_beliefs_mview( - db.session - ) + most_recent_beliefs_mview = get_most_recent_beliefs_mview(db.session) except Exception: app.logger.warning( - "Could not determine most_recent_beliefs_mview. Do you have timely-beliefs installed and is the latest version?" - " Beliefs will be retrieved from the actual table instead of the materialized view.", + "Could not determine whether the most_recent_beliefs_mview materialized view exists." + " Beliefs will be retrieved from the beliefs table instead of the materialized view.", ) + db.session.rollback() # This would create db structure based on models, but you should use `flask db upgrade` for that. # Base.metadata.create_all(bind=db.engine) diff --git a/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py b/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py deleted file mode 100644 index 371a8ea660..0000000000 --- a/flexmeasures/data/migrations/versions/75a82be1c1d6_merge.py +++ /dev/null @@ -1,21 +0,0 @@ -"""merge - -Revision ID: 75a82be1c1d6 -Revises: 6cca6c002135, c98798csds8c -Create Date: 2025-12-15 16:53:05.313298 - -""" - -# revision identifiers, used by Alembic. -revision = "75a82be1c1d6" -down_revision = ["6cca6c002135", "c98798csds8c"] -branch_labels = None -depends_on = None - - -def upgrade(): - pass - - -def downgrade(): - pass diff --git a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py index d82ed668ff..d72d3d1530 100644 --- a/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py +++ b/flexmeasures/data/migrations/versions/timed_beliefs_materialized_views.py @@ -1,7 +1,11 @@ -"""Add materialized view for belief optimization +"""Add materialized view caching the most recent belief per event per source + +The SQL below is frozen output of the DDL generators in timely_beliefs.beliefs.materialized_views +(generated against timely-beliefs' TimedBeliefDBMixin for FlexMeasures' timed_belief table), +so that this migration stays immutable while timely-beliefs owns the canonical view definition. Revision ID: c98798csds8c -Revises: b8f3cda5e023 +Revises: 55d8936a55f9 Create Date: 2025-08-08 04:55:33.722545 """ @@ -10,62 +14,50 @@ # revision identifiers revision = "c98798csds8c" -down_revision = "b8f3cda5e023" +down_revision = "55d8936a55f9" branch_labels = None depends_on = None def upgrade(): - # Create the materialized view with proper alias op.execute( """ CREATE MATERIALIZED VIEW most_recent_beliefs_mview AS - SELECT * - FROM ( - SELECT - timed_belief.sensor_id, - timed_belief.event_start, - timed_belief.source_id, - MIN(timed_belief.belief_horizon) AS most_recent_belief_horizon - FROM timed_belief - INNER JOIN data_source - ON data_source.id = timed_belief.source_id - GROUP BY - timed_belief.sensor_id, - timed_belief.event_start, - timed_belief.source_id - ) AS belief_mins - GROUP BY + SELECT sensor_id, event_start, source_id, - most_recent_belief_horizon; + MIN(belief_horizon) AS most_recent_belief_horizon + FROM timed_belief + GROUP BY + sensor_id, + event_start, + source_id; """ ) - # Create indexes op.execute( """ CREATE INDEX idx_most_recent_beliefs_mview_sensor_event - ON most_recent_beliefs_mview(sensor_id, event_start); + ON most_recent_beliefs_mview (sensor_id, event_start); """ ) op.execute( """ CREATE INDEX idx_most_recent_beliefs_mview_event_start - ON most_recent_beliefs_mview(event_start); + ON most_recent_beliefs_mview (event_start); """ ) - # Create a unique index to allow concurrent refreshes + # A unique index is required to allow concurrent refreshes op.execute( """ CREATE UNIQUE INDEX idx_most_recent_beliefs_mview_unique - ON most_recent_beliefs_mview(sensor_id, event_start, source_id); + ON most_recent_beliefs_mview (sensor_id, event_start, source_id); """ ) def downgrade(): - op.execute("DROP MATERIALIZED VIEW IF EXISTS most_recent_beliefs_mview CASCADE;") + op.execute("DROP MATERIALIZED VIEW IF EXISTS most_recent_beliefs_mview;") diff --git a/flexmeasures/data/models/generic_assets.py b/flexmeasures/data/models/generic_assets.py index 89a5bbff17..765d0fda60 100644 --- a/flexmeasures/data/models/generic_assets.py +++ b/flexmeasures/data/models/generic_assets.py @@ -7,7 +7,7 @@ from flask import current_app from flask_security import current_user import pandas as pd -from sqlalchemy import select, and_, Table +from sqlalchemy import select, and_ from sqlalchemy.ext.hybrid import hybrid_method from sqlalchemy.sql.expression import func from sqlalchemy.ext.mutable import MutableDict, MutableList @@ -1129,7 +1129,7 @@ def search_beliefs( # noqa C901 compress_json: bool = False, resolution: timedelta | None = None, use_materialized_view: bool = True, - most_recent_beliefs_mview: Table | None = None, + include_live_tail: bool | None = None, ) -> BeliefsDataFrame | str: """Search all beliefs about events for all sensors of this asset @@ -1175,7 +1175,7 @@ def search_beliefs( # noqa C901 one_deterministic_belief_per_event_per_source=True, resolution=resolution, use_materialized_view=use_materialized_view, - most_recent_beliefs_mview=most_recent_beliefs_mview, + include_live_tail=include_live_tail, ) if as_json and not compress_json: from flexmeasures.data.services.time_series import simplify_index diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index c20d3a13c8..e1fe163d9a 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -8,11 +8,7 @@ from flask import current_app import pandas as pd -from sqlalchemy import ( - exists, - select, - Table, -) +from sqlalchemy import exists, select from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.mutable import MutableDict from sqlalchemy.schema import UniqueConstraint @@ -412,7 +408,7 @@ def search_beliefs( # noqa: C901 compress_json: bool = False, resolution: str | timedelta | None = None, use_materialized_view: bool = True, - most_recent_beliefs_mview: Table | None = None, + include_live_tail: bool | None = None, ) -> tb.BeliefsDataFrame | str: """Search all beliefs about events for this sensor. @@ -438,6 +434,8 @@ def search_beliefs( # noqa: C901 :param as_json: return beliefs in JSON format (e.g. for use in charts) rather than as BeliefsDataFrame :param compress_json: return beliefs, sensors and sources as separate datasets to be used for lookups :param resolution: optionally set the resolution of data being displayed + :param use_materialized_view: if True (the default), the most recent beliefs may be looked up in a materialized view, if one is available and recently refreshed (see TimedBelief.search) + :param include_live_tail: whether queries served by the materialized view also look up events recorded since its last refresh; defaults to the FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL setting :returns: BeliefsDataFrame or JSON string (if as_json is True) """ bdf = TimedBelief.search( @@ -461,7 +459,7 @@ def search_beliefs( # noqa: C901 one_deterministic_belief_per_event_per_source=one_deterministic_belief_per_event_per_source, resolution=resolution, use_materialized_view=use_materialized_view, - most_recent_beliefs_mview=most_recent_beliefs_mview, + include_live_tail=include_live_tail, ) if as_json and not compress_json: df = bdf.reset_index() @@ -934,7 +932,7 @@ def search( resolution: str | timedelta = None, sum_multiple: bool = True, use_materialized_view: bool = True, - most_recent_beliefs_mview: Table | None = None, + include_live_tail: bool | None = None, ) -> tb.BeliefsDataFrame | dict[str, tb.BeliefsDataFrame]: """Search all beliefs about events for the given sensors. @@ -960,6 +958,10 @@ def search( :param one_deterministic_belief_per_event_per_source: only return a single value per event per source (no probabilistic distribution) :param resolution: Optional timedelta or pandas freqstr used to resample the results ** :param sum_multiple: if True, sum over multiple sensors; otherwise, return a dictionary with sensors as key, each holding a BeliefsDataFrame as its value + :param use_materialized_view: if True (the default), the most recent beliefs may be looked up in a materialized view, + if one is available and recently refreshed (and no belief timing filters are set) + :param include_live_tail: whether queries served by the materialized view also look up events recorded since its last refresh; + defaults to the FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL setting * If user_source_ids is specified, the "user" source type is automatically included (and not excluded). Somewhat redundant, though still allowed, is to set both source_types and exclude_source_types. @@ -1007,6 +1009,30 @@ def search( most_recent_events_only=most_recent_events_only, ) + # Decide whether the most recent beliefs may be looked up in the materialized view, + # which requires the view to exist (checked once at startup) and to have been + # recently refreshed (as recorded in the latest_task_run table). + # Events starting after the cutoff are looked up in the beliefs table instead, + # so they are not missed even if they were recorded after the view's last refresh. + mview_kwargs: dict = dict(use_materialized_view=False) + if use_materialized_view: + from flexmeasures.data import config as data_config + from flexmeasures.data.services.materialized_views import get_mview_cutoff + + mview_cutoff = get_mview_cutoff() + if data_config.most_recent_beliefs_mview is not None and ( + mview_cutoff is not None + ): + if include_live_tail is None: + include_live_tail = current_app.config[ + "FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL" + ] + mview_kwargs = dict( + use_materialized_view=True, + most_recent_beliefs_mview=data_config.most_recent_beliefs_mview, + mview_cutoff=mview_cutoff if include_live_tail else None, + ) + bdf_dict = {} for sensor in sensors: bdf = cls.search_session( @@ -1023,8 +1049,7 @@ def search( **most_recent_filters, custom_filter_criteria=source_criteria, custom_join_targets=custom_join_targets, - use_materialized_view=use_materialized_view, - most_recent_beliefs_mview=most_recent_beliefs_mview, + **mview_kwargs, ) if use_latest_version_per_event: bdf = keep_latest_version( diff --git a/flexmeasures/data/schemas/tests/test_input_schema.py b/flexmeasures/data/schemas/tests/test_input_schema.py index 91e7d847f8..2954791d2d 100644 --- a/flexmeasures/data/schemas/tests/test_input_schema.py +++ b/flexmeasures/data/schemas/tests/test_input_schema.py @@ -18,8 +18,8 @@ def test_input_schema(): # These arguments are not mapped to a field at all (state a reason) excluded_arg_names = [ "as_json", # used in Sensor.search_beliefs but not in TimedBelief.search - "most_recent_beliefs_mview", # used in Sensor.search_beliefs but not in TimedBelief.search - "use_materialized_view", # used in Sensor.search_beliefs as well as in TimedBelief.search + "use_materialized_view", # performance option; not a data filter + "include_live_tail", # performance option; not a data filter "compress_json", # used in Sensor.search_beliefs but not in TimedBelief.search ] diff --git a/flexmeasures/data/services/materialized_views.py b/flexmeasures/data/services/materialized_views.py new file mode 100644 index 0000000000..aa2209105d --- /dev/null +++ b/flexmeasures/data/services/materialized_views.py @@ -0,0 +1,47 @@ +"""Logic for deciding whether (and up to when) the materialized view caching the most +recent beliefs can be trusted, based on when it was last refreshed. + +The `flexmeasures db-ops refresh-materialized-views` CLI command records its last successful +run in the latest_task_run table, making that timestamp the single source of truth on the +view's freshness (hosts control the cadence solely via how they schedule that command). +""" + +from __future__ import annotations + +from datetime import datetime, timedelta, timezone + +from flask import current_app + +from flexmeasures.data import db +from flexmeasures.data.models.task_runs import LatestTaskRun + +MVIEW_REFRESH_TASK_NAME = "refresh-materialized-views" + +# How far before the recorded refresh time to place the cutoff. +# The recorded time marks the refresh's completion, while REFRESH MATERIALIZED VIEW +# takes its snapshot of the beliefs table when it starts, so the margin should +# comfortably exceed the duration of a refresh. +MVIEW_CUTOFF_SAFETY_MARGIN = timedelta(minutes=15) + +# If the last successful refresh is older than this, assume the host's periodic refresh +# is broken and stop trusting the view altogether (queries fall back to the beliefs table). +MAX_MVIEW_AGE = timedelta(hours=24) + + +def get_mview_cutoff() -> datetime | None: + """Return the datetime before which events can be looked up in the materialized view. + + Returns None if the view should not be used at all: no successful refresh has been + recorded (yet), or the last one is older than MAX_MVIEW_AGE. + """ + task_run = db.session.get(LatestTaskRun, MVIEW_REFRESH_TASK_NAME) + if task_run is None or not task_run.status: + return None + if task_run.datetime < datetime.now(timezone.utc) - MAX_MVIEW_AGE: + current_app.logger.warning( + f"The materialized view was last refreshed at {task_run.datetime} (more than {MAX_MVIEW_AGE} ago)." + f" Falling back to querying the beliefs table." + f" Is the '{MVIEW_REFRESH_TASK_NAME}' cron job still running?" + ) + return None + return task_run.datetime - MVIEW_CUTOFF_SAFETY_MARGIN diff --git a/flexmeasures/ui/templates/base.html b/flexmeasures/ui/templates/base.html index 4cbddafa9d..068d21a638 100644 --- a/flexmeasures/ui/templates/base.html +++ b/flexmeasures/ui/templates/base.html @@ -145,6 +145,15 @@
+ {# Option to include the latest data, on top of cached data from the materialized view #} + {# Only shown when the materialized view is in use and the live tail is not already included in every query #} + {% if active_subpage == "asset_graph" and mview_last_refresh %} +
+ + +
+ {% endif %}
diff --git a/flexmeasures/ui/templates/includes/graphs.html b/flexmeasures/ui/templates/includes/graphs.html index cde70a3344..51be068f8c 100644 --- a/flexmeasures/ui/templates/includes/graphs.html +++ b/flexmeasures/ui/templates/includes/graphs.html @@ -761,7 +761,10 @@ {% if active_subpage == "asset_graph" and has_kpis %} getAssetKPIs(startDate, endDate); {% endif %} - return fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&compress_json=true', { + // Ask for the latest data (recorded since the materialized view was last refreshed) when the toggle is on + const liveTailCheckbox = document.getElementById("includeLiveTail"); + const liveTailParam = (liveTailCheckbox && liveTailCheckbox.checked) ? '&include_live_tail=true' : ''; + return fetch(dataPath + '/chart_data?event_starts_after=' + queryStartDate + '&event_ends_before=' + queryEndDate + '&compress_json=true' + liveTailParam, { method: "GET", headers: { "Content-Type": "application/json" }, signal: signal, @@ -771,6 +774,23 @@ } } + // Reload the graph when the user toggles loading the latest data + const includeLiveTailCheckbox = document.getElementById("includeLiveTail"); + if (includeLiveTailCheckbox) { + includeLiveTailCheckbox.addEventListener("change", function() { + previousResult = null; // force refetching + const startDate = storeStartDate; + const endDate = storeEndDate; + $("#spinner").show(); + fetchGraphDataAndKPIs(previousResult, startDate, endDate, startDate.toISOString(), endDate.toISOString()) + .then(function (data) { + $("#spinner").hide(); + vegaView.change(datasetName, vega.changeset().remove(vega.truthy).insert(data)).resize().run(); + previousResult = { start: startDate, end: endDate, data: data }; + }); + }); + } + {% if active_subpage == "asset_graph" and has_kpis %} function getAssetKPIs(startDate, endDate) { const start = encodeURIComponent(toIsoStringWithOffset(startDate)); diff --git a/flexmeasures/ui/views/assets/views.py b/flexmeasures/ui/views/assets/views.py index def0b7ce87..78fd141f89 100644 --- a/flexmeasures/ui/views/assets/views.py +++ b/flexmeasures/ui/views/assets/views.py @@ -25,8 +25,10 @@ from flexmeasures.data.schemas.generic_assets import GenericAssetSchema as AssetSchema from flexmeasures.ui.utils.view_utils import ICON_MAPPING from flexmeasures.data.models.user import Account -from flexmeasures.utils.time_utils import duration_isoformat +from flexmeasures.data.models.task_runs import LatestTaskRun +from flexmeasures.data.services.materialized_views import MVIEW_REFRESH_TASK_NAME from flexmeasures.utils.secrets_utils import get_secret_overview +from flexmeasures.utils.time_utils import duration_isoformat, naturalized_datetime_str from flexmeasures.ui.utils.view_utils import render_flexmeasures_template from flexmeasures.ui.views.assets.forms import NewAssetForm, AssetForm from flexmeasures.ui.views import ( @@ -370,9 +372,21 @@ def graphs(self, id: str, start_time=None, end_time=None): asset_form = AssetForm() asset_form.with_options() asset_form.process(obj=asset) - mv_refresh_interval = current_app.config.get( - "FLEXMEASURES_MVIEW_REFRESH_INTERVAL", None - ) + + # Offer a toggle for including the latest data (recorded since the materialized + # view was last refreshed), unless such data is already included in every query + mview_last_refresh = None + if not current_app.config["FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL"]: + from flexmeasures.data import config as data_config + from flexmeasures.data.services.materialized_views import get_mview_cutoff + + if ( + data_config.most_recent_beliefs_mview is not None + and get_mview_cutoff() is not None + ): + mview_last_refresh = naturalized_datetime_str( + db.session.get(LatestTaskRun, MVIEW_REFRESH_TASK_NAME).datetime + ) site_asset = asset.find_site_asset() @@ -382,7 +396,7 @@ def graphs(self, id: str, start_time=None, end_time=None): site_asset=site_asset, has_kpis=has_kpis, asset_kpis=asset_kpis, - mv_refresh_interval=mv_refresh_interval, + mview_last_refresh=mview_last_refresh, available_units=available_units(), current_page="Graphs", ) diff --git a/flexmeasures/utils/config_defaults.py b/flexmeasures/utils/config_defaults.py index 649516579b..51780d5124 100644 --- a/flexmeasures/utils/config_defaults.py +++ b/flexmeasures/utils/config_defaults.py @@ -29,7 +29,8 @@ class Config(object): DEBUG: bool = False LOGGING_LEVEL: int = logging.WARNING SECRET_KEY: str | None = None - FLEXMEASURES_MVIEW_REFRESH_INTERVAL: int | None = None + # Whether queries served by the materialized view also look up events recorded since its last refresh + FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL: bool = True FLEXMEASURES_ENV_DEFAULT = "production" From 6fee3732c29f4d2e40f71115607186122c44292b Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 6 Jul 2026 10:17:37 +0200 Subject: [PATCH 15/18] style: black Signed-off-by: F.N. Claessen --- flexmeasures/cli/tests/test_db_ops.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/flexmeasures/cli/tests/test_db_ops.py b/flexmeasures/cli/tests/test_db_ops.py index b672fa3b68..40975fb586 100644 --- a/flexmeasures/cli/tests/test_db_ops.py +++ b/flexmeasures/cli/tests/test_db_ops.py @@ -57,9 +57,7 @@ def test_refresh_materialized_views_failure(app, fresh_db): assert task_run.status is False -def test_search_beliefs_with_mview( - app, fresh_db, setup_mview, setup_beliefs_fresh_db -): +def test_search_beliefs_with_mview(app, fresh_db, setup_mview, setup_beliefs_fresh_db): """After a refresh, searching via the materialized view should match searching the beliefs table.""" from flexmeasures.cli.db_ops import refresh_materialized_views import pandas as pd From 5eb7e02538f149f27e0a733f29d94a98d24d8aa6 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 6 Jul 2026 10:21:48 +0200 Subject: [PATCH 16/18] chore(deps): bump timely-beliefs to >=4.0.0 Co-Authored-By: Claude Sonnet 5 --- pyproject.toml | 4 ++-- uv.lock | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 63d917dcf4..8c45ddcea3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,8 +62,8 @@ dependencies = [ # pinned to <6.9 due to a HiGHS deadlock, see https://github.com/FlexMeasures/flexmeasures/issues/1443 "pyomo>=5.6,<6.9", "tabulate>=0.9.0", - # 3.5.5: got rid of BlockManager deprecation warnings - "timely-beliefs[forecast]>=3.5.5", + # 4.0.0: materialized views + "timely-beliefs[forecast]>=4.0.0", "python-dotenv>=1.2.1", # see GH#607 for issue on this pin "sqlalchemy>=2.0", diff --git a/uv.lock b/uv.lock index 9e234afa4d..5357462834 100644 --- a/uv.lock +++ b/uv.lock @@ -4239,7 +4239,7 @@ wheels = [ [[package]] name = "timely-beliefs" -version = "3.5.5" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "importlib-metadata", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, @@ -4256,9 +4256,9 @@ dependencies = [ { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/bb/9369de8f0af17b9063c70073cb63b4d6d32d2ac16105ad1967cce1e393e2/timely_beliefs-3.5.5.tar.gz", hash = "sha256:c165db5e92fb3557296b6dbfb9b526de27729f6bb5b23b1b4d65ea1b407216d5", size = 793855, upload-time = "2026-05-04T15:10:38.682Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/5d/575138165ff06550b32279bb618062e6bbc7340fdc9a75d3bf122f3eea79/timely_beliefs-4.0.0.tar.gz", hash = "sha256:5283e9fbb1cf44bc5aac0ae20f0f674dcab61a88c94abd309c40dd270fd6c74c", size = 798670, upload-time = "2026-07-06T08:15:17.216665Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/76/2032d023b3540f4cbeb3fe0fa45f1c50b036ab30beaeb0bf8257042b0d7c/timely_beliefs-3.5.5-py2.py3-none-any.whl", hash = "sha256:bb09c96ddc10b7ccd4520395acd29df7737ba79ed65ce1c8335cd03d98ba0c31", size = 807541, upload-time = "2026-05-04T15:10:36.885Z" }, + { url = "https://files.pythonhosted.org/packages/05/e0/b88e0321c25d77513fafbc59581829c18747de7822513f8c9ed21343725d/timely_beliefs-4.0.0-py2.py3-none-any.whl", hash = "sha256:92063d9c03eca9fefa2369b570d8b7cc001f332a389110e59bc594224becf495", size = 813681, upload-time = "2026-07-06T08:15:15.265758Z" }, ] [package.optional-dependencies] From 81a0c6f80c8793248316a509d6a3467acfa9fd3a Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 6 Jul 2026 10:21:48 +0200 Subject: [PATCH 17/18] chore(deps): bump timely-beliefs to >=4.0.0 Co-Authored-By: Claude Sonnet 5 --- pyproject.toml | 4 +- uv.lock | 1398 ++++++++++++++++++++++++------------------------ 2 files changed, 701 insertions(+), 701 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 63d917dcf4..8c45ddcea3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,8 +62,8 @@ dependencies = [ # pinned to <6.9 due to a HiGHS deadlock, see https://github.com/FlexMeasures/flexmeasures/issues/1443 "pyomo>=5.6,<6.9", "tabulate>=0.9.0", - # 3.5.5: got rid of BlockManager deprecation warnings - "timely-beliefs[forecast]>=3.5.5", + # 4.0.0: materialized views + "timely-beliefs[forecast]>=4.0.0", "python-dotenv>=1.2.1", # see GH#607 for issue on this pin "sqlalchemy>=2.0", diff --git a/uv.lock b/uv.lock index 9e234afa4d..f4b37b4ab1 100644 --- a/uv.lock +++ b/uv.lock @@ -2,21 +2,21 @@ version = 1 revision = 3 requires-python = ">=3.10, <3.13" resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'win32')", "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'win32')", @@ -45,10 +45,10 @@ name = "alembic" version = "1.18.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mako", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "mako", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/94/13/8b084e0f2efb0275a1d534838844926f798bd766566b1375174e2448cd31/alembic-1.18.4.tar.gz", hash = "sha256:cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc", size = 2056725, upload-time = "2026-02-10T16:00:47.195Z" } wheels = [ @@ -60,11 +60,11 @@ name = "altair" version = "6.2.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "jsonschema", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "narwhals", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "jinja2", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "jsonschema", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "narwhals", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/86/97/9a0dc61efd4f2dee29cb6d8edbbacdb789ce48cbffd98efa2b3ab145b297/altair-6.2.1.tar.gz", hash = "sha256:ca0298fa20b1a4fae22eff8847b95f74912bd90544013ad36af192119883ea64", size = 766468, upload-time = "2026-06-05T16:23:36.57Z" } wheels = [ @@ -85,7 +85,7 @@ name = "apispec" version = "6.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/f1/1f5a9332df3ecd90cc5ab69bc58a4174b8ba2ac1720c4c26b01d20751bf5/apispec-6.10.0.tar.gz", hash = "sha256:0a888555cd4aa5fb7176041be15684154fd8961055e1672e703abf737e8761bf", size = 80631, upload-time = "2026-03-06T21:48:40.916Z" } wheels = [ @@ -94,7 +94,7 @@ wheels = [ [package.optional-dependencies] yaml = [ - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [[package]] @@ -102,10 +102,10 @@ name = "apispec-oneofschema" version = "3.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "apispec", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow-oneofschema", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "apispec", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow-oneofschema", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c5/79/9bc6993ade0a3b841812cd46523ecf244bbb9deacb14d29d04eff541a2c7/apispec_oneofschema-3.0.2.tar.gz", hash = "sha256:03fad9b6d88f0e61669700d2e544e1410064d3cc267dc5d1d174b26f69bd05b7", size = 3677, upload-time = "2025-07-28T06:11:24.009Z" } wheels = [ @@ -117,7 +117,7 @@ name = "apispec-webframeworks" version = "1.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "apispec", extra = ["yaml"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "apispec", extra = ["yaml"], marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f9/1f/8d98328269a2507b6cfe37e8a70725d168626615865dc7aec30e8720c495/apispec_webframeworks-1.2.0.tar.gz", hash = "sha256:5689288c266a2713c2f516eacc14ea2fec9b21f193edc8f659c770342b97fd81", size = 10837, upload-time = "2024-09-16T19:01:18.051Z" } wheels = [ @@ -129,7 +129,7 @@ name = "argon2-cffi" version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "argon2-cffi-bindings", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "argon2-cffi-bindings", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706, upload-time = "2025-06-03T06:55:32.073Z" } wheels = [ @@ -141,7 +141,7 @@ name = "argon2-cffi-bindings" version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cffi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } wheels = [ @@ -167,8 +167,8 @@ name = "arrow" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tzdata", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tzdata", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/33/032cdc44182491aa708d06a68b62434140d8c50820a087fac7af37703357/arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7", size = 152931, upload-time = "2025-10-18T17:46:46.761Z" } wheels = [ @@ -275,13 +275,13 @@ name = "black" version = "24.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "mypy-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pathspec", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "platformdirs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "mypy-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pathspec", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "platformdirs", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/b0/46fb0d4e00372f4a86a6f8efa3cb193c9f64863615e39010b1477e010578/black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f", size = 644810, upload-time = "2024-08-02T17:43:18.405Z" } wheels = [ @@ -353,7 +353,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "(implementation_name != 'PyPy' and sys_platform == 'darwin') or (implementation_name != 'PyPy' and sys_platform == 'linux') or (implementation_name != 'PyPy' and sys_platform == 'win32')" }, + { name = "pycparser", marker = "(implementation_name != 'PyPy' and os_name != 'nt' and sys_platform == 'darwin') or (implementation_name != 'PyPy' and os_name != 'nt' and sys_platform == 'linux') or (implementation_name != 'PyPy' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ @@ -470,7 +470,7 @@ name = "click-default-group" version = "1.2.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1d/ce/edb087fb53de63dad3b36408ca30368f438738098e668b78c87f93cd41df/click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e", size = 3505, upload-time = "2023-08-04T07:54:58.425Z" } wheels = [ @@ -500,15 +500,15 @@ name = "contourpy" version = "1.3.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] 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 = [ @@ -555,14 +555,14 @@ name = "contourpy" version = "1.3.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -573,7 +573,7 @@ resolution-markers = [ "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] 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 = [ @@ -611,7 +611,7 @@ name = "convertdate" version = "2.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pymeeus", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pymeeus", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3a/8d/540bf9cdbcd59352ecf7a1925197881465a6c24fd6171765dc11bbeed19e/convertdate-2.4.1.tar.gz", hash = "sha256:ace904a9d0230742732471748160b99d6ae881c2d0dc9a2463c7a37340c56c91", size = 52505, upload-time = "2026-02-08T00:37:53.812Z" } wheels = [ @@ -673,7 +673,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "(python_full_version <= '3.11' and sys_platform == 'darwin') or (python_full_version <= '3.11' and sys_platform == 'linux') or (python_full_version <= '3.11' and sys_platform == 'win32')" }, + { name = "tomli", marker = "(python_full_version <= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version <= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version <= '3.11' and sys_platform == 'win32')" }, ] [[package]] @@ -681,7 +681,7 @@ name = "croniter" version = "6.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/de/5832661ed55107b8a09af3f0a2e71e0957226a59eb1dcf0a445cce6daf20/croniter-6.2.2.tar.gz", hash = "sha256:ba60832a5ec8e12e51b8691c3309a113d1cf6526bdf1a48150ce8ec7a532d0ab", size = 113762, upload-time = "2026-03-15T08:43:48.112Z" } wheels = [ @@ -693,8 +693,8 @@ name = "cryptography" version = "49.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "(platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "cffi", marker = "(os_name != 'nt' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (os_name != 'nt' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } wheels = [ @@ -746,29 +746,29 @@ name = "darts" version = "0.45.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "holidays", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "joblib", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "narwhals", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "nfoursid", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyod", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scikit-learn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "shap", version = "0.49.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "shap", version = "0.51.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "shap", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "statsmodels", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tqdm", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "holidays", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "joblib", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "narwhals", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "nfoursid", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyod", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scikit-learn", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "shap", version = "0.49.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "shap", version = "0.51.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "shap", version = "0.52.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "statsmodels", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tqdm", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3a/b1/cae38a86011799c23ee6baa35c0345a34e3002e4ef0e0685e9a1947e41ff/darts-0.45.0.tar.gz", hash = "sha256:ae59113e56a9798a6f05cfb4c306c6d0d6f356d17dc215cb3956887d54539831", size = 690353, upload-time = "2026-06-19T14:50:34.46Z" } wheels = [ @@ -807,9 +807,9 @@ name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", @@ -824,14 +824,14 @@ name = "docutils" version = "0.22.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -851,8 +851,8 @@ name = "email-validator" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dnspython", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "idna", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "dnspython", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "idna", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } wheels = [ @@ -873,7 +873,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -885,9 +885,9 @@ name = "fakeredis" version = "2.36.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sortedcontainers", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sortedcontainers", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0a/ed/86ed74d8829c3bc565025c1c9efaf8518c9165fbf8c9cc2c026c8ed21bd9/fakeredis-2.36.2.tar.gz", hash = "sha256:c37a0b307fae3f27ec7c19e59519e57b8c52782e00303df9075361b5ba441be6", size = 213336, upload-time = "2026-06-17T13:25:38.934Z" } wheels = [ @@ -908,9 +908,9 @@ name = "flake8" version = "7.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "mccabe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pycodestyle", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyflakes", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "mccabe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pycodestyle", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyflakes", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/72/e8d66150c4fcace3c0a450466aa3480506ba2cae7b61e100a2613afc3907/flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38", size = 48054, upload-time = "2024-08-04T20:32:44.311Z" } wheels = [ @@ -928,12 +928,12 @@ name = "flask" version = "3.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blinker", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "itsdangerous", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "blinker", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "itsdangerous", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "jinja2", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } wheels = [ @@ -945,7 +945,7 @@ name = "flask-classful" version = "0.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/54/9f/0a2e2144e3e32d1d8e5bd66acb3cb54f76b7072ab832a6be9b7d707d2015/flask_classful-0.16.0.tar.gz", hash = "sha256:9073dc705f59e301da84d981f48bdff1901a5170700b685f42548d6f754156d5", size = 8806, upload-time = "2023-09-07T21:44:49.908Z" } wheels = [ @@ -957,9 +957,9 @@ name = "flask-cors" version = "6.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/47/03/4e464a50860f9adf08b5c1d3479cb8ea1f12af2aa69535c7042c6e628135/flask_cors-6.0.5.tar.gz", hash = "sha256:30c5031552cd59f620ac0c8211dac45b345d3b2df310e7721879e4f46ef9c601", size = 101386, upload-time = "2026-06-08T20:20:17.765Z" } wheels = [ @@ -971,7 +971,7 @@ name = "flask-json" version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/4a/6046e195241772f4b6add3adcd4e820004c6151afc587d8c7d0d4ffeb473/Flask-JSON-0.4.0.tar.gz", hash = "sha256:07945d66024f3b77694ce1db5d1fe83940f2aa3bcad8a608535686be67e4bc48", size = 15899, upload-time = "2023-05-06T07:45:52.873Z" } wheels = [ @@ -983,8 +983,8 @@ name = "flask-login" version = "0.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c3/6e/2f4e13e373bb49e68c02c51ceadd22d172715a06716f9299d9df01b6ddb2/Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333", size = 48834, upload-time = "2023-10-30T14:53:21.151Z" } wheels = [ @@ -996,8 +996,8 @@ name = "flask-mail" version = "0.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blinker", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "blinker", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/29/e92dc84c675d1e8d260d5768eb3fb65c70cbd33addecf424187587bee862/flask_mail-0.10.0.tar.gz", hash = "sha256:44083e7b02bbcce792209c06252f8569dd5a325a7aaa76afe7330422bd97881d", size = 8152, upload-time = "2024-05-23T22:30:12.612Z" } wheels = [ @@ -1009,16 +1009,16 @@ name = "flask-marshmallow" version = "1.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "flask", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "flask", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/43/6e5c19e8abc01f5daf1d3c8ad169c495335390572b8bead3f7e7302131c6/flask_marshmallow-1.4.0.tar.gz", hash = "sha256:98c90a253052c72d2ddddc925539ac33bbd780c6fba86478ffe18e3b89d8b471", size = 40970, upload-time = "2026-02-04T16:07:59.916Z" } wheels = [ @@ -1030,14 +1030,14 @@ name = "flask-marshmallow" version = "1.5.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -1048,8 +1048,8 @@ resolution-markers = [ "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "flask", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "flask", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/65/ca/22f00dffdd6709332247960e0c1223995bc22ff7537834bffc44ab9ab90b/flask_marshmallow-1.5.0.tar.gz", hash = "sha256:7c06b56e41647eccdb3cd57c25b109f19191b4c62509362bd64920cdf601a066", size = 41188, upload-time = "2026-04-16T02:58:30.853Z" } wheels = [ @@ -1061,9 +1061,9 @@ name = "flask-migrate" version = "4.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "alembic", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "alembic", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/47c7b3c93855ceffc2eabfa271782332942443321a07de193e4198f920cf/flask_migrate-4.1.0.tar.gz", hash = "sha256:1a336b06eb2c3ace005f5f2ded8641d534c18798d64061f6ff11f79e1434126d", size = 21965, upload-time = "2025-01-10T18:51:11.848Z" } wheels = [ @@ -1075,8 +1075,8 @@ name = "flask-principal" version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "blinker", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "blinker", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/14/c7/2531aca6ab7baa3774fde2dfc9c9dd6d5a42576a1013a93701bfdc402fdd/Flask-Principal-0.4.0.tar.gz", hash = "sha256:f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453", size = 5452, upload-time = "2013-06-14T18:56:14.264Z" } @@ -1085,14 +1085,14 @@ name = "flask-security-too" version = "5.8.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "email-validator", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-login", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-principal", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-wtf", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "libpass", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "wtforms", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "email-validator", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-login", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-principal", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-wtf", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "libpass", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "wtforms", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/16/8b/9b6af966ce15689ad22e9bd51aceffca0b7ab9c47a258bbb9fe69d7bec01/flask_security_too-5.8.1.tar.gz", hash = "sha256:19450675a19055a3229b9ba5447491fa1233b41c0edf4917ea970222a15fc09e", size = 751524, upload-time = "2026-05-21T18:57:36.674Z" } wheels = [ @@ -1101,14 +1101,14 @@ wheels = [ [package.optional-dependencies] fsqla = [ - { name = "flask-sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask-sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] mfa = [ - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "phonenumberslite", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "qrcode", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "webauthn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "phonenumberslite", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "qrcode", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "webauthn", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [[package]] @@ -1116,8 +1116,8 @@ name = "flask-sqlalchemy" version = "3.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/91/53/b0a9fcc1b1297f51e68b69ed3b7c3c40d8c45be1391d77ae198712914392/flask_sqlalchemy-3.1.1.tar.gz", hash = "sha256:e4b68bb881802dda1a7d878b2fc84c06d1ee57fb40b874d3dc97dabfa36b8312", size = 81899, upload-time = "2023-09-11T21:42:36.147Z" } wheels = [ @@ -1129,7 +1129,7 @@ name = "flask-sslify" version = "0.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6e/98/54f2ffaf886d25eb1591cfb534c04cbf983236d657d58d180fd9ccbb5e7f/Flask-SSLify-0.1.5.tar.gz", hash = "sha256:d33e1d3c09cd95154176aa8a7319418e52129fc482dd56d8a8ad7c24500d543e", size = 3034, upload-time = "2015-04-02T20:25:24.407Z" } @@ -1138,7 +1138,7 @@ name = "flask-swagger-ui" version = "5.32.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c8/db/06cd2b77fff6c115c37dc8ec4db04ee6e5119799a27c7e19410f0f303c0e/flask_swagger_ui-5.32.6.tar.gz", hash = "sha256:38730cb566e5f1d70deb8bb1035ef1565b35dc50cdfd2a9e507779a751d46930", size = 613730, upload-time = "2026-05-18T10:31:09.328Z" } wheels = [ @@ -1150,9 +1150,9 @@ name = "flask-wtf" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "itsdangerous", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "wtforms", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "itsdangerous", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "wtforms", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/91/f1/605a56d4ea217b307f3e6f4d663e0351253d85d841edc93ba559f0648e19/flask_wtf-1.3.0.tar.gz", hash = "sha256:61d5dabc50c3df885c297dcbd80810443a5d632106c8a69cab8ce740f0cdd7cc", size = 50414, upload-time = "2026-04-23T07:41:55.096Z" } wheels = [ @@ -1164,7 +1164,7 @@ name = "flexcache" version = "0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } wheels = [ @@ -1175,123 +1175,123 @@ wheels = [ name = "flexmeasures" source = { editable = "." } dependencies = [ - { name = "altair", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "apispec", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "apispec-oneofschema", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "apispec-webframeworks", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "argon2-cffi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "bcrypt", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "click-default-group", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "darts", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "email-validator", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-classful", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-cors", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-json", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-login", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-mail", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-marshmallow", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "flask-marshmallow", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "flask-migrate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-security-too", extra = ["fsqla", "mfa"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-sslify", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-swagger-ui", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask-wtf", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "highspy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "humanize", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "inflect", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "inflection", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "iso8601", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "isodate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "lightgbm", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow-oneofschema", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "marshmallow-polyfield", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "marshmallow-sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "psycopg2-binary", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "py-moneyed", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pydantic", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyomo", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyopenssl", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "python-dotenv", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytz", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rq", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rq-dashboard", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rq-win", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sentry-sdk", extra = ["flask"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tabulate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "timely-beliefs", extra = ["forecast"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tldextract", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "uniplot", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "vl-convert-python", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "webargs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "workalendar", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "xlrd", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "altair", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "apispec", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "apispec-oneofschema", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "apispec-webframeworks", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "argon2-cffi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "bcrypt", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "click-default-group", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "darts", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "email-validator", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-classful", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-cors", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-json", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-login", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-mail", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-marshmallow", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "flask-marshmallow", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "flask-migrate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-security-too", extra = ["fsqla", "mfa"], marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-sslify", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-swagger-ui", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask-wtf", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "highspy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "humanize", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "inflect", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "inflection", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "iso8601", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "isodate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "lightgbm", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow-oneofschema", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "marshmallow-polyfield", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "marshmallow-sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pillow", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "psycopg2-binary", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "py-moneyed", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pydantic", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyomo", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyopenssl", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "python-dotenv", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytz", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rq", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rq-dashboard", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rq-win", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sentry-sdk", extra = ["flask"], marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tabulate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "timely-beliefs", extra = ["forecast"], marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tldextract", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "uniplot", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "urllib3", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "vl-convert-python", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "webargs", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "workalendar", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "xlrd", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [package.dev-dependencies] dev = [ - { name = "black", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flake8", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flake8-blind-except", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "mypy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "poethepoet", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyinstrument", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-runner", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-pytz", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-setuptools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-tabulate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-tzlocal", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "watchdog", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "black", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flake8", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flake8-blind-except", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "mypy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "poethepoet", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyinstrument", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-runner", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-pytz", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-setuptools", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-tabulate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-tzlocal", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "watchdog", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] docs = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinx-copybutton", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx-fontawesome", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx-rtd-theme", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx-tabs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinxcontrib-httpdomain", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinxcontrib-mermaid", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinxcontrib-openapi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx-copybutton", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx-fontawesome", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx-rtd-theme", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx-tabs", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinxcontrib-httpdomain", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinxcontrib-mermaid", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinxcontrib-openapi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] test = [ - { name = "fakeredis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "lupa", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "openpyxl", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-cov", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-mock", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-runner", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest-sugar", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests-mock", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "fakeredis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "lupa", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "openpyxl", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-cov", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-mock", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-runner", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest-sugar", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "requests-mock", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] visualize-data-model = [ - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy-schemadisplay", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pillow", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy-schemadisplay", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [package.metadata] @@ -1351,7 +1351,7 @@ requires-dist = [ { name = "sentry-sdk", extras = ["flask"], specifier = ">=2.52.0" }, { name = "sqlalchemy", specifier = ">=2.0" }, { name = "tabulate", specifier = ">=0.9.0" }, - { name = "timely-beliefs", extras = ["forecast"], specifier = ">=3.5.5" }, + { name = "timely-beliefs", extras = ["forecast"], specifier = ">=4.0.0" }, { name = "tldextract", specifier = ">=5.3.1" }, { name = "uniplot", specifier = ">=0.12.1" }, { name = "urllib3", specifier = ">=2.7.0" }, @@ -1417,7 +1417,7 @@ name = "flexparser" version = "0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } wheels = [ @@ -1493,8 +1493,8 @@ name = "highspy" version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/66/e74b1a805f65c52666e3b54cfc1ba783e745c2c8a7abaae9e7ef2d9e7270/highspy-1.14.0.tar.gz", hash = "sha256:b09cb5e3179a25fc615b8b0941130b0f71e19372c119f3dd620d63b54cd3ca4c", size = 1654913, upload-time = "2026-04-06T15:53:31.738Z" } wheels = [ @@ -1535,7 +1535,7 @@ name = "holidays" version = "0.99" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/69/7626f743128513c919ed058530d62a86902099532a86222260b0cfc70d7c/holidays-0.99.tar.gz", hash = "sha256:9ef8278cdfb67dbd93309ec9b30c30609ab35fd57cb207ce4593f80dc91196f5", size = 931630, upload-time = "2026-06-15T20:39:42.38Z" } wheels = [ @@ -1574,7 +1574,7 @@ name = "importlib-metadata" version = "9.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "zipp", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ @@ -1586,8 +1586,8 @@ name = "inflect" version = "7.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "more-itertools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typeguard", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "more-itertools", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typeguard", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/78/c6/943357d44a21fd995723d07ccaddd78023eace03c1846049a2645d4324a3/inflect-7.5.0.tar.gz", hash = "sha256:faf19801c3742ed5a05a8ce388e0d8fe1a07f8d095c82201eb904f5d27ad571f", size = 73751, upload-time = "2024-12-28T17:11:18.897Z" } wheels = [ @@ -1644,7 +1644,7 @@ name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } wheels = [ @@ -1665,11 +1665,11 @@ name = "jsonschema" version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "jsonschema-specifications", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "referencing", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "attrs", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "jsonschema-specifications", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "referencing", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ @@ -1681,7 +1681,7 @@ name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "referencing", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "referencing", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ @@ -1813,11 +1813,11 @@ name = "lightgbm" version = "4.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705, upload-time = "2025-02-15T04:03:03.111Z" } wheels = [ @@ -1911,7 +1911,7 @@ name = "mako" version = "1.3.12" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/00/62/791b31e69ae182791ec67f04850f2f062716bbd205483d63a215f3e062d3/mako-1.3.12.tar.gz", hash = "sha256:9f778e93289bd410bb35daadeb4fc66d95a746f0b75777b942088b7fd7af550a", size = 400219, upload-time = "2026-04-28T19:01:08.512Z" } wheels = [ @@ -1964,15 +1964,15 @@ name = "marshmallow" version = "3.26.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/79/de6c16cc902f4fc372236926b0ce2ab7845268dcc30fb2fbb7f71b418631/marshmallow-3.26.2.tar.gz", hash = "sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57", size = 222095, upload-time = "2025-12-22T06:53:53.309Z" } wheels = [ @@ -1984,14 +1984,14 @@ name = "marshmallow" version = "4.3.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -2011,8 +2011,8 @@ name = "marshmallow-oneofschema" version = "3.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bb/42/a0e00dea6a831acfe9d3fe664d695b7cefc02c27dd69d9ccb4bdc3c3d1a7/marshmallow_oneofschema-3.2.0.tar.gz", hash = "sha256:c06c8d9f14d51ffff152d66d85bd5f27d55cff10752a3b1f8c1f948bf5f597a0", size = 9096, upload-time = "2025-05-08T13:49:34.798Z" } wheels = [ @@ -2024,8 +2024,8 @@ name = "marshmallow-polyfield" version = "5.11" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0e/55/b752d034a09afe34d680c65cf8634c0c55f9b57e7a673774bc13ca44b53e/marshmallow-polyfield-5.11.tar.gz", hash = "sha256:8075a9cc490da4af58b902b4a40a99882dd031adb7aaa96abd147a4fcd53415f", size = 8596, upload-time = "2022-10-26T03:10:40.661Z" } @@ -2034,9 +2034,9 @@ name = "marshmallow-sqlalchemy" version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ee/fe/247c297809e64116f766716632adbc3f4cd06f376f56dc15bb92f170d247/marshmallow_sqlalchemy-1.5.0.tar.gz", hash = "sha256:e51192c204770645a2fab0d72f44f8789272eef75951f84b1608d6b4b0bfe0e6", size = 51349, upload-time = "2026-04-01T23:21:03.833Z" } wheels = [ @@ -2048,23 +2048,23 @@ name = "matplotlib" version = "3.10.9" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "cycler", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "fonttools", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "kiwisolver", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "pillow", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "pyparsing", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "python-dateutil", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "cycler", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "fonttools", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "kiwisolver", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pillow", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pyparsing", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "python-dateutil", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/63/1b/4be5be87d43d327a0cf4de1a56e86f7f84c89312452406cf122efe2839e6/matplotlib-3.10.9.tar.gz", hash = "sha256:fd66508e8c6877d98e586654b608a0456db8d7e8a546eb1e2600efd957302358", size = 34811233, upload-time = "2026-04-24T00:14:13.539Z" } wheels = [ @@ -2101,14 +2101,14 @@ name = "matplotlib" version = "3.11.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -2119,15 +2119,15 @@ resolution-markers = [ "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "cycler", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "fonttools", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "kiwisolver", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pillow", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pyparsing", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "python-dateutil", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "cycler", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "fonttools", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "kiwisolver", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pillow", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pyparsing", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "python-dateutil", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" } wheels = [ @@ -2164,7 +2164,7 @@ name = "mistune" version = "3.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/10/55/ede164a9ff68694455bf42217e9e75b174e4048436688cfff7b382ae486c/mistune-3.3.1.tar.gz", hash = "sha256:7d2108b532850ab81d3e92a5566abe1168f4f27c0c9dbe914e02d1d06e2a0288", size = 111268, upload-time = "2026-06-22T01:32:05.843Z" } wheels = [ @@ -2185,12 +2185,12 @@ name = "mypy" version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ast-serialize", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "librt", marker = "(platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'win32')" }, - { name = "mypy-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pathspec", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "ast-serialize", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "librt", marker = "(os_name != 'nt' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin') or (os_name != 'nt' and platform_python_implementation != 'PyPy' and sys_platform == 'linux') or (platform_python_implementation != 'PyPy' and sys_platform == 'win32')" }, + { name = "mypy-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pathspec", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/15/cca9d88503549ed6fedeaa1d448cdddd542ee8a490232d732e278036fbf2/mypy-2.1.0.tar.gz", hash = "sha256:81e76ad12c2d804512e9b13240d1588316531bfba07558286078bfbce9613633", size = 3898359, upload-time = "2026-05-11T18:37:36.237Z" } wheels = [ @@ -2241,11 +2241,11 @@ name = "nfoursid" version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ab/36/1c0543d9c5ca3a692ea5244de68a74776e38e49b77b6ddb1ec3e8e28beca/nfoursid-1.0.2.tar.gz", hash = "sha256:d65ba1bb98715f6310d0136aecdc997313caa239c08cc95f7e48378f77d06a24", size = 15475, upload-time = "2025-07-24T13:01:40.167Z" } wheels = [ @@ -2257,9 +2257,9 @@ name = "numba" version = "0.65.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "llvmlite", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "llvmlite", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } wheels = [ @@ -2282,9 +2282,9 @@ name = "numpy" version = "2.2.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", @@ -2332,14 +2332,14 @@ name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -2387,7 +2387,7 @@ name = "openpyxl" version = "3.1.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "et-xmlfile", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "et-xmlfile", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } wheels = [ @@ -2399,8 +2399,8 @@ name = "openturns" version = "1.27.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "dill", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "psutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "dill", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "psutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/18/cc/659945cbc51ccfebf4b341dbd441190d192ff0bd895fa9768df389e4c6f4/openturns-1.27.post1-cp39-abi3-macosx_14_0_arm64.whl", hash = "sha256:e547db66d27550a93f01bbf863a97b85fde7c31e7daa99e555f3bb40c259c57e", size = 46865937, upload-time = "2026-06-19T07:39:15.578Z" }, @@ -2423,11 +2423,11 @@ name = "pandas" version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytz", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tzdata", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytz", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tzdata", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } wheels = [ @@ -2477,8 +2477,8 @@ name = "patsy" version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/be/44/ed13eccdd0519eff265f44b670d46fbb0ec813e2274932dc1c0e48520f7d/patsy-1.0.2.tar.gz", hash = "sha256:cdc995455f6233e90e22de72c37fcadb344e7586fb83f06696f54d92f8ce74c0", size = 399942, upload-time = "2025-10-20T16:17:37.535Z" } wheels = [ @@ -2556,18 +2556,18 @@ name = "pint" version = "0.24.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "flexcache", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "flexparser", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "platformdirs", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "flexcache", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "flexparser", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "platformdirs", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload-time = "2024-11-07T16:29:46.061Z" } wheels = [ @@ -2579,14 +2579,14 @@ name = "pint" version = "0.25.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -2597,10 +2597,10 @@ resolution-markers = [ "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "flexcache", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "flexparser", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "platformdirs", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "flexcache", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "flexparser", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "platformdirs", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } wheels = [ @@ -2639,9 +2639,9 @@ name = "poethepoet" version = "0.46.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pastel", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pastel", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3b/f5/d501fcb67e450fd3fae9db06050420c0c6043758cfa8c30ba40278211265/poethepoet-0.46.0.tar.gz", hash = "sha256:daf8469031879ef59ef0b34fdba83574d65e41eb9186e20cd0f7c89ce479b030", size = 117276, upload-time = "2026-05-15T15:52:02.548Z" } wheels = [ @@ -2653,11 +2653,11 @@ name = "properscoring" version = "0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/ac/513d2c8653ab6bc66c4502372e6e4e20ce6a136cde4c1ba9908ec36e34c1/properscoring-0.1.tar.gz", hash = "sha256:b0cc4963cc218b728d6c5f77b3259c8f835ae00e32e82678cdf6936049b93961", size = 17848, upload-time = "2015-11-12T19:54:29.615Z" } wheels = [ @@ -2726,8 +2726,8 @@ name = "py-moneyed" version = "3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "babel", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "babel", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2c/d9/cb6f113d2b7cf930bb3963d2b84ee245c20f93f9afc2e41adece58d324ae/py-moneyed-3.0.tar.gz", hash = "sha256:4906f0f02cf2b91edba2e156f2d4e9a78f224059ab8c8fa2ff26230c75d894e8", size = 20385, upload-time = "2022-11-27T21:29:38.564Z" } wheels = [ @@ -2748,7 +2748,7 @@ name = "pyasn1-modules" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyasn1", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pyasn1", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } wheels = [ @@ -2778,10 +2778,10 @@ name = "pydantic" version = "2.13.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "annotated-types", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pydantic-core", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-inspection", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "annotated-types", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pydantic-core", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-inspection", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ @@ -2793,7 +2793,7 @@ name = "pydantic-core" version = "2.46.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } wheels = [ @@ -2864,7 +2864,7 @@ name = "pydot" version = "4.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyparsing", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pyparsing", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/35/b17cb89ff865484c6a20ef46bf9d95a5f07328292578de0b295f4a6beec2/pydot-4.0.1.tar.gz", hash = "sha256:c2148f681c4a33e08bf0e26a9e5f8e4099a82e0e2a068098f32ce86577364ad5", size = 162594, upload-time = "2025-06-17T20:09:56.454Z" } wheels = [ @@ -2941,16 +2941,16 @@ name = "pyod" version = "3.6.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "numba", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "scikit-learn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "joblib", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "matplotlib", version = "3.10.9", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "matplotlib", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numba", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "scikit-learn", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/e6/462a2947437ff5acfc8de698630693d73f58355b4b5b69cda00d98c0ab59/pyod-3.6.1.tar.gz", hash = "sha256:a3081ec589d0d99d33b84efe8da1b82ae22022fd83f3721f30b19ac950f427c3", size = 351105, upload-time = "2026-06-17T02:46:35.823Z" } wheels = [ @@ -2962,7 +2962,7 @@ name = "pyomo" version = "6.8.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ply", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "ply", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c8/bf/29450fb25c87e7f37815190805e8f7af57ef259f6721bfed51ee547b5b44/Pyomo-6.8.2.tar.gz", hash = "sha256:40d8f7b216ad1602bb254f4296591608dd94fe2c961dc1e63ca6b84fb397bed6", size = 2877062, upload-time = "2024-11-18T22:55:21.872Z" } wheels = [ @@ -2988,8 +2988,8 @@ name = "pyopenssl" version = "26.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/b7/da07bae88f5a9506b4def6f2f4903cf4c3b8831e560dba8fa18ca08f758f/pyopenssl-26.3.0.tar.gz", hash = "sha256:589de7fae1c9ea670d18422ed00fc04da787bbde8e1454aea872aa57b49ad341", size = 182024, upload-time = "2026-06-12T20:28:07.458Z" } wheels = [ @@ -3011,12 +3011,12 @@ version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "iniconfig", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pluggy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "exceptiongroup", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "iniconfig", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pluggy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pygments", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ @@ -3028,9 +3028,9 @@ name = "pytest-cov" version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", extra = ["toml"], marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pluggy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "coverage", extra = ["toml"], marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pluggy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } wheels = [ @@ -3042,9 +3042,9 @@ name = "pytest-flask" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytest", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fb/23/32b36d2f769805c0f3069ca8d9eeee77b27fcf86d41d40c6061ddce51c7d/pytest-flask-1.3.0.tar.gz", hash = "sha256:58be1c97b21ba3c4d47e0a7691eb41007748506c36bf51004f78df10691fa95e", size = 35816, upload-time = "2023-10-23T14:53:20.696Z" } wheels = [ @@ -3056,7 +3056,7 @@ name = "pytest-mock" version = "3.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pytest", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/68/14/eb014d26be205d38ad5ad20d9a80f7d201472e08167f0bb4361e251084a9/pytest_mock-3.15.1.tar.gz", hash = "sha256:1849a238f6f396da19762269de72cb1814ab44416fa73a8686deac10b0d87a0f", size = 34036, upload-time = "2025-09-16T16:37:27.081Z" } wheels = [ @@ -3077,8 +3077,8 @@ name = "pytest-sugar" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pytest", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "termcolor", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pytest", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "termcolor", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/4e/60fed105549297ba1a700e1ea7b828044842ea27d72c898990510b79b0e2/pytest-sugar-1.1.1.tar.gz", hash = "sha256:73b8b65163ebf10f9f671efab9eed3d56f20d2ca68bda83fa64740a92c08f65d", size = 16533, upload-time = "2025-08-23T12:19:35.737Z" } wheels = [ @@ -3090,7 +3090,7 @@ name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "six", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "six", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ @@ -3177,7 +3177,7 @@ name = "redis" version = "8.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "async-timeout", marker = "(python_full_version < '3.11.3' and sys_platform == 'darwin') or (python_full_version < '3.11.3' and sys_platform == 'linux') or (python_full_version < '3.11.3' and sys_platform == 'win32')" }, + { name = "async-timeout", marker = "(python_full_version < '3.11.3' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11.3' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11.3' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/53/ae/ed461cca5780b5fc8b9fe8ca0ed98d89508645fb9d880c24cc42c087678f/redis-8.0.0.tar.gz", hash = "sha256:a00c5355432051ac14e593b8b197fc76c887ee12d55a0984f69328a1115fdc49", size = 5101591, upload-time = "2026-05-28T12:45:13.5Z" } wheels = [ @@ -3189,7 +3189,7 @@ name = "redis-sentinel-url" version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/e3/68de4c8aacbd9952667d7d0f5af55b873553a09a6227ac5b7f7c622610c9/Redis-Sentinel-Url-1.0.1.tar.gz", hash = "sha256:ec1854ab9379a28789423c3cd4082739fb69c7b4b11bb50ae7858697c131b13e", size = 7599, upload-time = "2017-04-05T07:47:55.456Z" } wheels = [ @@ -3201,10 +3201,10 @@ name = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "attrs", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -3216,10 +3216,10 @@ name = "requests" version = "2.34.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "charset-normalizer", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "idna", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "certifi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "charset-normalizer", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "idna", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "urllib3", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ @@ -3231,7 +3231,7 @@ name = "requests-file" version = "3.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3c/f8/5dc70102e4d337063452c82e1f0d95e39abfe67aa222ed8a5ddeb9df8de8/requests_file-3.0.1.tar.gz", hash = "sha256:f14243d7796c588f3521bd423c5dea2ee4cc730e54a3cac9574d78aca1272576", size = 6967, upload-time = "2025-10-20T18:56:42.279Z" } wheels = [ @@ -3243,7 +3243,7 @@ name = "requests-mock" version = "1.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/92/32/587625f91f9a0a3d84688bf9cfc4b2480a7e8ec327cefd0ff2ac891fd2cf/requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401", size = 60901, upload-time = "2024-03-29T03:54:29.446Z" } wheels = [ @@ -3264,9 +3264,9 @@ name = "rpds-py" version = "0.30.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", @@ -3336,14 +3336,14 @@ name = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -3404,9 +3404,9 @@ name = "rq" version = "2.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "croniter", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "croniter", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cc/a8/7bf65cda593feb5888214a4d1e64aae6fc5eb0bbbb74df922c916099a3e5/rq-2.10.0.tar.gz", hash = "sha256:2d8c533dd27500fedabec06295f18db595966e4f22744e6988fe31155b8f7a21", size = 754610, upload-time = "2026-06-20T03:11:45.919Z" } wheels = [ @@ -3418,11 +3418,11 @@ name = "rq-dashboard" version = "0.8.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "arrow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "redis", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "redis-sentinel-url", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "rq", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "arrow", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "redis", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "redis-sentinel-url", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "rq", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/51/73/2e4347593d50bed8dcf0ba89ac180133f04de056fc9f7c701cfd56988f9a/rq_dashboard-0.8.7.tar.gz", hash = "sha256:068964cd677787586724ae71d051c4c963fdd5ea86515f1b42357bf983253951", size = 210994, upload-time = "2026-05-26T05:06:08.925Z" } wheels = [ @@ -3434,8 +3434,8 @@ name = "rq-win" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "rq", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "times", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "rq", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "times", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/fe/92187f1ebb14760299e401e29ed6c1f4f3d415ed130fbc1575f148689242/rq_win-0.4.2.tar.gz", hash = "sha256:f7c4a573a225ffc48044050d6b2b188e8423ffaec318d80af94462b6751f9478", size = 4550, upload-time = "2025-06-09T07:47:34.642Z" } wheels = [ @@ -3456,13 +3456,13 @@ name = "scikit-learn" version = "1.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "threadpoolctl", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "joblib", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "threadpoolctl", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136, upload-time = "2025-09-09T08:21:29.075Z" } wheels = [ @@ -3488,15 +3488,15 @@ name = "scipy" version = "1.15.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] 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 = [ @@ -3534,17 +3534,17 @@ name = "scipy" version = "1.17.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'win32')", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } wheels = [ @@ -3575,17 +3575,17 @@ name = "scipy" version = "1.18.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'win32')", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } wheels = [ @@ -3606,8 +3606,8 @@ name = "sentry-sdk" version = "2.63.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "certifi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "urllib3", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ba/c8/b3c970a5b186722d276cd40a05b3254e03bccc0208560aff20f612e018e8/sentry_sdk-2.63.0.tar.gz", hash = "sha256:2a1502bf864769275dbc8c2c9fc7a0f7f5e18358180b615d262d13a31ffba216", size = 912449, upload-time = "2026-06-16T12:45:57.553Z" } wheels = [ @@ -3616,9 +3616,9 @@ wheels = [ [package.optional-dependencies] flask = [ - { name = "blinker", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "flask", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "blinker", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "flask", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [[package]] @@ -3635,31 +3635,31 @@ name = "shap" version = "0.49.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "cloudpickle", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "numba", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "pandas", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "scikit-learn", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, - { name = "slicer", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "tqdm", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, - { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "cloudpickle", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "numba", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "packaging", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "pandas", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "scikit-learn", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin'" }, + { name = "slicer", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "tqdm", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/c6/9823a7f483aa9f3179fc359c10d22da9e418b1a7a3fc99a42b705d05e82a/shap-0.49.1.tar.gz", hash = "sha256:1114ecd804fff29f50d522ce6031082fcf42fe4a32fb1b5da233b2415d784c8c", size = 4084725, upload-time = "2025-10-14T10:04:49.75Z" } wheels = [ @@ -3688,25 +3688,25 @@ name = "shap" version = "0.51.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'win32')", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "cloudpickle", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "llvmlite", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "numba", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "pandas", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scikit-learn", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "slicer", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "tqdm", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "(python_full_version == '3.11.*' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "cloudpickle", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "llvmlite", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "numba", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scikit-learn", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "slicer", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "tqdm", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a4/0a/4a3ee4b1a3654f2a9ae038a64bb3e91a42af3da07577d69b65241f010970/shap-0.51.0.tar.gz", hash = "sha256:cfa17ff213657c9d50285aa923d79b0037a62e2ee1a31bc3eec7e196b00bdb59", size = 4108336, upload-time = "2026-03-04T09:18:19.985Z" } wheels = [ @@ -3731,24 +3731,24 @@ name = "shap" version = "0.52.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'win32')", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "cloudpickle", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "llvmlite", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "numba", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "pandas", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "scikit-learn", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "slicer", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "tqdm", marker = "(python_full_version >= '3.12' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "cloudpickle", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "llvmlite", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numba", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "scikit-learn", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "slicer", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "tqdm", marker = "(python_full_version >= '3.12' and os_name != 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/0a/aa278f42c08cb47f2bb503085be0c521da2886929c6605b6105748a7590f/shap-0.52.0.tar.gz", hash = "sha256:81d4ae478f67f8122de1bb411dc4e3ddff0604cbc27dc9cb8ea66d5c73462fd2", size = 4192842, upload-time = "2026-05-28T14:17:49.011Z" } wheels = [ @@ -3775,16 +3775,16 @@ name = "sktime" version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "joblib", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scikit-base", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scikit-learn", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "joblib", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scikit-base", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scikit-learn", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e6/7f/7eb6441625dc3c5d66f71d3b40b6f5c24de3c758f71aa57792656b3ae166/sktime-1.0.1.tar.gz", hash = "sha256:3cc20576a03d46447e935c3d3512450ffd5b65ee0320af65db5ff71f4373d453", size = 36261136, upload-time = "2026-06-11T20:53:15.797Z" } wheels = [ @@ -3823,31 +3823,31 @@ name = "sphinx" version = "8.1.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "alabaster", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "babel", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "alabaster", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "babel", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "imagesize", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "jinja2", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "pygments", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "requests", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "snowballstemmer", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-applehelp", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-devhelp", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-jsmath", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-qthelp", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "tomli", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "imagesize", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "jinja2", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pygments", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "requests", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "snowballstemmer", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-applehelp", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-devhelp", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-jsmath", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-qthelp", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "tomli", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -3859,33 +3859,33 @@ name = "sphinx" version = "9.0.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'win32')", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "alabaster", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "babel", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "alabaster", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "babel", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, { name = "colorama", marker = "python_full_version == '3.11.*' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "imagesize", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "jinja2", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "pygments", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "requests", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "roman-numerals", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "snowballstemmer", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-applehelp", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-devhelp", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-jsmath", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-qthelp", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "imagesize", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "jinja2", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "pygments", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "requests", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "roman-numerals", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "snowballstemmer", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-applehelp", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-devhelp", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-jsmath", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-qthelp", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" } wheels = [ @@ -3897,33 +3897,33 @@ name = "sphinx" version = "9.1.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'win32')", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "alabaster", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "babel", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "alabaster", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "babel", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "imagesize", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "jinja2", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "pygments", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "requests", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "roman-numerals", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "snowballstemmer", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-applehelp", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-devhelp", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-jsmath", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-qthelp", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "imagesize", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "jinja2", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "pygments", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "requests", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "roman-numerals", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "snowballstemmer", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-applehelp", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-devhelp", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-htmlhelp", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-jsmath", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-qthelp", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-serializinghtml", marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" } wheels = [ @@ -3935,9 +3935,9 @@ name = "sphinx-copybutton" version = "0.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } wheels = [ @@ -3949,9 +3949,9 @@ name = "sphinx-fontawesome" version = "0.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/c5/9c14765c7f4721a7df3dc3710e3ce041b0042f91c8c75991434405657c30/sphinx_fontawesome-0.0.6.tar.gz", hash = "sha256:fa38d32f1654ad61f442096965f4069c074f37d7f2fadfa37f46b393938a5bdb", size = 22385, upload-time = "2017-09-24T10:41:17.113Z" } @@ -3960,13 +3960,13 @@ name = "sphinx-mdinclude" version = "0.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "mistune", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "mistune", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pygments", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b6/a7/c9a7888bb2187fdb06955d71e75f6f266b7e179b356ac76138d160a5b7eb/sphinx_mdinclude-0.6.2.tar.gz", hash = "sha256:447462e82cb8be61404a2204227f920769eb923d2f57608e3325f3bb88286b4c", size = 65257, upload-time = "2024-08-03T19:07:37.643Z" } wheels = [ @@ -3978,12 +3978,12 @@ name = "sphinx-rtd-theme" version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinxcontrib-jquery", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinxcontrib-jquery", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } wheels = [ @@ -3995,12 +3995,12 @@ name = "sphinx-tabs" version = "3.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pygments", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pygments", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/30/ca5b0de830f369968d8e3483dd45a8908fd10169c05cd9837f0bd075982e/sphinx_tabs-3.5.0.tar.gz", hash = "sha256:91dba1187e4c35fd37380a56ac228bbd54c6c649b2351829f3bf033718277537", size = 17006, upload-time = "2026-03-03T23:00:30.404Z" } wheels = [ @@ -4039,9 +4039,9 @@ name = "sphinxcontrib-httpdomain" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/76/a2/b9b96904f691a0b4ccb8277a72b4ec351590286b44a433d0cefe78703c2b/sphinxcontrib_httpdomain-2.0.0.tar.gz", hash = "sha256:9e4e8733bf41ee4d9d5f9eb4dbf3cc2c22a665221ba42c5c3ae181b98af8855d", size = 17155, upload-time = "2026-02-04T21:23:56.422Z" } wheels = [ @@ -4053,9 +4053,9 @@ name = "sphinxcontrib-jquery" version = "4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } wheels = [ @@ -4076,11 +4076,11 @@ name = "sphinxcontrib-mermaid" version = "2.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "jinja2", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/75/3a1cc926da8c563c58ddc124a7b3fe5ccadcae96c96e3a6f8ac3653a210a/sphinxcontrib_mermaid-2.0.2.tar.gz", hash = "sha256:f09576c78ca93fa0e3034fd9c45aaffa7c44ab449de9c43b8b8d262afe52bc66", size = 19265, upload-time = "2026-05-05T13:59:02.959Z" } wheels = [ @@ -4092,15 +4092,15 @@ name = "sphinxcontrib-openapi" version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deepmerge", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "jsonschema", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "picobox", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyyaml", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sphinx-mdinclude", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sphinxcontrib-httpdomain", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "deepmerge", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "jsonschema", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "picobox", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyyaml", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sphinx-mdinclude", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sphinxcontrib-httpdomain", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/bec7b89e981cc5ee18ccc5dd966257203bae8ceb893bfa7cc7e44f0df2e0/sphinxcontrib_openapi-0.9.0.tar.gz", hash = "sha256:c3c445a13c99706d8837b21b78e1caa8be5eb16b8f83a297a1fdf19f1c31d487", size = 95302, upload-time = "2026-02-10T18:41:24.543Z" } wheels = [ @@ -4130,8 +4130,8 @@ name = "sqlalchemy" version = "2.0.51" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "greenlet", marker = "(platform_machine == 'AMD64' and sys_platform == 'darwin') or (platform_machine == 'WIN32' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'darwin') or (platform_machine == 'amd64' and sys_platform == 'darwin') or (platform_machine == 'ppc64le' and sys_platform == 'darwin') or (platform_machine == 'win32' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'AMD64' and sys_platform == 'linux') or (platform_machine == 'WIN32' and sys_platform == 'linux') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'amd64' and sys_platform == 'linux') or (platform_machine == 'ppc64le' and sys_platform == 'linux') or (platform_machine == 'win32' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (platform_machine == 'WIN32' and sys_platform == 'win32') or (platform_machine == 'aarch64' and sys_platform == 'win32') or (platform_machine == 'amd64' and sys_platform == 'win32') or (platform_machine == 'ppc64le' and sys_platform == 'win32') or (platform_machine == 'win32' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'win32')" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "greenlet", marker = "(os_name != 'nt' and platform_machine == 'AMD64' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'WIN32' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'aarch64' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'amd64' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'ppc64le' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'win32' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (os_name != 'nt' and platform_machine == 'AMD64' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'WIN32' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'aarch64' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'amd64' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'ppc64le' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'win32' and sys_platform == 'linux') or (os_name != 'nt' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine == 'AMD64' and sys_platform == 'win32') or (platform_machine == 'WIN32' and sys_platform == 'win32') or (platform_machine == 'aarch64' and sys_platform == 'win32') or (platform_machine == 'amd64' and sys_platform == 'win32') or (platform_machine == 'ppc64le' and sys_platform == 'win32') or (platform_machine == 'win32' and sys_platform == 'win32') or (platform_machine == 'x86_64' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/02/f1/a7a892f18d4d224e6b26f706531eafccc41e37594d37d304786969ee13cb/sqlalchemy-2.0.51.tar.gz", hash = "sha256:804dccd8a4a6242c4e30ad961e540e18a588f6527202f2d6791b01845d59fdc9", size = 9912201, upload-time = "2026-06-15T15:41:20.012Z" } wheels = [ @@ -4164,10 +4164,10 @@ name = "sqlalchemy-schemadisplay" version = "2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pillow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pydot", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "setuptools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "pillow", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pydot", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "setuptools", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4f/b0/d4587a6223dd563072ed5d0b94e0d062bb3d019bf16d0e65a85324c49efc/sqlalchemy_schemadisplay-2.0.tar.gz", hash = "sha256:e90b9c9868814975d674a889aadb7c4651658f0e119e1c9320279ea527744d5e", size = 11637, upload-time = "2024-02-15T11:52:53.355Z" } wheels = [ @@ -4179,14 +4179,14 @@ name = "statsmodels" version = "0.14.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "patsy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "patsy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0d/81/e8d74b34f85285f7335d30c5e3c2d7c0346997af9f3debf9a0a9a63de184/statsmodels-0.14.6.tar.gz", hash = "sha256:4d17873d3e607d398b85126cd4ed7aad89e4e9d89fc744cdab1af3189a996c2a", size = 20689085, upload-time = "2025-12-05T23:08:39.522Z" } wheels = [ @@ -4239,33 +4239,33 @@ wheels = [ [[package]] name = "timely-beliefs" -version = "3.5.5" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "isodate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "openturns", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pandas", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "properscoring", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "psycopg2-binary", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pytz", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, - { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and sys_platform == 'darwin') or (python_full_version >= '3.12' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, - { name = "sqlalchemy", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "importlib-metadata", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "isodate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "openturns", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pandas", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "properscoring", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "psycopg2-binary", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pytz", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform == 'win32')" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and sys_platform == 'win32')" }, + { name = "sqlalchemy", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/bb/9369de8f0af17b9063c70073cb63b4d6d32d2ac16105ad1967cce1e393e2/timely_beliefs-3.5.5.tar.gz", hash = "sha256:c165db5e92fb3557296b6dbfb9b526de27729f6bb5b23b1b4d65ea1b407216d5", size = 793855, upload-time = "2026-05-04T15:10:38.682Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/5d/575138165ff06550b32279bb618062e6bbc7340fdc9a75d3bf122f3eea79/timely_beliefs-4.0.0.tar.gz", hash = "sha256:5283e9fbb1cf44bc5aac0ae20f0f674dcab61a88c94abd309c40dd270fd6c74c", size = 798670, upload-time = "2026-07-06T08:15:17.216Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/76/2032d023b3540f4cbeb3fe0fa45f1c50b036ab30beaeb0bf8257042b0d7c/timely_beliefs-3.5.5-py2.py3-none-any.whl", hash = "sha256:bb09c96ddc10b7ccd4520395acd29df7737ba79ed65ce1c8335cd03d98ba0c31", size = 807541, upload-time = "2026-05-04T15:10:36.885Z" }, + { url = "https://files.pythonhosted.org/packages/05/e0/b88e0321c25d77513fafbc59581829c18747de7822513f8c9ed21343725d/timely_beliefs-4.0.0-py2.py3-none-any.whl", hash = "sha256:92063d9c03eca9fefa2369b570d8b7cc001f332a389110e59bc594224becf495", size = 813681, upload-time = "2026-07-06T08:15:15.265Z" }, ] [package.optional-dependencies] forecast = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "sktime", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "sktime", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] [[package]] @@ -4273,7 +4273,7 @@ name = "times" version = "0.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "arrow", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "arrow", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/41/be/ec94886bf2540dca5c120950b290f6b4aa42c35476d4a82aefb19de0ebe9/times-0.7.tar.gz", hash = "sha256:ed9da7bd0384ff4e1b3fc84114c27c2e3987072dbaf24425340bfedd405bc4b5", size = 4228, upload-time = "2014-08-24T06:13:25.293Z" } wheels = [ @@ -4285,10 +4285,10 @@ name = "tldextract" version = "5.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "idna", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "requests-file", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "filelock", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "idna", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "requests", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "requests-file", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/65/7b/644fbbb49564a6cb124a8582013315a41148dba2f72209bba14a84242bf0/tldextract-5.3.1.tar.gz", hash = "sha256:a72756ca170b2510315076383ea2993478f7da6f897eef1f4a5400735d5057fb", size = 126105, upload-time = "2025-12-28T23:58:05.532Z" } wheels = [ @@ -4339,7 +4339,7 @@ name = "typeguard" version = "4.5.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/67/1c/dfba5c4633cafc4c701f237d2ba63b416805047fd6d96aab4cfc40969f98/typeguard-4.5.2.tar.gz", hash = "sha256:5a16dcac23502039299c97c8941651bc33d7ea8cc4b2f7d6bbb1b528f6eea423", size = 80240, upload-time = "2026-05-14T12:59:40.857Z" } wheels = [ @@ -4351,7 +4351,7 @@ name = "types-cffi" version = "2.0.0.20260518" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "types-setuptools", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "types-setuptools", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bd/0b/b352742758a6054d1053783887bf8cfb739deda1102fda8722294bdc01f7/types_cffi-2.0.0.20260518.tar.gz", hash = "sha256:f9707e66c13454789a58f8843d1ded4a66f1e9c8b10bd24d5eb5e0f25c0c5472", size = 17790, upload-time = "2026-05-18T06:06:50.672Z" } wheels = [ @@ -4372,9 +4372,9 @@ name = "types-flask" version = "1.1.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "types-click", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-jinja2", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-werkzeug", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "types-click", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-jinja2", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-werkzeug", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/79/65/728a104973133a45fba50f3d1e1ee832287666ac74cfd47004cea8402ea3/types-Flask-1.1.6.tar.gz", hash = "sha256:aac777b3abfff9436e6b01f6d08171cf23ea6e5be71cbf773aaabb1c5763e9cf", size = 9829, upload-time = "2021-11-26T06:21:31.199Z" } wheels = [ @@ -4386,7 +4386,7 @@ name = "types-jinja2" version = "2.11.9" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "types-markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "types-markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/46/c4/b82309bfed8195de7997672deac301bd6f5bd5cbb6a3e392b7fe780d7852/types-Jinja2-2.11.9.tar.gz", hash = "sha256:dbdc74a40aba7aed520b7e4d89e8f0fe4286518494208b35123bcf084d4b8c81", size = 13302, upload-time = "2021-11-26T06:21:17.496Z" } wheels = [ @@ -4407,8 +4407,8 @@ name = "types-pyopenssl" version = "24.1.0.20240722" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-cffi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-cffi", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/93/29/47a346550fd2020dac9a7a6d033ea03fccb92fa47c726056618cc889745e/types-pyOpenSSL-24.1.0.20240722.tar.gz", hash = "sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39", size = 8458, upload-time = "2024-07-22T02:32:22.558Z" } wheels = [ @@ -4447,8 +4447,8 @@ name = "types-redis" version = "4.6.0.20241004" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "types-pyopenssl", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "types-pyopenssl", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/3a/95/c054d3ac940e8bac4ca216470c80c26688a0e79e09f520a942bb27da3386/types-redis-4.6.0.20241004.tar.gz", hash = "sha256:5f17d2b3f9091ab75384153bfa276619ffa1cf6a38da60e10d5e6749cc5b902e", size = 49679, upload-time = "2024-10-04T02:43:59.224Z" } wheels = [ @@ -4460,7 +4460,7 @@ name = "types-requests" version = "2.33.0.20260518" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "urllib3", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "urllib3", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/01/c5a19253fe1ac159159ddf9a3a07cec8bb5e486ec4d9002ad2821da0e5d2/types_requests-2.33.0.20260518.tar.gz", hash = "sha256:df7bd3bfe0ca8402dfb841e7d9be714bb5578203283d66d7dc4ef69343449a5e", size = 24752, upload-time = "2026-05-18T06:07:37.966Z" } wheels = [ @@ -4490,7 +4490,7 @@ name = "types-tzlocal" version = "5.1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "types-pytz", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "types-pytz", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/cf/e4d446e57c0b14ed1da4de180d2a4cac773b667f183e83bdad76ea6e2238/types-tzlocal-5.1.0.1.tar.gz", hash = "sha256:b84a115c0c68f0d0fa9af1c57f0645eeef0e539147806faf1f95ac3ac01ce47b", size = 3549, upload-time = "2023-10-24T02:15:07.127Z" } wheels = [ @@ -4520,7 +4520,7 @@ name = "typing-inspection" version = "0.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "typing-extensions", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ @@ -4541,9 +4541,9 @@ name = "uniplot" version = "0.23.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "readchar", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "readchar", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/24/bc/61055938caab2c3b8fc24ff515dfbd07bdd6583877b2ebdb003df6204f55/uniplot-0.23.0.tar.gz", hash = "sha256:ec7b78c85e7c7a130fda0570369f8f3a0bf8b9519f105e2469e0f449f798cbbc", size = 42942, upload-time = "2026-06-21T07:24:38.343Z" } wheels = [ @@ -4606,9 +4606,9 @@ name = "webargs" version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "marshmallow", version = "3.26.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "marshmallow", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/37/64/17afc4e6f47eef154a553c6e56adcc9f1ac3003305c7df978d11aa62937e/webargs-8.7.1.tar.gz", hash = "sha256:799bf9039c76c23fd8dc1951107a75a9e561203c15d6ae8f89c1e46e234636c1", size = 97351, upload-time = "2025-10-29T16:07:50.066Z" } wheels = [ @@ -4620,11 +4620,11 @@ name = "webauthn" version = "2.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cbor2", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "cryptography", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyasn1", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyasn1-modules", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyopenssl", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cbor2", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "cryptography", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyasn1", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyasn1-modules", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyopenssl", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/aa/5c/8ad4e9c8e2eb97f434f74058ff7de955aa47e255ab549d7381c80262318e/webauthn-2.8.0.tar.gz", hash = "sha256:cb3a49abbddb3a757e60c58f8b2b10ca20ef451935b97dfd7e9beedaabff7b10", size = 134197, upload-time = "2026-06-13T03:05:02.148Z" } wheels = [ @@ -4636,7 +4636,7 @@ name = "werkzeug" version = "3.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" } wheels = [ @@ -4648,10 +4648,10 @@ name = "workalendar" version = "17.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "convertdate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "lunardate", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pyluach", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "python-dateutil", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "convertdate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "lunardate", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "pyluach", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, + { name = "python-dateutil", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a7/16/e2d59c5a3b2d01519778dc1820daab70054022d88ff8291df602b2620481/workalendar-17.0.0.tar.gz", hash = "sha256:b82d6024aed452505b01baf06dbe8d6309a3135ff1d39dee07c31b21ece853b4", size = 153468, upload-time = "2023-01-01T22:33:06.471Z" } @@ -4664,7 +4664,7 @@ name = "wtforms" version = "3.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "markupsafe", marker = "(os_name != 'nt' and sys_platform == 'darwin') or (os_name != 'nt' and sys_platform == 'linux') or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e9/91/ed9b517da898e3fb747566aa3c12a734bd64ea7449a0d25ec74ce8f8b8eb/wtforms-3.2.2.tar.gz", hash = "sha256:7b00c73f8670f35d4edb0293dcd81b980528bee72fd662b182aaba27ae570b93", size = 139583, upload-time = "2026-05-03T05:53:44.147Z" } wheels = [ @@ -4676,17 +4676,17 @@ name = "xarray" version = "2025.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'linux'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin')", + "python_full_version < '3.11' and os_name == 'win' and sys_platform == 'darwin'", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'darwin'", "(python_full_version < '3.11' and os_name == 'nt' and sys_platform == 'win32') or (python_full_version < '3.11' and os_name == 'win' and sys_platform == 'win32')", "python_full_version < '3.11' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, - { name = "pandas", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version < '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185, upload-time = "2025-06-12T03:04:09.099Z" } wheels = [ @@ -4698,14 +4698,14 @@ name = "xarray" version = "2026.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "(python_full_version >= '3.12' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux')", - "(python_full_version == '3.11.*' and os_name == 'nt' and sys_platform == 'linux') or (python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux')", + "python_full_version >= '3.12' and os_name == 'win' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and os_name == 'win' and sys_platform == 'linux'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'linux'", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version >= '3.12' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin')", - "(python_full_version == '3.11.*' and os_name == 'nt' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin')", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version >= '3.12' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and os_name == 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", "python_full_version >= '3.12' and os_name != 'nt' and os_name != 'win' and platform_machine != 'x86_64' and sys_platform == 'darwin'", "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and platform_machine == 'x86_64' and sys_platform == 'darwin'", @@ -4716,9 +4716,9 @@ resolution-markers = [ "python_full_version == '3.11.*' and os_name != 'nt' and os_name != 'win' and sys_platform == 'win32'", ] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "packaging", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, - { name = "pandas", marker = "(python_full_version >= '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.11' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "packaging", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "pandas", marker = "(python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.11' and os_name != 'nt' and sys_platform == 'linux') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } wheels = [ From ccfabc8bf3c620214371c81b299367e944ff8d09 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Mon, 6 Jul 2026 10:45:02 +0200 Subject: [PATCH 18/18] refactor: flake8 complained about complexity Signed-off-by: F.N. Claessen --- flexmeasures/data/models/time_series.py | 54 ++++++++++++++----------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index e1fe163d9a..6a3b02a10e 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -905,6 +905,36 @@ def __init__( tb_utils.remove_class_init_kwargs(tb.TimedBeliefDBMixin, kwargs) db.Model.__init__(self, **kwargs) + @classmethod + def _get_mview_kwargs( + cls, use_materialized_view: bool, include_live_tail: bool | None + ) -> dict: + """Decide whether the most recent beliefs may be looked up in the materialized view, + which requires the view to exist (checked once at startup) and to have been + recently refreshed (as recorded in the latest_task_run table). + Events starting after the cutoff are looked up in the beliefs table instead, + so they are not missed even if they were recorded after the view's last refresh. + """ + if not use_materialized_view: + return dict(use_materialized_view=False) + + from flexmeasures.data import config as data_config + from flexmeasures.data.services.materialized_views import get_mview_cutoff + + mview_cutoff = get_mview_cutoff() + if data_config.most_recent_beliefs_mview is None or mview_cutoff is None: + return dict(use_materialized_view=False) + + if include_live_tail is None: + include_live_tail = current_app.config[ + "FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL" + ] + return dict( + use_materialized_view=True, + most_recent_beliefs_mview=data_config.most_recent_beliefs_mview, + mview_cutoff=mview_cutoff if include_live_tail else None, + ) + @classmethod def search( cls, @@ -1009,29 +1039,7 @@ def search( most_recent_events_only=most_recent_events_only, ) - # Decide whether the most recent beliefs may be looked up in the materialized view, - # which requires the view to exist (checked once at startup) and to have been - # recently refreshed (as recorded in the latest_task_run table). - # Events starting after the cutoff are looked up in the beliefs table instead, - # so they are not missed even if they were recorded after the view's last refresh. - mview_kwargs: dict = dict(use_materialized_view=False) - if use_materialized_view: - from flexmeasures.data import config as data_config - from flexmeasures.data.services.materialized_views import get_mview_cutoff - - mview_cutoff = get_mview_cutoff() - if data_config.most_recent_beliefs_mview is not None and ( - mview_cutoff is not None - ): - if include_live_tail is None: - include_live_tail = current_app.config[ - "FLEXMEASURES_MVIEW_ALWAYS_INCLUDE_LIVE_TAIL" - ] - mview_kwargs = dict( - use_materialized_view=True, - most_recent_beliefs_mview=data_config.most_recent_beliefs_mview, - mview_cutoff=mview_cutoff if include_live_tail else None, - ) + mview_kwargs = cls._get_mview_kwargs(use_materialized_view, include_live_tail) bdf_dict = {} for sensor in sensors: