Changelog

Version 0.9.1

Note

The wheels for Windows are temporarily unavailable anymore. If you need them, please post an issue on GitHub.

  • PR231 Add LineParameters.from_power_factory and TransformerParameters.from_power_factory methods to easily import PowerFactory lines and transformer models into Roseau Load Flow.

  • PR230 Improve the algorithm for assigning potential references for DGS networks.

  • PR229 Several fixes and improvements to the PowerFactory import:

    • Update the “Export Definition Folder” bundled with Roseau Load Flow as a pfd file;

    • Support lines with missing type ID. This is the case when the TypLne objects are inherited from an external library in PowerFactory and not included in the project being exported; A LineParameters object is automatically created for these lines;

    • Support “General Load (ElmLod)” elements;

    • Preserve Geometry information on buses and branches;

    • Improve handling of phases of several elements. Previously, phases were hard-coded.

    • Fix the unit of the power of static generators;

    • Fix the re-sizing of the matrices of line types without neutral elements;

    • Fix the total power of “MV Loads (ElmLodmv)” to take into account the generation power;

    • Fix all loads to no longer ignore the scale factor of the power;

    • Fix the sign of the reactive power of MV and LV loads

    • Fix the ground connection to the source bus

    And many more…

Version 0.9.0

  • PR227 Sources and loads are now allowed to have floating neutrals. This means that a load/source with phases="abcn" can now be connected to a bus with phases="abc".

  • PR225 The calculate_voltages function now accepts and return pint quantities.

  • MacOS wheels for roseau-load-flow-engine are now published on PyPI. This means that pip install roseau-load-flow should now work on macOS.

  • Added support for running in Google Colab documents.

  • Fixed a bug in license checks caching on Windows.

  • Added support for Numpy 2.0.

  • GH222 PR223 from_catalogue() methods of the electrical network and transformer and line parameters now perform “full match” comparison on textual inputs. If you need the old behavior, use regular expression wild cards .* in the input string.

  • GH220 PR221 Add LineParameters.from_open_dss and TransformerParameters.from_open_dss methods to easily import OpenDSS lines and transformer models into Roseau Load Flow. More information is available in the documentation of these methods.

  • GH210 PR219 Add a parameter to LineParameters.from_catalogue to choose the number of phases of the created line parameters object.

  • PR218 Add Transformer.res_power_losses to get the total power losses in a transformer.

  • PR217 Add an ID override to TransformerParameters.from_catalogue similar to LineParameters.from_catalogue.

  • GH216 PR217 BREAKING CHANGE: Rename the id parameter of TransformerParameters catalogue methods to name to be consistent with LineParameters. If you call these methods by keyword arguments, make sure to update your usage of TransformerParameters.from_catalogue(id="xxx") to TransformerParameters.from_catalogue(name="xxx").

  • PR212 BREAKING CHANGE: Modify the constructor of TransformerParameters to take the z2 and ym parameters directly instead of the open and short circuit tests parameters. You can still create an object from these tests using the from_open_and_short_circuit_tests constructor. This change comes with other changes to TransformerParameters, notably:

    • The z2, ym, k, and orientation are now always available as attributes on the instance

    • The to_zyk method is deprecated in favour of the direct attribute access on the instance. This method will be removed in a future version

    • The parameters i0, p0, psc, and vsc are now optional. They return None for instances created using z2 and ym directly

    • The JSON representation of TransformerParameters has changed, but it is still compatible with the old representation.

Version 0.8.1

  • GH214 Solve a bug in the engine when using delta connected flexible loads.

  • PR213 Better detection of poorly connected elements as described in GH209. It raises a proper error message.

  • PR211 Several improvements of the documentation:

    • Add Open Graph metadata to the documentation page.

    • Error on the susceptance unit in the tables of the LineParameters’ catalogue.

    • Replot the networks of the catalogue (add a H1 title, use the Raleway font, only plot the lines to add their parameters id in the tooltip)

Version 0.8.0

  • PR207 Fix a bug in the zig-zag three-phase transformer model that led to incorrect active power flow in the transformer. The bug affected the 50 kVA transformers that have the type Yzn11 in the catalogue.

  • PR206 GH187 Un-deprecate results_to_dict/json methods and remove deprecated results_from_dict/json methods.

  • PR205 GH200 Fix error when propagating the potentials from a voltage source with fewer phases than the bus.

  • PR204 GH193 Remove restrictions on geometry types. Allow specifying the CRS of the geometries.

  • PR203 GH186 Detect invalid element overrides when connecting a new element with the same ID and type of an existing element.

  • PR202 GH188 Explicitly prevent instantiation of abstract classes.

  • PR201 GH185 Add type attribute to the load classes and rename branches branch_type attribute to type for consistency. Please replace branch.branch_type by branch.type in your code. In addition, loads data frames gained two new columns:

    1. type indicating the load type: constant-(power, current, impedance);

    2. and flexible indicating if the load is flexible.

  • PR197 Fix a bug in three-phase transformer models that led to excessive reactive power flow in the transformer.

  • PR199 Add Schneider Electric EcoDesign transformers to the catalogue. These are tagged with the AA0Ak efficiency class. Other internal data have been added to the catalogue for testing purposes.

  • PR198 Simplify the storage of the transformer catalogues. This is an internal change that should not have effects on user code.

  • PR196 GH194 Improve the error message when accessing res_flexible_powers on a non-flexible load and relax the flexible parameters plotting methods to accept an array-like of voltages.

  • PR195 Use latexindent.pl to automatically indent LaTeX files in the documentation.

  • PR192 Speed up results access by up to 3x using several optimization techniques. This is especially noticeable in timeseries simulations and when accessing results of large networks.

  • PR184 Improve the documentation to have a better SEO (sitemap, metadata and canonical URLs). The navigation menu has also been improved.

  • PR183 GH181 Update the networks catalogue to better represent the real networks. LV loads are made single-phase, MV sources are connected in delta, and MV buses lost their neutral. Voltage, current, and power limits are added to the buses, lines, and transformers. The line parameters IDs are also updated to match the new line parameters catalogue.

  • PR182 Improve the error message when trying to access results on the network before running the load flow.

  • PR189 Allow flexible loads to have a null active theoretical power.

Version 0.7.0

Important

Starting with version 0.7.0, Roseau Load Flow is no longer supplied as a SaaS. The software is now available as a standalone Python library.

  • The documentation is moved from GitHub Pages to https://www.roseau-load-flow.roseautechnologies.com/.

  • Fix a bug in the engine: it was impossible to change the parameters of center-tapped and single phase transformers.

  • PR179 Fix a bug in the propagation of potentials when a center-tapped transformer is used without neutral at the primary side.

  • PR178 GH176 Merge the results_to_json, results_from_json, results_to_dict and results_from_dict methods of the ElectricalNetwork and Elements classes into the methods to_json, from_json, to_dict and from_dict respectively. The old results_ methods are deprecated and will be removed in a future release. The new methods will include the results by default, but you can pass include_results=False to exclude them.

  • PR175 GH174 Fix JSON serialization of network with line parameters created from the catalogue.

  • PR173 Remove the conda installation option.

  • PR168 GH166 Fix initial potentials’ propagation.

  • PR167 GH161 Add a catalogue of lines using the IEC standards. You can use the method LineParameters.get_catalogue() to get a data frame of the available lines and the method LineParameters.from_catalogue() to create a line from the catalogue. Several line types, conductor material, and insulation types have been updated. Physical constants have been updated to match the IEC standards where applicable.

  • PR167 The class LineParameters now takes optional arguments line_type, conductor_type, insulator_type and section. These parameters are accessible as properties. They are filled automatically when creating a line from the catalogue or from a geometry.

  • PR167 Replace all print_catalogue() methods by get_catalogue() methods that return a data frame instead of printing the catalogue to the console.

  • PR167 Enumeration classes no longer have a from_string method, you can call the enumeration class directly with the string value to get the corresponding enumeration member. Case-insensitive behavior is preserved.

  • PR167 GH122 Add checks on line height and diameter in the LineParameters.from_geometry() alternative constructor. This method will try to guess a default conductor and insulation type if none is provided.

  • PR163 BREAKING CHANGE: roseau-load-flow is no longer a SaaS project. Starting with version 0.7.0, the software is distributed as a standalone Python package. You need a license to use it for commercial purposes. See the documentation for more details. This comes with a huge performance improvement but requires a breaking change to the API:

    • The ElectricalNetwork.solve_load_flow() method no longer takes an auth argument.

    • To activate the license, you need to call roseau.load_flow.activate_license("MY LICENSE KEY") or set the environment variable ROSEAU_LOAD_FLOW_LICENSE_KEY (preferred) before calling ElectricalNetwork.solve_load_flow(). More information in the documentation.

    • Several methods on the FlexibleParameter class that previously required auth are changed. Make sure to follow the documentation to update your code.

  • PR163 GH158 Fix ElectricalNetwork.res_transformers returning an empty dataframe when max_power is not set.

  • PR163 Several unused exception codes were removed. An EMPTY_NETWORK code was added to indicate that a network is being created with no elements.

  • PR163 Remove the ElectricalNetwork.res_info attribute. ElectricalNetwork.solve_load_flow() now returns the tuple (number of iterations, residual).

  • PR163 Remove the Bus.clear_short_circuits() and ElectricalNetwork.clear_short_circuits() methods. It is currently not possible to clear short-circuits from the network.

  • PR163 Improve performance of network creation and results access.

  • PR163 Attributes phases and bus are now read-only on all elements.

  • PR151 Require Python 3.10 or newer.

Version 0.6.0

  • PR149 GH145 Add custom pint wrapper for better handling of pint arrays.

  • PR148 GH122 deprecate LineParameters.from_name_lv() in favor of the more generic LineParameters.from_geometry(). The method will be removed in a future release.

  • PR142 GH136 Add Bus.res_voltage_unbalance() method to get the Voltage Unbalance Factor (VUF) as defined by the IEC standard IEC 61000-3-14.

  • PR141 GH137 Add ElectricalNetwork.to_graph() to get a networkx.Graph object representing the electrical network for graph theory studies. Install with the "graph" extra to get networkx. ElectricalNetwork also gained a new buses_clusters property that returns a list of sets of IDs of buses that are connected by a line or a switch. This can be useful to isolate parts of the network for localized analysis. For example, to study a LV subnetwork of a MV feeder. Alternatively, to get the cluster certain bus belongs to, you can use Bus.get_connected_buses().

  • PR141 Add official support for Python 3.12. This is the last release to support Python 3.9.

  • PR138 Add network constraints for analysis of the results.

    • Buses can define minimum and maximum voltages. Use bus.res_violated to see if the bus has over- or under-voltage.

    • Lines can define a maximum current. Use line.res_violated to see if the loading of any of the line’s cables is too high.

    • Transformers can define a maximum power. Use transformer.res_violated to see if the transformer loading is too high.

    • The new fields also appear in the data frames of the network.

  • PR133 GH126 Add Qmin and Qmax limits of flexible parameters.

  • PR132 GH101 Document extra utilities including converters and constants.

  • PR131 GH127 Improve the documentation of the flexible loads.

    • Add the method compute_powers method to the FlexibleParameter class to compute the resulting flexible powers for a given theoretical power and a list of voltage norms.

    • Add the plot_control_p, plot_control_q and plot_pq methods to the FlexibleParameter class to plot the control curves and control trajectories.

    • Add the extra plot to install matplotlib alongside roseau-load-flow.

  • PR131 Correction of a bug in the error message of the powers setter method.

  • PR130 Mark some internal attributes as private, they were previously marked as public.

  • PR128 Add the properties z_line, y_shunt and with_shunt to the Line class.

  • PR125 Speed-up build of conda workflow using mamba.

Version 0.5.0

  • PR121 GH68 Improvements of the LineParameters constructor:

    • Delete the LineModel class

    • Simplify the from_dict method

    • Rename and refactor the method from_lv_exact into from_geometry.

    • Add documentation for the LineParameters alternative constructors.

    • Rename InsulationType into InsulatorType.

    • Allow the letter “U” for “Underground” line type (only “S” for “Souterrain” in French was accepted). The same with the letter “O” for “Overhead” line type (only “A” for “Aérien” in French was accepted).

    • Remove the field "model" from the JSON serialization of LineParameters.

  • PR120 Fix phases of flexible power results.

  • PR119 Add explicit error message for singular jacobian.

  • PR118 GH95

    • Add a catalogue of three-phase MV/LV distribution transformers.

    • Remove the class method TransformerParameters.from_name.

  • PR117 Add prettier to pre-commit

  • PR116

    • Add a catalogue of networks.

    • Add a plotting page to the documentation.

  • PR115

    • Reformat the tutorials in the documentation.

    • Split the “Advanced” tutorial in several smaller files.

    • Remove the Docker installation option.

  • PR114 Use Pint >=0.21 to have the percent unit.

  • PR113 Raise an error when accessing the results of disconnected elements.

  • PR112 Make the geometry serialization optional.

  • PR106 Improvements for non-euclidean projections.

  • PR104 Remove roseau.load_flow.utils.BranchType.

  • GH99 Add Line.res_series_currents and Line.res_shunt_currents properties to get the currents in the series and shunt components of lines. Also added ElectricalNetwork.res_lines that contains the series losses and currents of all the lines in the network. The property ElectricalNetwork.res_lines_losses was removed.

  • GH100 Fix the Yz transformers.

  • PR97 Add the model section to the documentation.

  • PR96

    • Add single-phase transformer.

    • Add center-tapped transformer.

    • Remove the roseau.load_flow.utils.TransformerType enumeration.

  • PR93 Add short-circuit computation.

  • PR92

    • Add the changelog in the documentation.

    • Use Node.js 20 in the Dockerfile.

    • Correction of a dead link in the README.

Version 0.4.0

  • PR91 Rename resolution_method into solver.

  • GH73 PR85 Rename precision into tolerance and final_precision into residual.

  • PR82 Add the "newton_goldstein" solver.

  • PR88 Increase the default alpha values for flexible parameters.

Version 0.3.0

  • Every network elements have an id which must be unique among the same type of elements.

  • The argument n (number of ports) have been replaced by a phase(s) argument which can be for instance an, abc, abcn, ca, etc.

  • The classes SimplifiedLine and ShuntLine have been merged into a single class Line whose behaviour depends on the provided LineParameters.

  • The classes DeltaDeltaTransformer, DeltaWyeTransformer, DeltaZigzagTransformer, WyeDeltaTransformer, WyeWyeTransformer and WyeZigzagTransformer have been replaced by an unique Transformer class whose behaviour depends on the provided TransformerParameter.

  • The classes LineCharacteristics and TransformerCharacteristics have been renamed into LineParameters and TransformerParameters.

  • The classes AdmittanceLoad and DeltaAdmittanceLoad have been removed. Please use ImpedanceLoad instead, with the desired phases argument.

  • The classes DeltaImpedanceLoad and DeltaPowerLoad have been removed. Please use the classes ImpedanceLoad and PowerLoad instead with phases="abc".

  • The class FlexibleLoad have been removed. Please use the new flexible_params argument of the PowerLoad class constructor.

  • The VoltageSource is not anymore a subclass of the class Bus. It can now be connected to a bus just like a load.

  • All elements are aware of the network they belong to. It helps the user to avoid mistakes (connecting elements from different networks). It also allows showing user warnings when accessing to outdated results.

  • All properties retrieving results are now prefixed by res_.

  • Additional results per elements: res_potentials, res_voltages, res_series_losses, res_lie_losses, etc.

  • Pandas Data frame results: now, every result can be retrieved in Pandas Data frame from the ElectricalNetwork instance. These methods are also prefixed by res_.

  • Every physical input can be given as quantities (magnitude and unit) using the Q_ class.

  • Every result (except Pandas data frame) are quantities (magnitude and unit).

  • Elements can all be serialized as JSON.

  • Results of an ElectricalNetwork can be serialized as JSON and read from a JSON file.

  • The documentation has been improved.