diff --git a/src/calliope/backend/latex_backend_model.py b/src/calliope/backend/latex_backend_model.py index 0256af5a..651be3cb 100644 --- a/src/calliope/backend/latex_backend_model.py +++ b/src/calliope/backend/latex_backend_model.py @@ -11,6 +11,7 @@ import jinja2 import numpy as np +import pandas as pd import xarray as xr from calliope.backend import backend_model, parsing @@ -424,11 +425,13 @@ def add_parameter( # noqa: D102, override "math_repr": rf"\textit{{{parameter_name}}}" + self._dims_to_var_string(parameter_values), } + if pd.notna(default): + attrs["default"] = default self._add_to_dataset(parameter_name, parameter_values, "parameters", attrs) def add_constraint( # noqa: D102, override - self, name: str, constraint_dict: parsing.UnparsedConstraint | None = None + self, name: str, constraint_dict: parsing.UnparsedConstraint ) -> None: equation_strings: list = [] @@ -488,7 +491,7 @@ def _constraint_setter(where: xr.DataArray, references: set) -> xr.DataArray: ) def add_global_expression( # noqa: D102, override - self, name: str, expression_dict: parsing.UnparsedExpression | None = None + self, name: str, expression_dict: parsing.UnparsedExpression ) -> None: equation_strings: list = [] @@ -515,7 +518,7 @@ def _expression_setter( ) def add_variable( # noqa: D102, override - self, name: str, variable_dict: parsing.UnparsedVariable | None = None + self, name: str, variable_dict: parsing.UnparsedVariable ) -> None: domain_dict = {"real": r"\mathbb{R}\;", "integer": r"\mathbb{Z}\;"} bound_refs: set = set() @@ -544,7 +547,7 @@ def _variable_setter(where: xr.DataArray, references: set) -> xr.DataArray: ) def add_objective( # noqa: D102, override - self, name: str, objective_dict: parsing.UnparsedObjective | None = None + self, name: str, objective_dict: parsing.UnparsedObjective ) -> None: sense_dict = { "minimize": r"\min{}", diff --git a/tests/conftest.py b/tests/conftest.py index 55373c78..6719e299 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -289,9 +289,13 @@ def dummy_model_data(config_defaults, model_defaults): "all_nan": np.nan, "with_inf": 100, "only_techs": 5, + "no_dims": 0, **model_defaults, } ) + # This value is set on the parameter directly to ensure it finds its way through to the LaTex math. + model_data.no_dims.attrs["default"] = 0 + model_data.attrs["math"] = AttrDict( {"constraints": {}, "variables": {}, "global_expressions": {}, "objectives": {}} ) diff --git a/tests/test_backend_latex_backend.py b/tests/test_backend_latex_backend.py index 0b6220a4..f2730f4e 100644 --- a/tests/test_backend_latex_backend.py +++ b/tests/test_backend_latex_backend.py @@ -383,6 +383,8 @@ def test_create_obj_list(self, dummy_latex_backend_model): \begin{itemize} \item expr \end{itemize} + + \textbf{Default}: 0 \end{document}""" ), ), @@ -421,6 +423,8 @@ def test_create_obj_list(self, dummy_latex_backend_model): **Used in**: * expr + + **Default**: 0 """ ), ), @@ -454,6 +458,8 @@ def test_create_obj_list(self, dummy_latex_backend_model): **Used in**: * [expr](#expr) + + **Default**: 0 """ ), ), @@ -589,6 +595,8 @@ def test_generate_math_doc_mkdocs_features_admonition(self, dummy_model_data): ??? info "Used in" * [expr](#expr) + + **Default**: 0 """ )