Metadata-Version: 2.1
Name: epmodel
Version: 0.7.0
Summary: Data models for EnergyPlus automatically generated from EnergyPlus JSON schema using datamodel-code-generator.
Author-email: Taoning Wang <taoningwang@lbl.gov>
License: Copyright (c) 2023, The Regents of the University of California,
        through Lawrence Berkeley National Laboratory (subject to receipt of
        any required approvals from the U.S. Dept. of Energy). All rights
        reserved. Redistribution and use in source and binary forms, with or
        without modification, are permitted provided that the following
        conditions are met:
        
        (1) Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.
        (2) Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.
        (3) Neither the name of the University of California, Lawrence Berkeley
        National Laboratory, U.S. Dept. of Energy nor the names of its contributors
        may be used to endorse or promote products derived from this software without
        specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
        "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
        BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
        GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        SUCH DAMAGE.
        
        You are under no obligation whatsoever to provide any bug fixes,
        patches, or upgrades to the features, functionality or performance of
        the source code ("Enhancements") to anyone; however, if you choose to
        make your Enhancements available either publicly, or directly to
        Lawrence Berkeley National Laboratory, without imposing a separate
        written license agreement for such Enhancements, then you hereby grant
        the following license: a non-exclusive, royalty-free perpetual license
        to install, use, modify, prepare derivative works, incorporate into
        other computer software, distribute, and sublicense such Enhancements
        or derivative works thereof, in binary and source code form.
        
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.3.0

# epmodel

epmodel is a pydantic (V2) data model for EnergyPlus modeling.
The data model code itself is automatically generated from the EnergyPlus
JSON schema using the `datamodel-code-generator` package.



## Usage

Due to the size of the official EnergyPlus JSON schema, we reduce the data model scope
down the a few commonly used ones. The name of these data models are list in the `keys.txt`
file, which is also used to generate the data model code.

### Expanding the scope of data model

We can add object to the data model by adding names directly to the `keys.txt` file.

### Generate the source code

To generate the source code, run the following command inside the `codegen` directory:

```bash
python codegen.py
```

As a result, a `src/epmodel/model.py` file will be a generated with the data model code.

### Using the data model
Using the data model object is as simple as:

```python
import json
from epmodel import EnergyPlusModel

with open("model.epJSON", "r") as f:
    data = json.load(f)
model = EnergyPlusModel.model_validate(data)
```

The code above loads in the EnergyPlus epJSON model and validate it against the data model.
If the mode is valid, a `EnergyPlusModel` object will be returned, otherwise, an `ValidationError`
will be raised.

One of the benefits of having such data model, beyond data validation, is that we can use
autocomplete in IDE to help use write the code.

## Dependencies

* [pydantic](https://github.com/pydantic/pydantic)

### Dependency for code generation

* [datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator)
