My mistake. For some reason, the snapshot coordinate was not a datetime64 data type in the Linopy model that I had initiated. I tried your command in another setup and it works fine.
In that case, to implement a month-dependent constraint (perhaps, others would find it useful):
lhs = p.groupby(ds_months).sum()
Define right-hand side:
snapshot = np.arange(1,13)
limit = np.arange(1,13)
data_array = xr.DataArray(
data=limit,
dims = ["snapshot"],
coords = dict(snapshot=snapshot),
attrs = dict(description="monthly_limit",units="")
)
Add constraint:
n.model.add_constraints(lhs <= rhs, name="hydro monthly upper bound")
Output:
Constraint `hydro monthly upper bound` (snapshot: 8772) - 8760 masked entries
-------------------------------------------------------------------------------
[1]: 1.0 StorageUnit-p_dispatch[2015-01-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-01-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-01-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-01-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-01-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-01-31 23:00:00+00:00, hydro] <= 1.0
[2]: 1.0 StorageUnit-p_dispatch[2015-02-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-02-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-02-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-02-28 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-02-28 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-02-28 23:00:00+00:00, hydro] <= 2.0
[3]: 1.0 StorageUnit-p_dispatch[2015-03-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-03-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-03-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-03-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-03-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-03-31 23:00:00+00:00, hydro] <= 3.0
[4]: 1.0 StorageUnit-p_dispatch[2015-04-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-04-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-04-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-04-30 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-04-30 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-04-30 23:00:00+00:00, hydro] <= 4.0
[5]: 1.0 StorageUnit-p_dispatch[2015-05-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-05-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-05-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-05-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-05-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-05-31 23:00:00+00:00, hydro] <= 5.0
[6]: 1.0 StorageUnit-p_dispatch[2015-06-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-06-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-06-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-06-30 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-06-30 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-06-30 23:00:00+00:00, hydro] <= 6.0
[7]: 1.0 StorageUnit-p_dispatch[2015-07-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-07-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-07-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-07-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-07-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-07-31 23:00:00+00:00, hydro] <= 7.0
[8]: 1.0 StorageUnit-p_dispatch[2015-08-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-08-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-08-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-08-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-08-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-08-31 23:00:00+00:00, hydro] <= 8.0
[9]: 1.0 StorageUnit-p_dispatch[2015-09-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-09-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-09-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-09-30 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-09-30 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-09-30 23:00:00+00:00, hydro] <= 9.0
[10]: 1.0 StorageUnit-p_dispatch[2015-10-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-10-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-10-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-10-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-10-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-10-31 23:00:00+00:00, hydro] <= 10.0
[11]: 1.0 StorageUnit-p_dispatch[2015-11-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-11-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-11-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-11-30 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-11-30 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-11-30 23:00:00+00:00, hydro] <= 11.0
[12]: 1.0 StorageUnit-p_dispatch[2015-12-01 00:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-12-01 01:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-12-01 02:00:00+00:00, hydro] ... 1.0 StorageUnit-p_dispatch[2015-12-31 21:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-12-31 22:00:00+00:00, hydro] + 1.0 StorageUnit-p_dispatch[2015-12-31 23:00:00+00:00, hydro] <= 12.0