Metadata-Version: 2.4
Name: psr-factory
Version: 5.0.0b152
Summary: PSR database management module.
Author-email: "PSR Inc." <psrfactory@psr-inc.com>
License-Expression: MIT
Project-URL: documentation, https://docs.psr-inc.com/knowledgehub/solutions/additional_tools/factory/getting_started/introduction.html
Keywords: psr,factory,sddp
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: C
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: numpy
Provides-Extra: pandas
Requires-Dist: pandas; extra == "pandas"
Provides-Extra: polars
Requires-Dist: polars; extra == "polars"
Provides-Extra: arrow
Requires-Dist: pyarrow; extra == "arrow"
Provides-Extra: cloud
Requires-Dist: psr-cloud; extra == "cloud"
Provides-Extra: execqueue-client
Requires-Dist: requests; extra == "execqueue-client"
Provides-Extra: execqueue-server
Requires-Dist: DateTime; extra == "execqueue-server"
Requires-Dist: Flask; extra == "execqueue-server"
Requires-Dist: python-ulid; extra == "execqueue-server"
Requires-Dist: sqlalchemy; extra == "execqueue-server"
Requires-Dist: python-dotenv; extra == "execqueue-server"
Requires-Dist: fastapi; extra == "execqueue-server"
Requires-Dist: uvicorn[standard]; extra == "execqueue-server"
Requires-Dist: python-multipart; extra == "execqueue-server"
Requires-Dist: jinja2; extra == "execqueue-server"
Requires-Dist: psr-cloud; extra == "execqueue-server"
Provides-Extra: all
Requires-Dist: pandas; extra == "all"
Requires-Dist: pyarrow; extra == "all"
Requires-Dist: polars; extra == "all"
Requires-Dist: psutil; extra == "all"
Requires-Dist: psr-cloud; extra == "all"
Dynamic: license-file

PSR Factory
===========

Factory is a library that helps to manage SDDP cases. 
It contains functions that create, load, and save studies, and also functions that create,
access, and modify objects in a study.


Installation
------------

Open the command prompt and run the following command:
```bash
pip install psr-factory
```

Factory will be available to all Python scripts in your system after importing it:

```python
import psr.factory
```

Usage sample
------------

```python
import psr.factory

study = psr.factory.load_study(r"C:\temp\my\study")
system_1 = study.find("System.*")[0]

battery = study.create("Battery")
battery.code = 1
battery.name = "Battery 1"
battery.set("InstalledCapacity", 10.0)
battery.set("RefSystem", system_1)
study.add(battery)

study.save(r"C:\temp\my\updated_study")
```


Reading results
---------------

`load_dataframe` reads a result file whole. When one is too large for that --
an hourly case easily is -- `scan_dataframe` reads it in batches, so memory
follows the batch size and not the file size:

```python
import psr.factory

with psr.factory.scan_dataframe(r"C:\case\gerter.hdr",
                                batch_rows=100_000,
                                filter_agents=["Thermal 1"]) as scan:
    peak = max(float(batch["Thermal 1"].max()) for batch in scan)
```

`psr.factory.write_dataframe(destination, scan)` writes one back the same
way, so a whole file-to-file transform never holds either end. Batches are
ordinary `DataFrame` objects: index them with numpy, or convert with
`to_pandas()` / `to_polars()`, or hand them straight to pyarrow, polars or
DuckDB through the Arrow protocol.

Setting `psr.factory.set_setting("FAST_RESULT_READER", True)` selects a
faster reader for the common result formats, falling back automatically for
the rest.

Full documentation
------------------

The full documentation and reference is available at https://docs.psr-inc.com/knowledgehub/solutions/additional_tools/factory/getting_started/introduction.html.


Releases
--------

New releases can be found in PyPI website at [https://pypi.org/project/psr-factory](https://pypi.org/project/psr-factory).

And the release notes at [https://psrenergy-docs.github.io/factory/releases.html](https://psrenergy-docs.github.io/factory/releases.html).
