Metadata-Version: 2.4
Name: solar-data-tools
Version: 2.1.4
Summary: Tools for performing common tasks on solar PV data signals
Author-email: Bennet Meyers <bennetm@stanford.edu>
Maintainer-email: Sara Miskovich <smiskov@slac.stanford.edu>
License: BSD 2-Clause License
        
        
        Copyright Notice:
        
        COPYRIGHT © 2025 Alliance for Sustainable Energy, LLC and SLAC National Accelerator Laboratory. All rights reserved. This work is supported in part by the U.S. Department of Energy, Office of Basic Energy Sciences under contract DE-AC02-76SF00515.
        
        Usage Restrictions:
        
        Neither the name of the Leland Stanford Junior University, SLAC National Accelerator Laboratory, U.S. Department 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.
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        
        * Redistributions of source code must retain the above copyright notice, this
          list of conditions and the following disclaimer.
        
        * 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.
        
        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 HOLDER 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.
        
Project-URL: Homepage, https://github.com/NatLabRockies/solar-data-tools
Project-URL: Documentation, https://solar-data-tools.readthedocs.io/
Project-URL: Bug Tracker, https://github.com/NatLabRockies/solar-data-tools/issues
Project-URL: Discussions, https://github.com/NatLabRockies/solar-data-tools/discussions
Keywords: solar,pv,photovoltaic
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3 :: Only
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: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: scipy
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: scikit-learn
Requires-Dist: jupyter
Requires-Dist: matplotlib
Requires-Dist: seaborn
Requires-Dist: requests
Requires-Dist: pvlib
Requires-Dist: cvxpy
Requires-Dist: pykml
Requires-Dist: haversine
Requires-Dist: smart_open
Requires-Dist: sig-decomp
Requires-Dist: clarabel
Requires-Dist: qss
Requires-Dist: tqdm
Requires-Dist: spcqe
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: pydata-sphinx-theme; extra == "docs"
Requires-Dist: sphinx_design; extra == "docs"
Requires-Dist: nbsphinx; extra == "docs"
Requires-Dist: myst-parser; extra == "docs"
Requires-Dist: nbsphinx_link; extra == "docs"
Requires-Dist: docutils<0.22; extra == "docs"
Provides-Extra: mosek
Requires-Dist: mosek; extra == "mosek"
Provides-Extra: dask
Requires-Dist: numpy==2.0; extra == "dask"
Requires-Dist: dask==2024.5.2; extra == "dask"
Requires-Dist: distributed==2024.5.2; extra == "dask"
Requires-Dist: dask-cloudprovider[all]==2022.10.0; extra == "dask"
Requires-Dist: graphviz; extra == "dask"
Requires-Dist: bokeh; extra == "dask"
Dynamic: license-file

<!-- HEADER -->
<br />
<p align="center">
  <a href="#">
    <img src="docs/source/_static/SDT_v1_secondary_blue_text.png" width="600">
  </a>

  <p align="center">
    <br />
    <a href="https://solar-data-tools.readthedocs.io/"><strong>Explore our documentation </strong></a>
    ·
    <a href="https://github.com/NatLabRockies/solar-data-tools/issues"><strong>Report Issue </strong></a>
    <br />
    <br />
</p>
</p>

<table  align="center" >
<tr>
  <td>Repo Status</td>
    <td>
    <a href="https://www.repostatus.org/#active"><img src="https://www.repostatus.org/badges/latest/active.svg"
      alt="Project Status: Active – The project has reached a stable, usable state and is being actively developed." />
    </a>
  </tr>
  <tr>
  <td>pyOpenSci Peer-Reviewed</td>
    <td>
    <a href="https://github.com/pyOpenSci/software-review/issues/210"><img src="https://pyopensci.org/badges/peer-reviewed.svg"
      alt="Project has been peer-reviewed by pyOpenSci." />
    </a>
  </tr>
  <tr>
  <td>JOSS Paper</td>
    <td>
    <a style="border-width:0" href="https://doi.org/10.21105/joss.08478">
      <img src="https://joss.theoj.org/papers/10.21105/joss.08478/status.svg" alt="DOI badge" >
    </a>
  </tr>
  <tr>
  <td>Python Versions</td>
  <td>
    <a href="https://www.python.org/downloads/release/python-3100/">
        <img src="https://img.shields.io/badge/python-3.10-blue.svg" alt="latest release" />
    </a>
    <a href="https://www.python.org/downloads/release/python-3110/">
        <img src="https://img.shields.io/badge/python-3.11-blue.svg" />
    </a>
    <a href="https://www.python.org/downloads/release/python-3120/">
        <img src="https://img.shields.io/badge/python-3.12-blue.svg" />
    </a>
    <a href="https://www.python.org/downloads/release/python-3130/">
        <img src="https://img.shields.io/badge/python-3.13-blue.svg" />
    </a>
</tr>
<tr>
  <td>Latest Release</td>
  <td>
    <a href="https://pypi.org/project/solar-data-tools/">
        <img src="https://img.shields.io/pypi/v/solar-data-tools.svg" alt="latest release" />
    </a>
    <a href="https://anaconda.org/conda-forge/solar-data-tools">
        <img src="https://anaconda.org/conda-forge/solar-data-tools/badges/version.svg" />
    </a>
    <a href="https://anaconda.org/conda-forge/solar-data-tools">
        <img src="https://anaconda.org/conda-forge/solar-data-tools/badges/latest_release_date.svg" />
    </a>
</tr>
<tr>
  <td>License</td>
  <td>
    <a href="https://github.com/NatLabRockies/solar-data-tools/blob/main/LICENSE">
        <img src="https://img.shields.io/pypi/l/solar-data-tools.svg" alt="license" />
    </a>
</td>
</tr>
<tr>
  <td>Build Status</td>
  <td>
    <a href="https://solar-data-tools.readthedocs.io/">
        <img src="https://readthedocs.org/projects/solar-data-tools/badge/?version=stable" alt="documentation build status" />
    </a>
        <a href="https://github.com/NatLabRockies/solar-data-tools/actions/workflows/test.yml">
        <img src="https://github.com/NatLabRockies/solar-data-tools/actions/workflows/test.yml/badge.svg?branch=main" alt="Actions build status" />
    </a>
    <a href="https://github.com/NatLabRockies/solar-data-tools/actions/workflows/build.yml">
        <img src="https://github.com/NatLabRockies/solar-data-tools/actions/workflows/build.yml/badge.svg">
    </a>
  </td>
</tr>
<tr>
    <td>Publications</td>
    <td>
        <a href="https://zenodo.org/badge/latestdoi/171066536">
            <img src="https://zenodo.org/badge/171066536.svg" alt="DOI">
        </a>
    </td>
</tr>
<tr>
    <td>PyPI Downloads</td>
    <td>
        <a href="https://pepy.tech/project/solar-data-tools">
            <img src="https://img.shields.io/pypi/dm/solar-data-tools" alt="PyPI downloads" />
        </a>
    </td>
</tr>
<tr>
    <td>Conda Downloads</td>
    <td>
        <a href="https://anaconda.org/conda-forge/solar-data-tools">
            <img src="https://anaconda.org/conda-forge/solar-data-tools/badges/downloads.svg" alt="conda-forge downloads" />
        </a>
    </td>
</tr>
<tr>
    <td>Test-Coverage</td>
    <td>
        <img src="https://img.shields.io/badge/test--coverage-45%25-yellowgreen" alt="test-coverage" />
    </td>
</tr>
</table>


Solar Data Tools is an open-source Python library for analyzing PV power (and irradiance) time-series data. It
was developed to enable analysis of _unlabeled_ PV data, i.e. with no model, no meteorological data, and no performance index required,
by taking a statistical signal processing approach in the algorithms used in the package’s main data processing pipeline.
Solar Data Tools empowers PV system fleet owners or operators to analyze system performance a hundred times faster even when
they only have access to the most basic data stream—power output of the system.

Solar Data Tools provides methods for data I/O, cleaning, filtering, plotting, and analysis. These methods are largely automated and require little
to no input from the user regardless of system type—from utility tracking systems to multi-pitch rooftop systems.
Head over to our Getting Started pages in our [documentation](https://solar-data-tools.readthedocs.io/) for a demo!

As of April 2026, we have a **new webinar** posted to YouTube! Check it out here:

<p align="center">
  <a href="https://www.youtube.com/watch?v=---j2QyczQ0">
 <img src="https://img.youtube.com/vi/---j2QyczQ0/hq1.jpg" />
  </a>
  <br/>
  </img>
</p>

You can also check the [notebooks](https://github.com/NatLabRockies/solar-data-tools/blob/main/notebooks/examples) folder in this repo for more examples.

This work is supported by the U.S. Department of Energy’s Office of Energy Efficiency and Renewable Energy (EERE) under the Solar Energy Technologies Office Award Number 38529.

## Install & Setup

#### Recommended: Install with pip

In a fresh Python virtual environment, simply run:

```bash
$ pip install solar-data-tools
```

or if you would like to use MOSEK, install the optional dependency as well:

```bash
$ pip install "solar-data-tools[mosek]"
```

#### Install with conda

>[!WARNING]
> `solar-data-tools` is now available on conda-forge! You can specify
> the channel using the `-c` flag as shown in the examples below.
> The use of the slacgismo channel is **deprecated** and packages
> on that channel will **not** be up-to-date with the latest releases.

Creating the environment and directly installing the package and its dependencies from the appropriate conda channels:

```bash
$ conda create -n pvi-user solar-data-tools -c conda-forge
```

Starting the environment:

```bash
$ conda activate pvi-user
```

Stopping the environment:

```bash
$ conda deactivate
```

Or alternatively install the package in an already existing environment:

```bash
$ conda install solar-data-tools -c conda-forge
```

### Solvers

#### CLARABEL

By default, the [CLARABEL](https://clarabel.org/stable/) solver is used to solve the signal decomposition problems. CLARABEL (as well as other solvers) is compatible with [OSD](https://github.com/cvxgrp/signal-decomposition/tree/main), the modeling language used to solve signal decomposition problems in Solar Data Tools. Both are open source and are dependencies of Solar Data Tools.

#### MOSEK

MOSEK is a commercial software package. Since it is more stable and offers faster solve times,
we provide continuing support for it (with signal decomposition problem formulations using CVXPY). However,
you will still need to obtain a license. If installing with pip, you can install the optional MOSEK dependency by running
`pip install "solar-data-tools[mosek]"`.
If installing from conda, you will have to manually install MOSEK if you desire to use it as
conda does not support optional dependencies like pip.

More information about MOSEK and how to obtain a license is available here:

* [mosek](https://www.mosek.com/resources/getting-started/)
* [Free 30-day trial](https://www.mosek.com/products/trial/)
* [Personal academic license](https://www.mosek.com/products/academic-licenses/)

## Usage
Users will primarily interact with this software through the `DataHandler` class. By default, Solar Data
Tools uses [CLARABEL](https://clarabel.org/stable/) as the solver all signal decomposition problems. If you would like
to specify another solver (such as MOSEK), just pass the keyword argument `solver` to `DataHandler.pipeline` with the solver of choice.

```python
from solardatatools import DataHandler
from solardatatools.dataio import get_pvdaq_data

pv_system_data = get_pvdaq_data(sysid=35, api_key='DEMO_KEY', year=[2011, 2012, 2013])

dh = DataHandler(pv_system_data)
dh.run_pipeline(power_col='dc_power')
```
If everything is working correctly, you should see a run summary like the following

```
total time: 25.99 seconds
--------------------------------
Breakdown
--------------------------------
Preprocessing              6.76s
Cleaning                   0.41s
Filtering/Summarizing      18.83s
    Data quality           0.21s
    Clear day detect       0.44s
    Clipping detect        15.51s
    Capacity change detect 2.67s
```

You can also find more in-depth tutorials and guides in [our documentation](https://solar-data-tools.readthedocs.io/).


## Contributing

We welcome contributions of any form! Please see our [Contribution Guidelines](./CONTRIBUTING.md) for more information.

## Citing Solar Data Tools

If you use Solar Data Tools in your research, please cite:

**Recommended citation**

  Sara A. Miskovich, Bennet E. Meyers, et al., "Solar Data Tools: a Python library for automated analysis of unlabeled PV data," _Journal of Open Source Software_, 10(110), 8478, 2025, doi: [10.21105/joss.08478](https://doi.org/10.21105/joss.08478)

**Citing technical details (_e.g._, SDT algorithms)**

  Bennet E. Meyers, PVInsight (Final Technical Report), _SLAC Report SLAC-R-1155_, 2021, doi: [10.2172/1897181](https://doi.org/10.2172/1897181)

  Bennet E. Meyers, Elpiniki Apostolaki-Iosifidou and Laura Schelhas, "Solar Data Tools: Automatic Solar
  Data Processing Pipeline," _2020 47th IEEE Photovoltaic Specialists Conference (PVSC)_, Calgary, AB, Canada, 2020,
  pp. 0655-0656, doi: [10.1109/PVSC45281.2020.9300847](https://doi.org/10.1109/PVSC45281.2020.9300847).

**Citing a specific version**

You can also cite the DOI corresponding to the specific version of
Solar Data Tools that you used. Solar Data Tools DOIs are listed at
[here](https://zenodo.org/search?q=parent.id%3A5056959&f=allversions%3Atrue&l=list&p=1&s=10&sort=version).


## Versioning

We use [Semantic Versioning](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/NatLabRockies/solar-data-tools/tags).

## Authors

* **Bennet Meyers** - *Initial work and Main research work* - [Bennet Meyers GitHub](https://github.com/bmeyers)

See also the list of [contributors](https://github.com/bmeyers/solar-data-tools/contributors) who participated in this project.

## Copyright Notice

COPYRIGHT © 2025 Alliance for Sustainable Energy, LLC and SLAC National Accelerator Laboratory. All rights reserved. This work is supported in part by the U.S. Department of Energy, Office of Basic Energy Sciences under contract DE-AC02-76SF00515.

## Usage Restrictions

Neither the name of the Leland Stanford Junior University, SLAC National Accelerator Laboratory, U.S. Department 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.
