{"id":19924,"name":"energy-py-linear","description":"Optimizing energy systems using mixed integer linear programming.","url":"https://github.com/ADGEfficiency/energy-py-linear","last_synced_at":"2026-04-20T20:30:20.883Z","repository":{"id":40377770,"uuid":"165930138","full_name":"ADGEfficiency/energy-py-linear","owner":"ADGEfficiency","description":"Optimize energy assets using mixed-integer linear programming","archived":false,"fork":false,"pushed_at":"2026-02-14T13:01:24.000Z","size":5918,"stargazers_count":98,"open_issues_count":2,"forks_count":32,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-13T17:10:11.754Z","etag":null,"topics":["batteries","electric-vehicles","energy","optimization","python","renewable-energy","solar","wind"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ADGEfficiency.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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":"2019-01-15T21:59:41.000Z","updated_at":"2026-04-07T00:37:27.000Z","dependencies_parsed_at":"2024-01-16T05:06:42.549Z","dependency_job_id":"24d166bb-3c39-4347-a70c-1f72e40ee182","html_url":"https://github.com/ADGEfficiency/energy-py-linear","commit_stats":{"total_commits":145,"total_committers":5,"mean_commits":29.0,"dds":"0.19310344827586212","last_synced_commit":"12adfa1a171b0a4b95bcf8d2d5f00a1030296762"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/ADGEfficiency/energy-py-linear","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ADGEfficiency","download_url":"https://codeload.github.com/ADGEfficiency/energy-py-linear/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31941845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":"ADGEfficiency","name":"Adam Green","uuid":"24447881","kind":"user","description":"","email":"","website":"adgefficiency.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/24447881?u=e53b8b16b3d12af8f359c7fc4707da0c027e0fe3\u0026v=4","repositories_count":78,"last_synced_at":"2024-06-11T15:43:25.030Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ADGEfficiency","funding_links":[],"total_stars":750,"followers":191,"following":6,"created_at":"2022-11-14T08:20:51.889Z","updated_at":"2024-06-11T15:43:26.680Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ADGEfficiency","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ADGEfficiency/repositories"},"packages":[],"commits":{"id":1253991,"full_name":"ADGEfficiency/energy-py-linear","default_branch":"main","total_commits":153,"total_committers":5,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":30.6,"dds":0.18300653594771243,"past_year_total_commits":2,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":2.0,"past_year_dds":0.0,"last_synced_at":"2026-04-17T19:01:52.403Z","last_synced_commit":"34dd5df3843447b02d52847379c79299d3a05141","created_at":"2023-03-27T10:49:40.311Z","updated_at":"2026-04-17T19:01:36.669Z","committers":[{"name":"Adam Green","email":"adam.green@adgefficiency.com","login":"ADGEfficiency","count":125},{"name":"Thomas Harvey","email":"tom@alush.co.uk","login":"tomharvey","count":21},{"name":"Sam","email":"sam.mason@protonmail.com","login":"tonyfresko","count":5},{"name":"Ben Freke","email":"benjaminfreke@gmail.com","login":"ben-freke","count":1},{"name":"Adam Green","email":"ubuntu@ip-172-31-22-172.ap-southeast-2.compute.internal","login":null,"count":1}],"past_year_committers":[{"name":"Adam Green","email":"adam.green@adgefficiency.com","login":"ADGEfficiency","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-19T00:00:13.908Z","repositories_count":6214424,"commits_count":900175810,"contributors_count":34915556,"owners_count":1143511,"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":"ADGEfficiency/energy-py-linear","html_url":"https://github.com/ADGEfficiency/energy-py-linear","last_synced_at":"2026-04-01T11:00:27.057Z","status":"error","issues_count":22,"pull_requests_count":70,"avg_time_to_close_issue":9443765.25,"avg_time_to_close_pull_request":1970521.4852941176,"issues_closed_count":20,"pull_requests_closed_count":68,"pull_request_authors_count":5,"issue_authors_count":11,"avg_comments_per_issue":2.409090909090909,"avg_comments_per_pull_request":0.2,"merged_pull_requests_count":66,"bot_issues_count":0,"bot_pull_requests_count":1,"past_year_issues_count":0,"past_year_pull_requests_count":3,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":14081153.5,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":2,"created_at":"2023-05-09T10:38:29.983Z","updated_at":"2026-04-01T11:00:27.057Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ADGEfficiency%2Fenergy-py-linear/issues","issue_labels_count":{},"pull_request_labels_count":{"dependencies":1,"publish":1},"issue_author_associations_count":{"NONE":11,"CONTRIBUTOR":9,"OWNER":2},"pull_request_author_associations_count":{"OWNER":61,"CONTRIBUTOR":8,"NONE":1},"issue_authors":{"tomharvey":8,"rzylius":3,"ADGEfficiency":2,"oopam":2,"peterdudfield":1,"matteodefelice":1,"lucas-vivier-cvegroup":1,"ben-freke":1,"corneels":1,"andreasslyngstad":1,"Minvyd":1},"pull_request_authors":{"ADGEfficiency":61,"tomharvey":6,"tonyfresko":1,"ben-freke":1,"dependabot[bot]":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:10.509Z","repositories_count":14207162,"issues_count":34660469,"pull_requests_count":113258760,"authors_count":11232439,"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":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"OWNER":1},"past_year_issue_authors":{},"past_year_pull_request_authors":{"ADGEfficiency":1},"maintainers":[{"login":"ADGEfficiency","count":63,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ADGEfficiency"}],"active_maintainers":[{"login":"ADGEfficiency","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ADGEfficiency"}]},"events":{"total":{"DeleteEvent":4,"PullRequestEvent":3,"ForkEvent":1,"WatchEvent":11,"IssueCommentEvent":1,"PushEvent":14,"CreateEvent":2},"last_year":{"DeleteEvent":2,"ForkEvent":1,"WatchEvent":6,"PushEvent":2,"CreateEvent":1}},"keywords":["batteries","electric-vehicles","energy","optimization","python","renewable-energy","solar","wind"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/test.yml","sha":null,"kind":"manifest","created_at":"2023-01-31T21:30:22.920Z","updated_at":"2023-01-31T21:30:22.920Z","repository_link":"https://github.com/ADGEfficiency/energy-py-linear/blob/main/.github/workflows/test.yml","dependencies":[{"id":7281501284,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7281501285,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/publish.yml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:15:36.863Z","updated_at":"2023-09-21T19:15:36.863Z","repository_link":"https://github.com/ADGEfficiency/energy-py-linear/blob/main/.github/workflows/publish.yml","dependencies":[{"id":13856556721,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":13856556722,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"docs/requirements.txt","sha":null,"kind":"manifest","created_at":"2023-09-21T19:15:37.067Z","updated_at":"2023-09-21T19:15:37.067Z","repository_link":"https://github.com/ADGEfficiency/energy-py-linear/blob/main/docs/requirements.txt","dependencies":[{"id":13856556723,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"==9.1.6","direct":true,"kind":"runtime","optional":false},{"id":13856556724,"package_name":"mkdocstrings","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556725,"package_name":"markdown-include","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556726,"package_name":"phmdoctest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556727,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556728,"package_name":"pillow","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556729,"package_name":"cairosvg","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":13856556730,"package_name":"mike","ecosystem":"pypi","requirements":"==1.1.2","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"poetry.lock","sha":null,"kind":"lockfile","created_at":"2023-09-21T19:15:37.267Z","updated_at":"2023-09-21T19:15:37.267Z","repository_link":"https://github.com/ADGEfficiency/energy-py-linear/blob/main/poetry.lock","dependencies":[{"id":13856556732,"package_name":"appnope","ecosystem":"pypi","requirements":"0.1.3","direct":false,"kind":"develop","optional":false},{"id":13856556733,"package_name":"asttokens","ecosystem":"pypi","requirements":"2.2.1","direct":false,"kind":"develop","optional":false},{"id":13856556734,"package_name":"attrs","ecosystem":"pypi","requirements":"23.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556735,"package_name":"backcall","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"develop","optional":false},{"id":13856556736,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.12.2","direct":false,"kind":"develop","optional":false},{"id":13856556737,"package_name":"black","ecosystem":"pypi","requirements":"22.12.0","direct":false,"kind":"develop","optional":false},{"id":13856556738,"package_name":"cffi","ecosystem":"pypi","requirements":"1.15.1","direct":false,"kind":"develop","optional":false},{"id":13856556739,"package_name":"click","ecosystem":"pypi","requirements":"8.1.7","direct":false,"kind":"develop","optional":false},{"id":13856556740,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"develop","optional":false},{"id":13856556741,"package_name":"comm","ecosystem":"pypi","requirements":"0.1.4","direct":false,"kind":"develop","optional":false},{"id":13856556742,"package_name":"commonmark","ecosystem":"pypi","requirements":"0.9.1","direct":false,"kind":"runtime","optional":false},{"id":13856556743,"package_name":"contourpy","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":13856556744,"package_name":"coverage","ecosystem":"pypi","requirements":"6.5.0","direct":false,"kind":"develop","optional":false},{"id":13856556745,"package_name":"coverage-badge","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556746,"package_name":"cycler","ecosystem":"pypi","requirements":"0.11.0","direct":false,"kind":"runtime","optional":false},{"id":13856556747,"package_name":"darglint","ecosystem":"pypi","requirements":"1.8.1","direct":false,"kind":"develop","optional":false},{"id":13856556748,"package_name":"debugpy","ecosystem":"pypi","requirements":"1.6.7.post1","direct":false,"kind":"develop","optional":false},{"id":13856556749,"package_name":"decorator","ecosystem":"pypi","requirements":"5.1.1","direct":false,"kind":"develop","optional":false},{"id":13856556750,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.1.3","direct":false,"kind":"develop","optional":false},{"id":13856556751,"package_name":"execnet","ecosystem":"pypi","requirements":"2.0.2","direct":false,"kind":"develop","optional":false},{"id":13856556752,"package_name":"executing","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"develop","optional":false},{"id":13856556753,"package_name":"fastjsonschema","ecosystem":"pypi","requirements":"2.18.0","direct":false,"kind":"develop","optional":false},{"id":13856556754,"package_name":"flake8","ecosystem":"pypi","requirements":"6.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556755,"package_name":"flake8-docstring-checker","ecosystem":"pypi","requirements":"1.2","direct":false,"kind":"develop","optional":false},{"id":13856556756,"package_name":"fonttools","ecosystem":"pypi","requirements":"4.42.1","direct":false,"kind":"runtime","optional":false},{"id":13856556757,"package_name":"hypothesis","ecosystem":"pypi","requirements":"6.82.6","direct":false,"kind":"develop","optional":false},{"id":13856556758,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"develop","optional":false},{"id":13856556759,"package_name":"ipykernel","ecosystem":"pypi","requirements":"6.25.1","direct":false,"kind":"develop","optional":false},{"id":13856556760,"package_name":"ipython","ecosystem":"pypi","requirements":"8.14.0","direct":false,"kind":"develop","optional":false},{"id":13856556761,"package_name":"isort","ecosystem":"pypi","requirements":"5.12.0","direct":false,"kind":"develop","optional":false},{"id":13856556762,"package_name":"jedi","ecosystem":"pypi","requirements":"0.19.0","direct":false,"kind":"develop","optional":false},{"id":13856556763,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.19.0","direct":false,"kind":"develop","optional":false},{"id":13856556764,"package_name":"jsonschema-specifications","ecosystem":"pypi","requirements":"2023.7.1","direct":false,"kind":"develop","optional":false},{"id":13856556765,"package_name":"jupyter-client","ecosystem":"pypi","requirements":"8.3.0","direct":false,"kind":"develop","optional":false},{"id":13856556766,"package_name":"jupyter-core","ecosystem":"pypi","requirements":"5.3.1","direct":false,"kind":"develop","optional":false},{"id":13856556767,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"1.4.5","direct":false,"kind":"runtime","optional":false},{"id":13856556768,"package_name":"markdown","ecosystem":"pypi","requirements":"3.4.4","direct":false,"kind":"runtime","optional":false},{"id":13856556769,"package_name":"markdown-include","ecosystem":"pypi","requirements":"0.8.1","direct":false,"kind":"runtime","optional":false},{"id":13856556770,"package_name":"matplotlib","ecosystem":"pypi","requirements":"3.7.2","direct":false,"kind":"runtime","optional":false},{"id":13856556771,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"0.1.6","direct":false,"kind":"develop","optional":false},{"id":13856556772,"package_name":"mccabe","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"develop","optional":false},{"id":13856556773,"package_name":"monotable","ecosystem":"pypi","requirements":"3.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556774,"package_name":"multimethod","ecosystem":"pypi","requirements":"1.9.1","direct":false,"kind":"runtime","optional":false},{"id":13856556775,"package_name":"mypy","ecosystem":"pypi","requirements":"0.991","direct":false,"kind":"develop","optional":false},{"id":13856556776,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":13856556777,"package_name":"nbclient","ecosystem":"pypi","requirements":"0.6.8","direct":false,"kind":"develop","optional":false},{"id":13856556778,"package_name":"nbformat","ecosystem":"pypi","requirements":"5.9.2","direct":false,"kind":"develop","optional":false},{"id":13856556779,"package_name":"nbmake","ecosystem":"pypi","requirements":"1.4.3","direct":false,"kind":"develop","optional":false},{"id":13856556780,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"1.5.7","direct":false,"kind":"develop","optional":false},{"id":13856556781,"package_name":"numpy","ecosystem":"pypi","requirements":"1.25.2","direct":false,"kind":"runtime","optional":false},{"id":13856556782,"package_name":"packaging","ecosystem":"pypi","requirements":"23.1","direct":false,"kind":"runtime","optional":false},{"id":13856556783,"package_name":"pandas","ecosystem":"pypi","requirements":"1.5.3","direct":false,"kind":"runtime","optional":false},{"id":13856556784,"package_name":"pandera","ecosystem":"pypi","requirements":"0.14.5","direct":false,"kind":"runtime","optional":false},{"id":13856556785,"package_name":"parso","ecosystem":"pypi","requirements":"0.8.3","direct":false,"kind":"develop","optional":false},{"id":13856556786,"package_name":"pathspec","ecosystem":"pypi","requirements":"0.11.2","direct":false,"kind":"develop","optional":false},{"id":13856556787,"package_name":"pexpect","ecosystem":"pypi","requirements":"4.8.0","direct":false,"kind":"develop","optional":false},{"id":13856556788,"package_name":"phmdoctest","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"develop","optional":false},{"id":13856556789,"package_name":"pickleshare","ecosystem":"pypi","requirements":"0.7.5","direct":false,"kind":"develop","optional":false},{"id":13856556790,"package_name":"pillow","ecosystem":"pypi","requirements":"10.0.0","direct":false,"kind":"runtime","optional":false},{"id":13856556791,"package_name":"platformdirs","ecosystem":"pypi","requirements":"3.10.0","direct":false,"kind":"develop","optional":false},{"id":13856556792,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"develop","optional":false},{"id":13856556793,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"3.0.39","direct":false,"kind":"develop","optional":false},{"id":13856556794,"package_name":"psutil","ecosystem":"pypi","requirements":"5.9.5","direct":false,"kind":"develop","optional":false},{"id":13856556795,"package_name":"ptyprocess","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"develop","optional":false},{"id":13856556796,"package_name":"pulp","ecosystem":"pypi","requirements":"2.7.0","direct":false,"kind":"runtime","optional":false},{"id":13856556797,"package_name":"pure-eval","ecosystem":"pypi","requirements":"0.2.2","direct":false,"kind":"develop","optional":false},{"id":13856556798,"package_name":"pycodestyle","ecosystem":"pypi","requirements":"2.11.0","direct":false,"kind":"develop","optional":false},{"id":13856556799,"package_name":"pycparser","ecosystem":"pypi","requirements":"2.21","direct":false,"kind":"develop","optional":false},{"id":13856556800,"package_name":"pydantic","ecosystem":"pypi","requirements":"1.10.12","direct":false,"kind":"runtime","optional":false},{"id":13856556801,"package_name":"pyflakes","ecosystem":"pypi","requirements":"3.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556802,"package_name":"pygments","ecosystem":"pypi","requirements":"2.16.1","direct":false,"kind":"runtime","optional":false},{"id":13856556803,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.0.9","direct":false,"kind":"runtime","optional":false},{"id":13856556804,"package_name":"pytest","ecosystem":"pypi","requirements":"7.4.0","direct":false,"kind":"develop","optional":false},{"id":13856556805,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"develop","optional":false},{"id":13856556806,"package_name":"pytest-sugar","ecosystem":"pypi","requirements":"0.9.7","direct":false,"kind":"develop","optional":false},{"id":13856556807,"package_name":"pytest-xdist","ecosystem":"pypi","requirements":"3.3.1","direct":false,"kind":"develop","optional":false},{"id":13856556808,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.8.2","direct":false,"kind":"runtime","optional":false},{"id":13856556809,"package_name":"pytz","ecosystem":"pypi","requirements":"2023.3","direct":false,"kind":"runtime","optional":false},{"id":13856556810,"package_name":"pywin32","ecosystem":"pypi","requirements":"306","direct":false,"kind":"develop","optional":false},{"id":13856556811,"package_name":"pyzmq","ecosystem":"pypi","requirements":"25.1.1","direct":false,"kind":"develop","optional":false},{"id":13856556812,"package_name":"referencing","ecosystem":"pypi","requirements":"0.30.2","direct":false,"kind":"develop","optional":false},{"id":13856556813,"package_name":"rich","ecosystem":"pypi","requirements":"12.6.0","direct":false,"kind":"runtime","optional":false},{"id":13856556814,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.9.2","direct":false,"kind":"develop","optional":false},{"id":13856556815,"package_name":"ruff","ecosystem":"pypi","requirements":"0.0.275","direct":false,"kind":"develop","optional":false},{"id":13856556816,"package_name":"seaborn","ecosystem":"pypi","requirements":"0.12.2","direct":false,"kind":"runtime","optional":false},{"id":13856556817,"package_name":"setuptools","ecosystem":"pypi","requirements":"68.1.2","direct":false,"kind":"runtime","optional":false},{"id":13856556818,"package_name":"setuptools-scm","ecosystem":"pypi","requirements":"7.1.0","direct":false,"kind":"runtime","optional":false},{"id":13856556819,"package_name":"six","ecosystem":"pypi","requirements":"1.16.0","direct":false,"kind":"runtime","optional":false},{"id":13856556820,"package_name":"sortedcontainers","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"develop","optional":false},{"id":13856556821,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.4.1","direct":false,"kind":"develop","optional":false},{"id":13856556822,"package_name":"stack-data","ecosystem":"pypi","requirements":"0.6.2","direct":false,"kind":"develop","optional":false},{"id":13856556823,"package_name":"structlog","ecosystem":"pypi","requirements":"23.1.0","direct":false,"kind":"runtime","optional":false},{"id":13856556824,"package_name":"termcolor","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"develop","optional":false},{"id":13856556825,"package_name":"tomli","ecosystem":"pypi","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":13856556826,"package_name":"tornado","ecosystem":"pypi","requirements":"6.3.3","direct":false,"kind":"develop","optional":false},{"id":13856556827,"package_name":"traitlets","ecosystem":"pypi","requirements":"5.9.0","direct":false,"kind":"develop","optional":false},{"id":13856556828,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.7.1","direct":false,"kind":"runtime","optional":false},{"id":13856556829,"package_name":"typing-inspect","ecosystem":"pypi","requirements":"0.9.0","direct":false,"kind":"runtime","optional":false},{"id":13856556830,"package_name":"wcwidth","ecosystem":"pypi","requirements":"0.2.6","direct":false,"kind":"develop","optional":false},{"id":13856556831,"package_name":"wrapt","ecosystem":"pypi","requirements":"1.15.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:15:37.747Z","updated_at":"2023-09-21T19:15:37.747Z","repository_link":"https://github.com/ADGEfficiency/energy-py-linear/blob/main/pyproject.toml","dependencies":[{"id":13856556832,"package_name":"python","ecosystem":"pypi","requirements":"^3.10,\u003c3.12","direct":true,"kind":"runtime","optional":false},{"id":13856556833,"package_name":"PuLP","ecosystem":"pypi","requirements":"^2.7.0","direct":true,"kind":"runtime","optional":false},{"id":13856556834,"package_name":"numpy","ecosystem":"pypi","requirements":"^1.23.4","direct":true,"kind":"runtime","optional":false},{"id":13856556835,"package_name":"pydantic","ecosystem":"pypi","requirements":"^1.10.2","direct":true,"kind":"runtime","optional":false},{"id":13856556836,"package_name":"pandas","ecosystem":"pypi","requirements":"^1.5.2","direct":true,"kind":"runtime","optional":false},{"id":13856556837,"package_name":"matplotlib","ecosystem":"pypi","requirements":"^3.6.2","direct":true,"kind":"runtime","optional":false},{"id":13856556838,"package_name":"rich","ecosystem":"pypi","requirements":"^12.0.0","direct":true,"kind":"runtime","optional":false},{"id":13856556839,"package_name":"seaborn","ecosystem":"pypi","requirements":"^0.12.2","direct":true,"kind":"runtime","optional":false},{"id":13856556840,"package_name":"pandera","ecosystem":"pypi","requirements":"^0.14.5","direct":true,"kind":"runtime","optional":false},{"id":13856556841,"package_name":"markdown-include","ecosystem":"pypi","requirements":"^0.8.1","direct":true,"kind":"runtime","optional":false},{"id":13856556842,"package_name":"structlog","ecosystem":"pypi","requirements":"^23.1.0","direct":true,"kind":"runtime","optional":false}]}],"score":6.214608098422192,"created_at":"2023-09-11T14:52:08.157Z","updated_at":"2026-04-20T20:30:20.923Z","avatar_url":"https://github.com/ADGEfficiency.png","language":"Python","category":"Energy Systems","sub_category":"Energy System Modeling Frameworks","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# energy-py-linear\n\n\u003cimg src=\"./static/coverage.svg\"\u003e [![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)\n\n---\n\nDocumentation: [energypylinear.adgefficiency.com](https://energypylinear.adgefficiency.com/latest)\n\n---\n\nA Python library for optimizing energy assets with mixed-integer linear programming:\n\n- electric batteries,\n- combined heat \u0026 power (CHP) generators,\n- electric vehicle smart charging,\n- heat pumps,\n- renewable (wind \u0026 solar) generators.\n\nAssets can be optimized to either maximize profit or minimize carbon emissions, or for user defined custom objective functions. Custom constraints can be used to further constrain asset behaviour.\n\nA site is a collection of assets that can be optimized together. Sites can use custom objectives and constraints.\n\nEnergy balances are performed on electricity, high, and low temperature heat.\n\n## Setup\n\nRequires Python 3.11 or 3.12:\n\n```shell-session\n$ pip install energypylinear\n```\n\n## Quick Start\n\n### Asset API\n\nThe asset API allows optimizing a single asset at once:\n\n```python\nimport energypylinear as epl\n\n#  2.0 MW, 4.0 MWh battery\nasset = epl.Battery(\n    power_mw=2,\n    capacity_mwh=4,\n    efficiency_pct=0.9,\n    # different electricity prices for each interval\n    # length of electricity_prices is the length of the simulation\n    electricity_prices=[100.0, 50, 200, -100, 0, 200, 100, -100],\n    # a constant value for each interval\n    export_electricity_prices=40,\n)\n\nsimulation = asset.optimize()\n```\n\n### Site API\n\nThe site API allows optimizing multiple assets together:\n\n```python\nimport energypylinear as epl\n\nassets = [\n    #  2.0 MW, 4.0 MWh battery\n    epl.Battery(power_mw=2.0, capacity_mwh=4.0),\n    #  30 MW open cycle generator\n    epl.CHP(\n        electric_power_max_mw=100, electric_power_min_mw=30, electric_efficiency_pct=0.4\n    ),\n    #  2 EV chargers \u0026 4 charge events\n    epl.EVs(\n        chargers_power_mw=[100, 100],\n        charge_events_capacity_mwh=[50, 100, 30, 40],\n        charge_events=[\n            [1, 0, 0, 0, 0],\n            [0, 1, 1, 1, 0],\n            [0, 0, 0, 1, 1],\n            [0, 1, 0, 0, 0],\n        ],\n    ),\n    #  natural gas boiler to generate high temperature heat\n    epl.Boiler(),\n    #  valve to generate low temperature heat from high temperature heat\n    epl.Valve(),\n]\n\nsite = epl.Site(\n    assets=assets,\n    # length of energy prices is the length of the simulation\n    electricity_prices=[100, 50, 200, -100, 0],\n    # these should match the length of the export_electricity_prices\n    # if they don't, they will be repeated or cut to match the length of electricity_prices\n    high_temperature_load_mwh=[105, 110, 120, 110, 105],\n    low_temperature_load_mwh=[105, 110, 120, 110, 105],\n)\n\nsimulation = site.optimize()\n```\n\n## Documentation\n\n[See more asset types \u0026 use cases in the documentation](https://energypylinear.adgefficiency.com/latest).\n\n## Test\n\n```shell\n$ make test\n```\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/19924","html_url":"https://ost.ecosyste.ms/projects/19924"}