Metadata-Version: 2.4
Name: psr-factory
Version: 5.0.0b155
Summary: PSR database management module.
Author-email: "PSR Inc." <psrfactory@psr-inc.com>
License-Expression: LicenseRef-Proprietary
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
License-File: THIRD_PARTY_NOTICES.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.

Result files are read with a fast direct reader by default, falling back
automatically to the long-standing reader for the formats it does not cover.
`psr.factory.set_setting("LEGACY_RESULT_READER", True)` forces every read back
through the long-standing one.

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

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


Licensing
---------

PSR Factory is **commercial, proprietary software**. It is not open source.
Installing it from PyPI does not by itself grant a right to use it.

- **The software licence** is the PSR Factory Software License Agreement,
  distributed with every wheel as `LICENSE.txt` (inside the installed package
  at `psr_factory-<version>.dist-info/licenses/LICENSE.txt`). Installing or
  using the package means accepting it. It is offered as two paid grants,
  Evergreen (perpetual) and Annual (subscription).
- **A runtime licence is separate.** The agreement governs your right to use
  the software; a valid PSR licence is what makes it run. Check yours with
  `psr.factory.check_license()`.
- **Redistributing the unmodified package is permitted** — mirrors, internal
  package indexes and container images are all fine. Whoever receives it still
  needs their own PSR licence to run it.
- **Third-party components.** Factory links a number of third-party libraries.
  Their licences are reproduced in full in `THIRD_PARTY_NOTICES.txt`, shipped
  beside `LICENSE.txt`. Nothing in the PSR Factory agreement limits any right
  you hold under those licences.
- **Bill of materials.** A CycloneDX 1.6 and an SPDX 2.3 SBOM are published
  with every release.

> Releases up to and including `5.0.0b152` were published under the MIT licence
> and have been yanked from PyPI. If you pinned one of them, move to a current
> release. The MIT grant on a copy you already hold is not retroactively
> withdrawn, but no MIT-licensed build is supported or available going forward.

Licensing enquiries: psrfactory@psr-inc.com


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).
