Metadata-Version: 2.1
Name: tensorpowerflow
Version: 0.0.5
Summary: Ultra fast power flow based in Laurent series expansion.
Author-email: e.m.salazar.duque@tue.nl
License: MIT
Project-URL: repository, https://github.com/MauricioSalazare/tensorpowerflow
Keywords: power flow,power systems,time series loading
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.0
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: matplotlib
Requires-Dist: scipy
Requires-Dist: tqdm
Requires-Dist: numba (>=0.53.0)
Requires-Dist: networkx
Requires-Dist: seaborn
Requires-Dist: pandapower
Requires-Dist: mkl
Requires-Dist: psutil
Provides-Extra: dev
Requires-Dist: build ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: matplotlib ; extra == 'dev'
Requires-Dist: jupyterlab ; extra == 'dev'
Requires-Dist: tox ; extra == 'dev'
Provides-Extra: doc
Requires-Dist: sphinx ; extra == 'doc'
Provides-Extra: test
Requires-Dist: pytest ; extra == 'test'

.. Binder
.. image:: https://mybinder.org/badge_logo.svg
   :target: https://mybinder.org/v2/gh/MauricioSalazare/tensorpowerflow/master?urlpath=lab/tree/examples
   :alt: binder

.. License
.. image:: https://img.shields.io/github/license/MauricioSalazare/tensorpowerflow
   :target: https://github.com/MauricioSalazare/tensorpowerflow/blob/master/LICENSE

.. Python versions supported
.. image:: https://img.shields.io/pypi/pyversions/tensorpowerflow.svg
   :target: https://pypi.python.org/pypi/tensorpowerflow/

.. Downloads per month
.. image:: https://img.shields.io/pypi/dm/tensorpowerflow.svg
   :target: https://pypi.python.org/pypi/tensorpowerflow/

.. Code size
.. image:: https://img.shields.io/github/languages/code-size/MauricioSalazare/tensorpowerflow
   :target: https://github.com/MauricioSalazare/tensorpowerflow

.. PyPi version
.. image:: https://img.shields.io/pypi/v/tensorpowerflow
   :target: https://pypi.python.org/pypi/tensorpowerflow/

.. Build (GithubActions)
.. image:: https://img.shields.io/github/workflow/status/MauricioSalazare/tensorpowerflow/Python%20package/master
   :target: https://github.com/MauricioSalazare/tensorpowerflow/actions

.. Test (GithubActions)
.. image:: https://img.shields.io/github/workflow/status/MauricioSalazare/tensorpowerflow/Python%20package/master?label=tests
   :target: https://github.com/MauricioSalazare/tensorpowerflow/actions




TensorPowerFlow
===============


What is TensorPowerFlow?
------------------------

An ultra-fast power flow based on Laurent series expansion. The power flow is intended for applications where massive
amounts of power flow computations are required. e.g., electrical load time series, metaheuristics, electrical grid
environments for reinforcement learning.

How to install
--------------
The package can be installed via pip using:

.. code:: shell

    pip install tensorpowerflow

Example:
--------
Run the load base case as:

.. code-block:: python

    from tensorpowerflow import GridTensor
    import numpy as np
    from time import perf_counter

    #%% Solve base case (34 node bus)
    network = GridTensor()
    solution = network.run_pf()
    print(solution["v"])

    #%% Solve 10_000 power flows on the 34 node bus case.
    network_size = network.nb - 1  # Size of network without slack bus.
    active_ns = np.random.normal(50, scale=1, size=(10_000, network_size)) # Power in kW
    reactive_ns = active_ns * 0.1  # kVAr
    solution_tensor = network.run_pf(active_power=active_ns, reactive_power=reactive_ns)
    print(solution_tensor["v"])

    #%% Generate random radial network of 100 nodes and a maximum of 1 to 3 branches per node.
    network_rnd = GridTensor.generate_from_graph(nodes=100, child=3, plot_graph=True)
    solution_rnd = network_rnd.run_pf()
    print(solution_rnd["v"])

    #%% Solve a tensor power flow. For 10 scenarios, 8_760 time steps (one year - 1 hr res), for the 33 PQ nodes.
    # Meaning that the dimensions of the tensor is (10, 8_760, 33)

    network = GridTensor(numba=True)  # Loads the basic 34 bus node network.
    active_ns = np.random.normal(50,  # Power in kW
                                 scale=10,
                                 size=(10, 8_760, 33)).round(3)  # Assume 1 slack variable
    reactive_ns = (active_ns * .1).round(3)  # Constant PF of 0.1

    start_tensor_dense = perf_counter()
    solution = network.run_pf(active_power=active_ns, reactive_power=reactive_ns, algorithm="tensor")
    t_tensor_dense = perf_counter() - start_tensor_dense
    assert solution["convergence"], "Algorithm did not converge."
    assert solution["v"].shape == active_ns.shape
    print(f"Time tensor dense: {t_tensor_dense:.3f} sec.")

More examples can be found in the `examples folder <https://github.com/MauricioSalazare/tensorpowerflow/tree/master/examples>`_ (under development).
Also, you can try the package via jupyter lab clicking in the binder icon:

.. image:: https://mybinder.org/badge_logo.svg
   :target: https://mybinder.org/v2/gh/MauricioSalazare/tensorpowerflow/master?urlpath=lab/tree/examples
   :alt: binder

Reading and citations:
----------------------
The mathematical formulation of the power flow can be found at:

*"A Fixed-Point Current Injection Power Flow for Electric Distribution Systems using Laurent Series."* J.S. Giraldo,
O.D. Montoya, P.P. Vergara, F. Milano. Power Systems Computational Conference (PSCC) 2022. `link <http://faraday1.ucd.ie/archive/papers/laurent.pdf>`_


How to contact us
-----------------
Any questions, suggestions or collaborations contact Juan S. Giraldo at <jnse@ieee.org>
