annular.market.tulipa.build_model ================================= .. py:module:: annular.market.tulipa.build_model .. autoapi-nested-parse:: Build a TulipaEnergy model with bids. Attributes ---------- .. autoapisummary:: annular.market.tulipa.build_model.logger annular.market.tulipa.build_model.TABLES_TO_MODIFY Functions --------- .. autoapisummary:: annular.market.tulipa.build_model.validate_input_data annular.market.tulipa.build_model.execute annular.market.tulipa.build_model.read_csv_folder annular.market.tulipa.build_model.convert_bids_table annular.market.tulipa.build_model.define_bid_manager annular.market.tulipa.build_model.insert_bids_into_assets annular.market.tulipa.build_model.insert_bids_into_flows annular.market.tulipa.build_model.insert_bids_into_profiles annular.market.tulipa.build_model.add_bid_loops annular.market.tulipa.build_model.insert_bid_profiles_into_rep_periods annular.market.tulipa.build_model.build_model_with_bids annular.market.tulipa.build_model.postprocess_tulipa_model Module Contents --------------- .. py:data:: logger .. py:data:: TABLES_TO_MODIFY :value: ['profiles_rep_periods', 'rep_periods_data', 'year_data', 'asset', 'asset_milestone',... .. py:function:: validate_input_data(con: _duckdb.DuckDBPyConnection) -> None Validate input data for using TulipaEnergyModel as market model. .. py:function:: execute(con: _duckdb.DuckDBPyConnection, query: str, params: dict[str, Any]) -> None Execute duckdb query with parameters. Filters a dictionary of parameters based on occurrence of the key in the query string. .. py:function:: read_csv_folder(con: _duckdb.DuckDBPyConnection, input_data_folder: pathlib.Path) -> None Read csv files in a folder into a duckdb connection. .. py:function:: convert_bids_table(con: duckdb.DuckDBPyConnection) -> None Convert annular_bids to bids. .. py:function:: define_bid_manager(con: duckdb.DuckDBPyConnection) -> str Select a consumer as bid manager. :param con: connection to database containing data for TulipaEnergyModel. .. rubric:: Notes We assume that all bids are attached to a single consumer, and that it doesn't matter which one. In other words, it is always possible to "move" energy around independent of which consumer is the bid manager. This is particularly important in the case of supply bids. If the total bid is negative (i.e., a net supply), then we assume that the bid-manager has the possibility of supplying the excess energy to the rest of grid. This consumer acts like a "Bid Manager" For reproducibility, ORDER BY asset makes sure that for the same input data, the same asset is chosen as the bid manager. .. py:function:: insert_bids_into_assets(con: duckdb.DuckDBPyConnection, year: int, num_timesteps: int) -> None Insert bids and constraints into asset tables. .. py:function:: insert_bids_into_flows(con: duckdb.DuckDBPyConnection, year: int, bid_manager: str) -> None Insert bids into flow tables. .. py:function:: insert_bids_into_profiles(con: duckdb.DuckDBPyConnection, year: int) -> None Insert bids into profiles tables. .. py:function:: add_bid_loops(con: duckdb.DuckDBPyConnection, year: int) -> None Add loops for the bids/UC trick for the demand bids. .. py:function:: insert_bid_profiles_into_rep_periods(con: duckdb.DuckDBPyConnection, num_timesteps: int, year: int, timestep_start: int) -> None Create complete profiles for the bids. .. rubric:: Notes We assume that the bids always have the format YYYY-MM-DD HH:mm:SS and we ignore everything except HH. .. py:function:: build_model_with_bids(config: annular.market.tulipa.config._TulipaConfig) -> Tuple[str, int] Build tulipa energy model with bids. Extend TulipaEnergyModel defined in `config.input_data_folder` by adding satellite bids. :param config: `_TulipaConfig` with configuration data. .. py:function:: postprocess_tulipa_model(db_path: pathlib.Path | str, bid_manager: str, timestep_start: int) -> None Postprocess results from TulipaEnergyModel.