Comments (10)
Possibly with type comments in YAML? e.g. https://www.python.org/dev/peps/pep-0484/#type-comments
ruamel_yaml can read comments: https://yaml.readthedocs.io/en/stable/detail.html#round-trip-including-comments
from calliope.
Yup, e.g.:
ruamel_yaml.round_trip_load(open('calliope/config/defaults.yaml','r'))['techs']['defaults']['constraints'].ca.items['force_r'][2].value
returns:
'# Forces this technology to use all available ``r``, rather than making it a maximum upper boundary (for production) or minimum lower boundary (for consumption)\n'
We could prepend all comments with types, in this case the output would then be e.g.:
'# type: bool. Forces this technology to use all available ``r``, rather than making it a maximum upper boundary (for production) or minimum lower boundary (for consumption)\n'
Then on loading a model there is a type dictionary, taken from defaults that can be used in the consistency checks
from calliope.
Preference for one of these?
string = '# type: bool. Forces this technology to use all available ``r``, rather than making it a maximum upper boundary (for production) or minimum lower boundary (for consumption)\n
option 1 (requires additional package):
import re
type = re.findall(r'type: (.*)\.', string)
option 2 (will throw up errors if things aren't as expected in string):
type = string.split('type: ', 1)[1].split('.', 1)[0]
from calliope.
I think option 1.
What happens where currently there can be one of several types, e.g. float
or bool
in e_ramping
? Set to 0 instead of False to disable?
from calliope.
Create a list? e.g. type: [False, bool]...
That would allow us to also set a list for e.g. r_unit
of ["power", "energy"] rather than saying it has to be str
from calliope.
I think that's confusing as it suggests that the type is a list. Better to have a type and stick to it. And possibly separately specify allowed options. Maybe adding all this information to the YAML comments is going too far...
from calliope.
True, I guess there could be 'type: str. options: ["power", "energy"]'. Might be going too far, but that's where it should be for reference anyway! It would make the options that much clearer
from calliope.
So the comment format might be something like type: str. options: ["power", "energy"]. description: ...
- this could be parsed, but is starting to look a bit messy, so perhaps a better solution would be to add metadata separately, e.g. via a separate description key for each entry in defaults.yaml, à la e_ramping: ..., e_ramping_metadata: ...
?
from calliope.
Or to have a duplicate of defaults.yaml which is called something like metadata.yaml, in which we can include: type, options, valid technology sets?
from calliope.
Closing as this being worked on now with https://github.com/calliope-project/typedconfig
from calliope.
Related Issues (20)
- Store example notebooks as plain text
- Document AttrDict `_REPLACE_ ` HOT 1
- Requesting v0.7 documentation improvements/fixes HOT 3
- Cannot use IDE schema validator with Calliope model YAML files HOT 1
- `purchased` binary variable isn't linked to `energy_cap` if `energy_cap_max`/`_min`/`_equals` isn't defined
- Cannot define numeric index items when loading tabular data
- Multiple rows and columns introduce false index items HOT 7
- AttrDict sorts keys on union
- Default installation does not have optional dependencies HOT 2
- Allow setting saving of shadow prices for constraints in YAML HOT 2
- Add `title` or `long-name` parameter to math syntax
- Store start and stop time stamps in model results
- Better document and test `operate` mode
- Custom constraints sum() slicing seems to fail inconsistently HOT 1
- adding scenarios and overrides
- Run Calliope multiple times with historic data before generating results HOT 1
- Pyomo v6.7.2 regression: Gurobi Python interface not found HOT 2
- Improve package/version management by moving to pixi
- Change the name of 'tech_groups' to 'tech_class' HOT 3
- Difficult to navigate through the menu HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from calliope.