{"id":32959,"name":"ETSource","description":"Contains the data used by Quintel energy transition modelling applications, allowing you to explore possible future energy systems for your country, region or municipality.","url":"https://github.com/quintel/etsource","last_synced_at":"2026-04-07T05:00:54.783Z","repository":{"id":964220,"uuid":"2504560","full_name":"quintel/etsource","owner":"quintel","description":"Data source of the Energy Transition Model","archived":false,"fork":false,"pushed_at":"2026-03-24T12:20:28.000Z","size":244213,"stargazers_count":18,"open_issues_count":96,"forks_count":9,"subscribers_count":17,"default_branch":"master","last_synced_at":"2026-03-30T01:24:43.488Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://energytransitionmodel.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quintel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2011-10-03T12:58:51.000Z","updated_at":"2026-03-23T12:46:37.000Z","dependencies_parsed_at":"2023-09-22T15:50:40.845Z","dependency_job_id":"60d0de2e-75c3-4b16-b7b4-ed03a5448b15","html_url":"https://github.com/quintel/etsource","commit_stats":{"total_commits":10180,"total_committers":74,"mean_commits":"137.56756756756758","dds":0.8714145383104126,"last_synced_commit":"05009846b0ba313e9cdbe11afb17595366e294b7"},"previous_names":[],"tags_count":104,"template":false,"template_full_name":null,"purl":"pkg:github/quintel/etsource","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel","download_url":"https://codeload.github.com/quintel/etsource/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31238232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-31T09:14:28.471Z","status":"ssl_error","status_checked_at":"2026-03-31T09:14:19.506Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"quintel","name":"Quintel","uuid":"2242291","kind":"organization","description":"","email":"info@quintel.com","website":"quintel.com","location":"Amsterdam","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/2242291?v=4","repositories_count":44,"last_synced_at":"2024-04-12T01:02:20.645Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/quintel","funding_links":[],"total_stars":121,"followers":7,"following":0,"created_at":"2022-11-02T21:24:44.845Z","updated_at":"2024-04-12T01:02:42.714Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quintel/repositories"},"packages":[],"commits":{"id":1344241,"full_name":"quintel/etsource","default_branch":"master","total_commits":10718,"total_committers":74,"total_bot_commits":16,"total_bot_committers":1,"mean_commits":144.83783783783784,"dds":0.8778690054114574,"past_year_total_commits":451,"past_year_total_committers":9,"past_year_total_bot_commits":3,"past_year_total_bot_committers":1,"past_year_mean_commits":50.111111111111114,"past_year_dds":0.5498891352549888,"last_synced_at":"2026-04-05T04:09:19.336Z","last_synced_commit":"faefa9e7407d123f004d99c23028ebd4a1335ae3","created_at":"2023-09-12T09:32:18.753Z","updated_at":"2026-04-05T04:02:13.471Z","committers":[{"name":"Chael Kruip","email":"chael.kruip@quintel.com","login":"ChaelKruip","count":1309},{"name":"Michiel den Haan","email":"michiel.denhaan@quintel.com","login":"michieldenhaan","count":1245},{"name":"marliekeverweij","email":"marlieke.verweij@quintel.com","login":"marliekeverweij","count":1088},{"name":"Mathijs Bijkerk","email":"mathijs.bijkerk@quintel.com","login":"mabijkerk","count":1006},{"name":"Anthony Williams","email":"hi@antw.io","login":"antw","count":825},{"name":"Rob Terwel","email":"rob.terwel@quintel.com","login":null,"count":505},{"name":"Kyra de Haan","email":"kyra.dehaan@quintel.com","login":"kndehaan","count":398},{"name":"Wouter van Lelyveld","email":"wouter.vanlelyveld@quintel.com","login":null,"count":376},{"name":"Joris Berkhout","email":"joris.berkhout@quintel.com","login":"jorisberkhout","count":336},{"name":"Kas Kranenburg","email":"kas.kranenburg@quintel.com","login":"kaskranenburgQ","count":329},{"name":"Roos de Kok","email":"roos.dekok@quintel.com","login":"redekok","count":301},{"name":"Dorine van der Vlies","email":"dorine.vandervlies@quintel.com","login":"DorinevanderVlies","count":267},{"name":"Sebi Burkhard","email":"sebi.burkhard@gmail.com","login":"hasclass","count":262},{"name":"Mart Lubben","email":"mart.lubben@quintel.com","login":"MartLubben","count":202},{"name":"Alexander Wirtz","email":"alexander.wirtz@quintel.com","login":"AlexanderWirtz","count":189},{"name":"Dennis Schoenmakers","email":"dennis.schoenmakers@quintel.com","login":"dennisquintel","count":188},{"name":"Chris","email":"chris.laumans@quintel.com","login":"cjlaumans","count":185},{"name":"Lotte van Vlimmeren","email":"lotte.vanvlimmeren@quintel.com","login":"lottevanvlimmeren","count":168},{"name":"Paolo Zaccagnini","email":"paozac@gmail.com","login":"pzac","count":135},{"name":"noracato","email":"ncschinkel@gmail.com","login":"noracato","count":123},{"name":"Koen van Bemmelen","email":"koen.vanbemmelen@quintel.com","login":"KoenvanB","count":117},{"name":"Charlotte von Meijenfeldt","email":"charlotte.vonmeijenfeldt@quintel.com","login":"Charlottevm","count":105},{"name":"Gerard Westerhof","email":"gerard@grdw.nl","login":null,"count":101},{"name":"markquintel","email":"mark.denheijer@quintel.com","login":"markquintel","count":101},{"name":"Charlotte vm","email":"charlottevm@Charlottes-MacBook-Air.local","login":null,"count":98},{"name":"wmeyers","email":"wouter.meyers@quintel.com","login":"wmeyers","count":92},{"name":"Wouter Terlouw","email":"Admin@QI-MacBook-Air.local","login":null,"count":80},{"name":"Richard Deuchler","email":"richard.deuchler@quintel.com","login":"Richard-Deuchler","count":72},{"name":"Berend Smits","email":"berend.smits@quintel.com","login":"BerendSmits","count":70},{"name":"Wouter Terlouw","email":"wouter.terlouw@quintel.com","login":"wouterterlouw","count":61},{"name":"Kyra de Haan","email":"kyradehaan@Kyras-MacBook-Air.local","login":null,"count":53},{"name":"Nikolay Petrachkov","email":"nikolay.petrachkov@quintel.com","login":null,"count":38},{"name":"claudiavalkenier","email":"claudia.valkenier@quintel.com","login":"claudiavalkenier","count":32},{"name":"Namratha Nair","email":"namratha.nair@quintel.com","login":"nairnamratha","count":29},{"name":"louispt1","email":"louisparkestalbot1@gmail.com","login":"louispt1","count":21},{"name":"Stijn Dellaert","email":"stijn.dellaert@quintel.com","login":"StijnDellaert","count":18},{"name":"Jesse Kerkhoven","email":"jessekerkhoven@zonnet.nl","login":null,"count":17},{"name":"Frans van Camp","email":"fvancamp@xs4all.nl","login":"fvancamp","count":17},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":16},{"name":"Thomas","email":"thomas.hassing@quintel.com","login":"thomas-qah","count":16},{"name":"aaccensi","email":"andreu.accensi@gmail.com","login":"aaccensi","count":10},{"name":"Kas Kranenburg","email":"kaskranenburg@Kass-MacBook-Air.local","login":null,"count":9},{"name":"Peter Lohmann","email":"peter.lohmann@quintel.com","login":null,"count":9},{"name":"Wouter Terlouw","email":"Admin@qi-macbook-air.lan","login":null,"count":9},{"name":"Andre Medeiros","email":"me@andremedeiros.info","login":null,"count":9},{"name":"Max-Kerpel","email":"max.kerpel@quintel.com","login":"Max-Kerpel","count":6},{"name":"Roos de Kok","email":"roosdekok@rooss-air.home","login":null,"count":6},{"name":"Lody","email":"lody.kuling@quintel.com","login":"lodykuling","count":5},{"name":"Tess Colijn","email":"tess.colijn@quintel.com","login":"TessColijn","count":5},{"name":"Charlotte vm","email":"charlottevm@Charlottes-MacBook-Air.fritz.box","login":null,"count":5},{"name":"Roos de Kok","email":"roosdekok@Rooss-MacBook-Air.local","login":null,"count":5},{"name":"Maria Tsagkaraki","email":"maria.tsagkaraki@quintel.com","login":"mariatsagkaraki","count":4},{"name":"JAlsem","email":"jeroen.alsem@quintel.com","login":"JAlsem","count":4},{"name":"Joris Berkhout","email":"jorisberkhout@Joris-Berkhouts-MacBook-Pro-work.local","login":null,"count":4},{"name":"Roos de Kok","email":"roosdekok@192.168.1.97","login":null,"count":4},{"name":"Charlotte vm","email":"charlottevm@Charlottes-Air.lan","login":null,"count":3},{"name":"Charlotte vm","email":"charlottevm@charlottes-air.kpn","login":null,"count":3},{"name":"Gerard Westerhof","email":"gerard.westerhof@quintel.com","login":null,"count":3},{"name":"Joris Berkhout","email":"jorisberkhout@JorisBesMBPwork.fritz.box","login":null,"count":3},{"name":"Peter Lohmann","email":"peter@lohmann-online.info","login":null,"count":3},{"name":"Robert Terwel","email":"robert.terwel@quintel.com","login":null,"count":3},{"name":"Thais Varella","email":"thaisclv@gmail.com","login":null,"count":2},{"name":"Gerard","email":"grdw@protonmail.com","login":"grdw","count":2},{"name":"karel97","email":"88713382+karel97","login":"karel97","count":1},{"name":"bartvisser123","email":"56123728+bartvisser123","login":"bartvisser123","count":1},{"name":"Charlotte vm","email":"charlottevm@13db24d8-f908-464e-b7e5-6ea759418582.fritz.box","login":null,"count":1},{"name":"Charlotte vm","email":"charlottevm@1464aeab-2bc7-44b9-817c-7478fd7145df.fritz.box","login":null,"count":1},{"name":"JonasVoorzanger","email":"jonas.voorzanger@quintel.com","login":null,"count":1},{"name":"Joris Berkhout","email":"jorisberkhout@Joris-Berkhouts-MacBook-Pro-work.fritz.box","login":null,"count":1},{"name":"Michiel den Haan","email":"michieldenhaan@Michiels-MacBook-Air.local","login":null,"count":1},{"name":"Roos de Kok","email":"roosdekok@192.168.1.98","login":null,"count":1},{"name":"Nikolay Petrachkov","email":"nik@jastix.biz","login":"jastix","count":1},{"name":"Nikki Brormann","email":"nikki.brormann@quintel.com","login":"nikkibrormann","count":1},{"name":"Dennis Schoenmakers","email":"dennis@quintel.com","login":"quintel-deploy","count":1}],"past_year_committers":[{"name":"Kyra de Haan","email":"kyra.dehaan@quintel.com","login":"kndehaan","count":203},{"name":"Kas Kranenburg","email":"kas.kranenburg@quintel.com","login":"kaskranenburgQ","count":115},{"name":"Mathijs Bijkerk","email":"mathijs.bijkerk@quintel.com","login":"mabijkerk","count":70},{"name":"claudiavalkenier","email":"claudia.valkenier@quintel.com","login":"claudiavalkenier","count":30},{"name":"louispt1","email":"louisparkestalbot1@gmail.com","login":"louispt1","count":11},{"name":"aaccensi","email":"andreu.accensi@gmail.com","login":"aaccensi","count":10},{"name":"Nora Schinkel","email":"ncschinkel@gmail.com","login":"noracato","count":7},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":3},{"name":"Max-Kerpel","email":"max.kerpel@quintel.com","login":"Max-Kerpel","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-07T00:00:11.408Z","repositories_count":6211415,"commits_count":919688213,"contributors_count":35649931,"owners_count":1142793,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"quintel/etsource","html_url":"https://github.com/quintel/etsource","last_synced_at":"2026-04-03T12:02:35.073Z","status":null,"issues_count":183,"pull_requests_count":561,"avg_time_to_close_issue":19279576.843373492,"avg_time_to_close_pull_request":2505633.2119341563,"issues_closed_count":83,"pull_requests_closed_count":486,"pull_request_authors_count":18,"issue_authors_count":19,"avg_comments_per_issue":1.7650273224043715,"avg_comments_per_pull_request":0.7183600713012478,"merged_pull_requests_count":406,"bot_issues_count":1,"bot_pull_requests_count":17,"past_year_issues_count":51,"past_year_pull_requests_count":111,"past_year_avg_time_to_close_issue":2079615.6875,"past_year_avg_time_to_close_pull_request":1263907.6933333334,"past_year_issues_closed_count":16,"past_year_pull_requests_closed_count":75,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":8,"past_year_avg_comments_per_issue":1.5294117647058825,"past_year_avg_comments_per_pull_request":0.7567567567567568,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":5,"past_year_merged_pull_requests_count":67,"created_at":"2023-09-12T09:33:40.946Z","updated_at":"2026-04-03T12:02:35.074Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/quintel%2Fetsource/issues","issue_labels_count":{"Pinned":75,"Stale":14,"Bugs":11,"Wish list":5,"Molecule graph":2,"Question":2,"Clean Up":2,"Minor issue":1,"Recursive methods":1,"enhancement":1,"Cost methods":1,"Data update":1},"pull_request_labels_count":{"Pinned":26,"dependencies":17,"Stale":9,"ruby":5,"on hold":4,"feature":2,"Bugs":2,"effort:3":2},"issue_author_associations_count":{"CONTRIBUTOR":114,"MEMBER":64,"NONE":5},"pull_request_author_associations_count":{"CONTRIBUTOR":441,"MEMBER":112,"NONE":8},"issue_authors":{"mabijkerk":59,"kaskranenburgQ":46,"kndehaan":30,"DorinevanderVlies":7,"MartLubben":7,"marliekeverweij":6,"noracato":5,"michieldenhaan":4,"MaykThewessen":3,"louispt1":3,"KoenvanB":3,"thomas-qah":3,"aaccensi":1,"sentry-io[bot]":1,"redekok":1,"lottevanvlimmeren":1,"tur-ium":1,"Charlottevm":1,"claudiavalkenier":1},"pull_request_authors":{"kaskranenburgQ":178,"mabijkerk":105,"kndehaan":89,"Charlottevm":57,"KoenvanB":31,"louispt1":28,"dependabot[bot]":17,"Max-Kerpel":14,"claudiavalkenier":10,"redekok":7,"noracato":7,"aaccensi":6,"thomas-qah":3,"lottevanvlimmeren":3,"DorinevanderVlies":2,"antw":2,"marliekeverweij":1,"thesethtruth":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-05T00:00:08.668Z","repositories_count":14079801,"issues_count":34457746,"pull_requests_count":112416839,"authors_count":11225805,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"Pinned":19,"Bugs":1,"Clean Up":1,"enhancement":1,"Stale":1},"past_year_pull_request_labels_count":{"dependencies":5,"ruby":5,"Pinned":4,"Stale":1},"past_year_issue_author_associations_count":{"CONTRIBUTOR":37,"MEMBER":13,"NONE":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":88,"MEMBER":22,"NONE":1},"past_year_issue_authors":{"kaskranenburgQ":18,"kndehaan":15,"mabijkerk":12,"louispt1":2,"aaccensi":1,"claudiavalkenier":1,"noracato":1,"tur-ium":1},"past_year_pull_request_authors":{"kndehaan":30,"kaskranenburgQ":29,"mabijkerk":17,"louispt1":11,"aaccensi":6,"dependabot[bot]":5,"noracato":5,"claudiavalkenier":4,"Max-Kerpel":4},"maintainers":[{"login":"mabijkerk","count":164,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mabijkerk"},{"login":"noracato","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/noracato"}],"active_maintainers":[{"login":"mabijkerk","count":29,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mabijkerk"},{"login":"noracato","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/noracato"}]},"events":{"total":{"ReleaseEvent":1,"DeleteEvent":136,"PullRequestEvent":246,"ForkEvent":1,"IssuesEvent":114,"WatchEvent":4,"IssueCommentEvent":208,"PushEvent":741,"PullRequestReviewEvent":196,"PullRequestReviewCommentEvent":74,"CreateEvent":159},"last_year":{"ReleaseEvent":1,"DeleteEvent":65,"PullRequestEvent":87,"ForkEvent":1,"IssuesEvent":80,"WatchEvent":1,"IssueCommentEvent":97,"PushEvent":409,"PullRequestReviewCommentEvent":26,"PullRequestReviewEvent":74,"CreateEvent":63}},"keywords":[],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-07-09T12:00:39.985Z","updated_at":"2022-07-09T12:00:39.985Z","repository_link":"https://github.com/quintel/etsource/blob/master/Gemfile","dependencies":[{"id":128189936,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":128189937,"package_name":"roo","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":128189938,"package_name":"atlas","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":128189939,"package_name":"rspec","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":128189940,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":128189941,"package_name":"refinery","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":128189942,"package_name":"rubel","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2022-07-09T12:00:40.261Z","updated_at":"2022-07-09T12:00:40.261Z","repository_link":"https://github.com/quintel/etsource/blob/master/Gemfile.lock","dependencies":[{"id":128193604,"package_name":"atlas","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":128193607,"package_name":"refinery","ecosystem":"rubygems","requirements":"0.0.1","direct":false,"kind":"runtime","optional":false},{"id":128193610,"package_name":"rubel","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":128193612,"package_name":"activemodel","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":128193616,"package_name":"activesupport","ecosystem":"rubygems","requirements":"7.0.2.3","direct":false,"kind":"runtime","optional":false},{"id":128193618,"package_name":"axiom-types","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":128193620,"package_name":"coercible","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":128193621,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.9","direct":false,"kind":"runtime","optional":false},{"id":128193623,"package_name":"csv","ecosystem":"rubygems","requirements":"3.2.2","direct":false,"kind":"runtime","optional":false},{"id":128193625,"package_name":"descendants_tracker","ecosystem":"rubygems","requirements":"0.0.4","direct":false,"kind":"runtime","optional":false},{"id":128193627,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.3","direct":false,"kind":"runtime","optional":false},{"id":128193629,"package_name":"equalizer","ecosystem":"rubygems","requirements":"0.0.11","direct":false,"kind":"runtime","optional":false},{"id":128193632,"package_name":"gpgme","ecosystem":"rubygems","requirements":"2.0.20","direct":false,"kind":"runtime","optional":false},{"id":128193634,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":128193635,"package_name":"ice_nine","ecosystem":"rubygems","requirements":"0.11.2","direct":false,"kind":"runtime","optional":false},{"id":128193637,"package_name":"mini_portile2","ecosystem":"rubygems","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":128193640,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.15.0","direct":false,"kind":"runtime","optional":false},{"id":128193642,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.13.1","direct":false,"kind":"runtime","optional":false},{"id":128193643,"package_name":"racc","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":128193645,"package_name":"rake","ecosystem":"rubygems","requirements":"12.3.3","direct":false,"kind":"runtime","optional":false},{"id":128193648,"package_name":"roo","ecosystem":"rubygems","requirements":"2.7.1","direct":false,"kind":"runtime","optional":false},{"id":128193650,"package_name":"rspec","ecosystem":"rubygems","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":128193652,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":128193654,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.8.2","direct":false,"kind":"runtime","optional":false},{"id":128193656,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":128193658,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":128193660,"package_name":"rspec_junit_formatter","ecosystem":"rubygems","requirements":"0.4.1","direct":false,"kind":"runtime","optional":false},{"id":128193662,"package_name":"ruby-graphviz","ecosystem":"rubygems","requirements":"1.2.4","direct":false,"kind":"runtime","optional":false},{"id":128193664,"package_name":"rubyzip","ecosystem":"rubygems","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":128193666,"package_name":"terminal-table","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":128193667,"package_name":"thread_safe","ecosystem":"rubygems","requirements":"0.3.6","direct":false,"kind":"runtime","optional":false},{"id":128193670,"package_name":"turbine-graph","ecosystem":"rubygems","requirements":"0.1.3","direct":false,"kind":"runtime","optional":false},{"id":128193671,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.4","direct":false,"kind":"runtime","optional":false},{"id":128193673,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":128193676,"package_name":"virtus","ecosystem":"rubygems","requirements":"1.0.5","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/stale.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:45:12.630Z","updated_at":"2023-01-13T11:45:12.630Z","repository_link":"https://github.com/quintel/etsource/blob/master/.github/workflows/stale.yml","dependencies":[{"id":6875647060,"package_name":"actions/stale","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]}],"score":9.040263541598666,"created_at":"2023-09-12T07:44:55.534Z","updated_at":"2026-04-07T05:00:54.785Z","avatar_url":"https://github.com/quintel.png","language":"Ruby","category":"Energy Systems","sub_category":"Energy System Modeling Frameworks","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Energy Transition Source\n\n[![Build Status](https://quintel.semaphoreci.com/badges/etsource/branches/master.svg)](https://quintel.semaphoreci.com/projects/etsource)\n\nETSource contains the data used by Quintel applications for modelling energy\ntransition. The files contained herein are a mixture of human-editable\n\"documents\", source files used to do offline calculations with [Atlas][atlas]\nand [Refinery][refinery], and files containing the results of these\ncalculations for use in [ETEngine][etengine].\n\nYou may also wish to view the [Atlas readme][atlas-readme] for information on\nloading the ETSource data in a console, importing data from the old InputExcel\noutput files, or for instructions on exporting data for ETEngine.\n\n## Open Source\n\nETSource is released under the [MIT License](LICENSE.txt).\n\nThe sole exception to this is the **energy balance** in [datasets](datasets).\nThese Energy Balances come from the [IEA][IEA], that does not allow\nredistribution of their data. You may want to purchase this data [with the\nIEA](http://wds.iea.org/WDS/Common/Login/login.aspx) and put it in the appropiate\ndataset directory to have a fully functioning ETSource for that region. You\nwill have to adjust and extend the energy balance with the use of\n[ETDataset][etdataset].\n\nPlease [contact us][contact] when you have questions.\n\n## Setup\n\nPrerequisites:\n- rbenv\n- ruby\n- bundler\n- rspec\n\nThere's no additional setup required for ETSource. There are however optional\narguments you can set in a `.env` file in the root directory of your local\nETSource project. See the `.env.default` which options are available.\n\n## \"Active\" Documents\n\nFiles with an \".ad\" extension are editable through the [Atlas console][console]\nand are used by ETEngine to set up the graph structure. These files typically\ncontain global data which applies to all regions.\n\nIf you prefer, ActiveDocument files can be editted in your favourite text\neditor. Each document is split into two sections: a comments section where\neach line begins with a hash (\"#\"), a section containing attributes values.\n\n```\n# This is the comment section. You can wrap across as many lines as you want,\n# but each one should begin with a hash.\n#\n# Paragraphs are also acceptable.\n\n- use = energetic\n- renewability = 1.0\n\n~ demand = EB(something, something)\n```\n\n#### Comments Section\n\nThe comment section is optional, and should be placed at the top of the\ndocument. When the file is loaded by Atlas, the comment is available as the\n`description` attribute.\n\n```ruby\ndocument.description\n# =\u003e \"String containing the file comment\"\n```\n\n#### Attributes Section\n\nThe attributes section is parsed so that each one is available with a native\nRuby datatype. Attributes are specified with one on each line and preceeded\nwith a dash and space.\n\n```ruby\n# - use = energetic\n# - renewability = 1.0\n\ndocument.use           # =\u003e \"energetic\" (String)\ndocument.renewability  # =\u003e 1.0 (Float)\n```\n\nValues may also be an array of numbers or strings by wrapping each one in\nsquare brackets.\n\n```ruby\n# - range = [1, 2.0, 3, 4.5, 9]\n# - strs  = [a, b, c]\n\ndocument.range  # =\u003e [1, 2.0, 3, 4.5, 9]\ndocument.strs   # =\u003e ['a', 'b', 'c']\n```\n\n##### Multi-line Attributes\n\nAn attribute value may span multiple lines so long as each line is intended\nwith spaces:\n\n```\n- description =\n    Felis catus is your taxonomic nomenclature,\n    An endothermic quadruped, carnivorous by nature;\n    Your visual, olfactory, and auditory senses\n    Contribute to your hunting skills and natural defenses.\n```\n\nThe leading spaces will be trimmed:\n\n```ruby\n# - query =\n#     SUM(\n#       MAX(1, 2),\n#       MAX(3, 4)\n#     )\n\nputs document.query\n\n# SUM(\n#   MAX(1, 2),\n#   MAX(3, 4)\n# )\n```\n\n##### Hashes and Namespaces\n\nYou can specify \"namespaced\" attributes which are converted to hashes in the\nRuby model:\n\n```ruby\n# - efficiency.gas = 0.5\n# - efficiency.electricity = 0.6\n\ndocument.efficiency  # =\u003e { gas: 0.5, electricity: 0.6 }\n\n# - one.two = 2\n# - one.three.four = 4\n\ndocument.one # =\u003e { two: 2, three: { four: 4 } }\n```\n\n##### Dynamic Attributes\n\nAll of the attributes described so far are \"static\" -- they are the same for\nevery region and do not require any extra processing. However some\nattributes, such as the demand of a node, or the share of an edge, may vary\nfrom region-to-region, or depend on external (CSV) sources.\n\nThese values are assigned by writing a query which outputs the desired value.\n\nQueries are prefixed with a `~` instead of the usual `-`, and are followed by\nthe query to be executed:\n\n```ruby\n~ demand =\n    EB(residential, gas) +\n      EB(residential, electricity) +\n      EB(residential, infinite_improbability_drive)\n```\n\nThe values output by queries are used during for Refinery calculations. You\nmay set the following attributes using a query:\n\n* Node: `demand`.\n* Edge: `parent_share`, `child_share`, or `demand`.\n* Slot: `share` (\"conversion\").\n\nSet a slot share by adding an appropriate query in the node document:\n\n```ruby\n~ output.coal = CONVERSION(my_node_outputs, coal)\n```\n\n##### EB(use, carrier)\n\nThe `EB()` function returns the value of a cell from the energy balance data.\nThis data is stored in a CSV file in \"data/energy_balance\". Supply the use\n(the name of a row in the CSV) with a carrier (a column name):\n\n```ruby\nEB(industry, electricity) # =\u003e 140673.72\n```\n\n##### AREA(attribute)\n\nRetrieve a single attribute value from the area data with the `AREA()`\nfunction. The area data is stored in \"data/datasets/:area/:area.ad\".\n\n```ruby\nAREA(coast_line) # =\u003e 451.0\n```\n\n##### SHARE(file_name, attribute)\n\nFiles containing share data (application and technology splits) are found at\n\"data/datasets/:area/shares\". Provide the name of the share file, plus the\ncolumn name, and you'll get the share value:\n\n```ruby\nSHARE(cng, cars) # =\u003e 0.5\n```\n\nCSV files containing shares can be given whatever name you want, but it should\nbe consistent across every region, i.e. if you add a \"cng.csv\" file to\n\"datasets/nl/shares\", then a similar file should be added for the other\nregions also.\n\n##### CENTRAL_PRODUCTION(node_key)\n\nLike CHP data, the energy output of central production nodes is specified in\na separate CSV file. This is at \"data/datasets/:area/central_producers.csv\".\nProvide the node key to retrieve the demand:\n\n```ruby\nCENTRAL_PRODUCTION(energy_power_solar_csp_solar_radiation) # =\u003e 5678.0\n```\n\n##### PRIMARY_PRODUCTION(node_key, attribute)\n\nThe same as `CENTRAL_PRODUCTION` except that it reads from the CSV file at\n\"data/dataset/:area/primary_production.csv\". It also takes an `attribute`\nparameter to identify which column you wish to read.\n\n#### Before Committing...\n\nAfter editing documents by hand, you should run the Atlas validation to ensure\nthat you did not introduce any illegal changes:\n\n```\n$ cd ~/code/atlas\n$ rake validate[../etsource/data]\nOK\n```\n\n#### Special Attributes\n\n##### Node\n\nYou can set a slot share (\"conversion\") for a node like so:\n\n```\n- input.gas = 0.4\n- input.oil = 0.6\n```\n\nThis tells the node that is has two input slots; gas providing 40%, and oil\nproviding 60% of the demanded energy. Swapping \"input\" for \"output\" does the\nsame for output slots.\n\nA special \"elastic\" value will tell the node that this slot should fill up\nwhatever share is required to sum to 1.0:\n\n```\n- output.heat = 0.2\n- output.electricity = 0.5\n- output.loss = elastic\n```\n\nThis node outputs 20% of its energy has heat, and 50% as electricity. The\nelastic slot will therefore take the remaining 30%. A node may not contain\nmore than one elastic input slot, and one elastic output slot.\n\nSlot share may vary depending on the share of the inputs; this is called\n\"carrier efficiency\", and is often used to model converters whose efficiency\nvaries depending on the energy source given to them. In this case, you need\nto provide the efficiency of the slot if the node were to be given 100% of\neach input.\n\n```\n- output.electricity.coal = 0.4\n- output.electricity.biomass = 0.5\n```\n\nThis tells ETSource/Atlas that the \"electricity\" output slot has a share of 0.4\nwhen only coal is given to the node, and a share of 0.5 when only biomass is\ngiven. In reality, your node will likely have a split of inputs; you **must**\nprovide a share for each input:\n\n```\n- input.coal = 0.7\n- input.biomass = 0.3\n- output.electricity.coal = 0.4\n- output.electricity.biomass = 0.5\n- output.loss = elastic\n```\n\n## CSV Documents\n\nThroughout the ETSource repo are \".csv\" files which contain raw data used by\nAtlas for creating the processed files for ETEngine. Many are sourced from\nthird-parties (such as energy-balance data from the IEA), while others are\ncreated by Quintel staff.\n\n## Directory Structure\n\nThe ETSource repository is split into many directories, each containing files\nserving different purposes. Data is either **global** and affects all regions,\nor is **regional** and affects only one area.\n\n#### ./carriers (global)\n\nContains a document for each type of carrier in the Energy Transition Model.\nIn each file is global data specifying how the carrier works, such as whether\nthe energy is infinite in supply.\n\n#### ./datasets (regional)\n\nInside the datasets directory is a subdirectory for each region. Inside each\nof those folders is *regional* data: an ActiveDocument whose name matches the\nfolder. Each also has a \"shares\" subdirectory containing CSVs whose values\nare used by Atlas to set edge shares.\n\n#### ./edges (global)\n\nActiveDocuments; one for each edge (\"link\") between nodes in the graph. Each\nfilename contains the supplier (\"parent\" or \"output\") node, and the consumer\n(\"child\" or \"input\") node, and the name of the carrier in the format:\n`consumer-supplier@carrier`.\n\nEdges are typically organised into subdirectories whose names match the sector\nof the supplier node. This may change in the future, and presently nothing\nwill break if you put an edge in the wrong subdirectory.\n\n#### ./gqueries (global)\n\nActiveDocuments detailing the queries which may be performed on ETEngine by\napplication such as ETModel and ETFlex. The subdirectories have no\nsignificance except to keep things organised.\n\n#### ./inputs (global)\n\nDocuments containing values which may be set on ETEngine by applications like\nETModel. One file per input, and the directories are purely for organisation\nand have no significance.\n\n#### ./nodes (global)\n\nContains documents for nodes. One document per node, organised into\nsubdirectories whose names indicate the sector to which the node belongs.\n\n#### ./presets (global)\n\nContains scenarios completed by QI'ers and notable public figures which can be\nviewed on ETModel.\n\n[atlas]:        https://github.com/quintel/atlas\n[atlas-readme]: https://github.com/quintel/atlas#readme\n[refinery]:     https://github.com/quintel/refinery\n[etengine]:     https://github.com/quintel/etengine\n[etdataset]:    https://github.com/quintel/etdataset\n[console]:      https://github.com/quintel/atlas#using-the-atlas-console\n[IEA]:          http://www.iea.org\n[contact]:      http://quintel.com/contact\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["energy-system","etm","user-interface","backend-api","calculation-engine"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/32959","html_url":"https://ost.ecosyste.ms/projects/32959"}