Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/neqsim-engine.sha256
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ba8ab3749355fb9983d09a14892e6a23e7bac929f60547ce9db7b5bf4e18b139 neqsim-3.24.0.jar
0741834bf64b73f26fe889516809487c047f6415d55ed7223f49ad4f95b8e60c neqsim-3.26.0.jar
2 changes: 1 addition & 1 deletion conda/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% set name = "neqsim" %}
{% set version = "3.24.0" %}
{% set version = "3.26.0" %}

package:
name: {{ name|lower }}
Expand Down
67 changes: 67 additions & 0 deletions docs/release-notes/v3.26.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# NeqSim Python 3.26.0

NeqSim Python is the Python interface to the NeqSim engine for thermodynamic
calculations, physical properties, process simulation, and PVT analysis from
Python and Jupyter notebooks.

## Highlights

- Bundles the NeqSim Java 3.26.0 engine for Java 17 or newer. This release
also carries all changes from NeqSim Java 3.25.0.
- Thermodynamic fixes: wet gas-condensate flashes recover a missing aqueous
phase, phase mass fractions are derived from conserved inventory, pure-fluid
saturation enforces domain guards with a corrected hydrocarbon dew
equilibrium, and CPA and electrolyte-CPA phase state is isolated across
clones. Electrolyte derivative consistency and the CO2/KCl response are
corrected.
- Standards and data: the ISO 6976:2016 60 F air compression factor is
corrected, unsupported ISO 6976 reference temperatures are rejected, and the
DEA component identity is reconciled with the Henry source inventory.
- E300 fluid files: `VCRIT` is written in m3/kmol and `ZCRIT` as a
dimensionless value, and `VCRIT` is converted on read.
- Process fixes: heater input specifications are invalidated when changed,
distillation terminal duties are calculated from published streams, pump
best-efficiency-point and operating status follow the requested speed, and
compressor speed solves report consistent results and convergence.
- Pipeline and network: signed-face complementarity and transitions, an
experimental non-equilibrium post-pigging film transfer model, explicit
surface temperature profile units, and fail-closed handling of mapped
compressor errors and incomplete pump operating points.
- New capability: catalytic reforming balance and complete TBP-table blending
for refinery studies, plus ANP Annex XX profit-oil share tables.
- Internal: the Jama linear-algebra dependency is removed in favor of EJML.
Java code that used Jama matrices in extension hooks must migrate to EJML
`SimpleMatrix`; the Python API is unchanged.
- Retains Python 3.10-3.14 support and the existing NeqSim Python API.

## Install

Use pip when you already have Java installed:

```bash
pip install --upgrade neqsim==3.26.0
```

Use conda when you want OpenJDK installed with the package:

```bash
conda install -c conda-forge neqsim=3.26.0
```

Requirements:

- Python 3.10 or newer.
- Java 17 or newer for pip installs. Download Java from
[Adoptium](https://adoptium.net/).
- Conda installs include OpenJDK through conda-forge.

Verify the installed package version without starting the JVM:

```bash
python -c "from importlib.metadata import version; print(version('neqsim'))"
```

## Useful Links

- Full changelog: https://github.com/equinor/neqsim-python/compare/v3.24.0...v3.26.0
- NeqSim Java 3.26.0 release: https://github.com/equinor/neqsim/releases/tag/v3.26.0
2 changes: 1 addition & 1 deletion environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ dependencies:
# Install neqsim from PyPI until conda-forge package is available
- pip
- pip:
- neqsim==3.24.0
- neqsim==3.26.0
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "neqsim"
version = "3.24.0"
version = "3.26.0"
description = "NeqSim is a tool for thermodynamic and process calculations"
authors = [{ name = "Even Solbraa", email = "esolbraa@gmail.com" }]
requires-python = ">=3.10,<4"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ if sys.version_info >= (3, 8):
else:
from typing_extensions import Protocol

import Jama
import java.io
import java.lang
import java.util
Expand Down Expand Up @@ -62,7 +61,6 @@ class ChemicalEquilibrium(java.io.Serializable):
class LinearProgrammingChemicalEquilibrium(jneqsim.thermo.ThermodynamicConstantsInterface):
def __init__(self, doubleArray: typing.Union[typing.List[float], jpype.JArray], componentInterfaceArray: typing.Union[typing.List[jneqsim.thermo.component.ComponentInterface], jpype.JArray], stringArray: typing.Union[typing.List[java.lang.String], jpype.JArray], chemicalReactionOperations: jneqsim.chemicalreactions.ChemicalReactionOperations, int: int): ...
def calcA(self) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def calcx(self, matrix: Jama.Matrix, matrix2: Jama.Matrix) -> None: ...
def changePrimaryComponents(self) -> None: ...
def generateInitialEstimates(self, systemInterface: jneqsim.thermo.system.SystemInterface, doubleArray: typing.Union[typing.List[float], jpype.JArray], double2: float, int: int) -> typing.MutableSequence[float]: ...
def getA(self) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ if sys.version_info >= (3, 8):
else:
from typing_extensions import Protocol

import Jama
import java.lang
import java.util
import jpype
Expand Down Expand Up @@ -115,7 +114,7 @@ class ChemicalReactionFactory:
class ChemicalReactionList(jneqsim.thermo.ThermodynamicConstantsInterface):
def __init__(self): ...
def calcReacMatrix(self, phaseInterface: jneqsim.thermo.phase.PhaseInterface) -> None: ...
def calcReacRates(self, phaseInterface: jneqsim.thermo.phase.PhaseInterface, componentInterfaceArray: typing.Union[typing.List[jneqsim.thermo.component.ComponentInterface], jpype.JArray]) -> Jama.Matrix: ...
def calcReationRates(self, phaseInterface: jneqsim.thermo.phase.PhaseInterface, componentInterfaceArray: typing.Union[typing.List[jneqsim.thermo.component.ComponentInterface], jpype.JArray]) -> typing.MutableSequence[float]: ...
def calcReferencePotentials(self) -> typing.MutableSequence[float]: ...
def checkReactions(self, phaseInterface: jneqsim.thermo.phase.PhaseInterface) -> None: ...
def createReactionMatrix(self, phaseInterface: jneqsim.thermo.phase.PhaseInterface, componentInterfaceArray: typing.Union[typing.List[jneqsim.thermo.component.ComponentInterface], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ if sys.version_info >= (3, 8):
else:
from typing_extensions import Protocol

import Jama
import java.io
import java.lang
import jneqsim.fluidmechanics.flownode
Expand All @@ -31,7 +30,7 @@ class FluidBoundaryInterface(java.lang.Cloneable):
def getInterphaseHeatFlux(self, int: int) -> float: ...
def getInterphaseMolarFlux(self, int: int) -> float: ...
def getInterphaseSystem(self) -> jneqsim.thermo.system.SystemInterface: ...
def getMassTransferCoefficientMatrix(self) -> typing.MutableSequence[Jama.Matrix]: ...
def getMassTransferCoefficientArray(self) -> typing.MutableSequence[typing.MutableSequence[typing.MutableSequence[float]]]: ...
def heatTransSolve(self) -> None: ...
def isHeatTransferCalc(self) -> bool: ...
def massTransSolve(self) -> None: ...
Expand Down Expand Up @@ -133,7 +132,7 @@ class FluidBoundary(FluidBoundaryInterface, java.io.Serializable):
def getInterphaseMolarFlux(self, int: int) -> float: ...
def getInterphaseOpertions(self) -> jneqsim.thermodynamicoperations.ThermodynamicOperations: ...
def getInterphaseSystem(self) -> jneqsim.thermo.system.SystemInterface: ...
def getMassTransferCoefficientMatrix(self) -> typing.MutableSequence[Jama.Matrix]: ...
def getMassTransferCoefficientArray(self) -> typing.MutableSequence[typing.MutableSequence[typing.MutableSequence[float]]]: ...
def heatTransSolve(self) -> None: ...
def init(self) -> None: ...
def initHeatTransferCalc(self) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class KrishnaStandartFilmModel(jneqsim.fluidmechanics.flownode.fluidboundary.hea
def calcPhiMatrix(self, int: int) -> None: ...
def calcRedCorrectionMatrix(self, int: int) -> None: ...
def calcRedPhiMatrix(self, int: int) -> None: ...
def calcTotalMassTransferCoefficientMatrix(self, int: int) -> None: ...
def calcTotalMassTransferCoefficientArray(self, int: int) -> None: ...
def clone(self) -> 'KrishnaStandartFilmModel': ...
def init(self) -> None: ...
def initCorrections(self, int: int) -> None: ...
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class ReactiveKrishnaStandartFilmModel(jneqsim.fluidmechanics.flownode.fluidboun
def __init__(self, flowNodeInterface: jneqsim.fluidmechanics.flownode.FlowNodeInterface): ...
@typing.overload
def __init__(self, systemInterface: jneqsim.thermo.system.SystemInterface): ...
def calcTotalMassTransferCoefficientMatrix(self, int: int) -> None: ...
def calcTotalMassTransferCoefficientArray(self, int: int) -> None: ...
def setEnhancementType(self, int: int) -> None: ...


Expand Down
41 changes: 6 additions & 35 deletions src/jneqsim-stubs/mathlib/linearalgebra/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@ else:

import java.lang
import jpype
import org.ejml.simple
import typing



class EjmlMatrixUtils:
@staticmethod
def toArray(simpleMatrix: org.ejml.simple.SimpleMatrix) -> typing.MutableSequence[typing.MutableSequence[float]]: ...

class LinearAlgebraException(java.lang.RuntimeException):
@typing.overload
def __init__(self, string: typing.Union[java.lang.String, str]): ...
Expand Down Expand Up @@ -83,45 +88,11 @@ class EjmlLinearAlgebra(LinearAlgebraOperations):
def transpose(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def withSubmatrix(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], int: int, int2: int, doubleArray2: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...

class JamaLinearAlgebra(LinearAlgebraOperations):
NAME: typing.ClassVar[java.lang.String] = ...
def __init__(self): ...
@typing.overload
def add(self, doubleArray: typing.Union[typing.List[float], jpype.JArray], doubleArray2: typing.Union[typing.List[float], jpype.JArray]) -> typing.MutableSequence[float]: ...
@typing.overload
def add(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def conditionNumber(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> float: ...
def determinant(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> float: ...
def euclideanNorm(self, doubleArray: typing.Union[typing.List[float], jpype.JArray]) -> float: ...
def getName(self) -> java.lang.String: ...
def identity(self, int: int) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def invert(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
@typing.overload
def multiply(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[float], jpype.JArray]) -> typing.MutableSequence[float]: ...
@typing.overload
def multiply(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def oneNorm(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> float: ...
def rank(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> int: ...
@typing.overload
def scale(self, doubleArray: typing.Union[typing.List[float], jpype.JArray], double2: float) -> typing.MutableSequence[float]: ...
@typing.overload
def scale(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], double2: float) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def solve(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[float], jpype.JArray]) -> typing.MutableSequence[float]: ...
def solveLeastSquares(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[float], jpype.JArray]) -> typing.MutableSequence[float]: ...
def spectralNorm(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> float: ...
def submatrix(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], int: int, int2: int, int3: int, int4: int) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
@typing.overload
def subtract(self, doubleArray: typing.Union[typing.List[float], jpype.JArray], doubleArray2: typing.Union[typing.List[float], jpype.JArray]) -> typing.MutableSequence[float]: ...
@typing.overload
def subtract(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], doubleArray2: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def transpose(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...
def withSubmatrix(self, doubleArray: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray], int: int, int2: int, doubleArray2: typing.Union[typing.List[typing.MutableSequence[float]], jpype.JArray]) -> typing.MutableSequence[typing.MutableSequence[float]]: ...


class __module_protocol__(Protocol):
# A module protocol which reflects the result of ``jp.JPackage("jneqsim.mathlib.linearalgebra")``.

EjmlLinearAlgebra: typing.Type[EjmlLinearAlgebra]
JamaLinearAlgebra: typing.Type[JamaLinearAlgebra]
EjmlMatrixUtils: typing.Type[EjmlMatrixUtils]
LinearAlgebraException: typing.Type[LinearAlgebraException]
LinearAlgebraOperations: typing.Type[LinearAlgebraOperations]
131 changes: 0 additions & 131 deletions src/jneqsim-stubs/mcp/catalog/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -116,136 +116,6 @@ class ExampleCatalog:
@staticmethod
def waterHammerValveClosure() -> java.lang.String: ...

class SchemaCatalog:
@staticmethod
def barrierRegisterInputSchema() -> java.lang.String: ...
@staticmethod
def barrierRegisterOutputSchema() -> java.lang.String: ...
@staticmethod
def batchInputSchema() -> java.lang.String: ...
@staticmethod
def batchOutputSchema() -> java.lang.String: ...
@staticmethod
def bioprocessInputSchema() -> java.lang.String: ...
@staticmethod
def capabilitiesInputSchema() -> java.lang.String: ...
@staticmethod
def capabilitiesOutputSchema() -> java.lang.String: ...
@staticmethod
def chemistryInputSchema() -> java.lang.String: ...
@staticmethod
def comparisonInputSchema() -> java.lang.String: ...
@staticmethod
def componentSearchInputSchema() -> java.lang.String: ...
@staticmethod
def componentSearchOutputSchema() -> java.lang.String: ...
@staticmethod
def dynamicInputSchema() -> java.lang.String: ...
@staticmethod
def dynamicOutputSchema() -> java.lang.String: ...
@staticmethod
def equipmentSizingInputSchema() -> java.lang.String: ...
@staticmethod
def equipmentSizingOutputSchema() -> java.lang.String: ...
@staticmethod
def fieldEconomicsInputSchema() -> java.lang.String: ...
@staticmethod
def flareNetworkInputSchema() -> java.lang.String: ...
@staticmethod
def flashInputSchema() -> java.lang.String: ...
@staticmethod
def flashOutputSchema() -> java.lang.String: ...
@staticmethod
def flowAssuranceInputSchema() -> java.lang.String: ...
@staticmethod
def getCatalogJson() -> java.lang.String: ...
@staticmethod
def getSchema(string: typing.Union[java.lang.String, str], string2: typing.Union[java.lang.String, str]) -> java.lang.String: ...
@staticmethod
def getToolNames() -> java.util.List[java.lang.String]: ...
@staticmethod
def hasDetailedInputSchema(string: typing.Union[java.lang.String, str]) -> bool: ...
@staticmethod
def hazopInputSchema() -> java.lang.String: ...
@staticmethod
def hazopOutputSchema() -> java.lang.String: ...
@staticmethod
def hazopScenarioInputSchema() -> java.lang.String: ...
@staticmethod
def inspectApiInputSchema() -> java.lang.String: ...
@staticmethod
def inspectApiOutputSchema() -> java.lang.String: ...
@staticmethod
def lopaInputSchema() -> java.lang.String: ...
@staticmethod
def materialsReviewInputSchema() -> java.lang.String: ...
@staticmethod
def materialsReviewOutputSchema() -> java.lang.String: ...
@staticmethod
def normalizeToolName(string: typing.Union[java.lang.String, str]) -> java.lang.String: ...
@staticmethod
def norsokS001Clause10ReviewInputSchema() -> java.lang.String: ...
@staticmethod
def norsokS001Clause10ReviewOutputSchema() -> java.lang.String: ...
@staticmethod
def openDrainReviewInputSchema() -> java.lang.String: ...
@staticmethod
def openDrainReviewOutputSchema() -> java.lang.String: ...
@staticmethod
def parametricStudyInputSchema() -> java.lang.String: ...
@staticmethod
def phaseEnvelopeInputSchema() -> java.lang.String: ...
@staticmethod
def phaseEnvelopeOutputSchema() -> java.lang.String: ...
@staticmethod
def pipelineInputSchema() -> java.lang.String: ...
@staticmethod
def processInputSchema() -> java.lang.String: ...
@staticmethod
def processOutputSchema() -> java.lang.String: ...
@staticmethod
def propertyTableInputSchema() -> java.lang.String: ...
@staticmethod
def propertyTableOutputSchema() -> java.lang.String: ...
@staticmethod
def pvtInputSchema() -> java.lang.String: ...
@staticmethod
def pvtOutputSchema() -> java.lang.String: ...
@staticmethod
def reliefInputSchema() -> java.lang.String: ...
@staticmethod
def reservoirInputSchema() -> java.lang.String: ...
@staticmethod
def riskMatrixInputSchema() -> java.lang.String: ...
@staticmethod
def rootCauseInputSchema() -> java.lang.String: ...
@staticmethod
def rootCauseOutputSchema() -> java.lang.String: ...
@staticmethod
def runCapabilityInputSchema() -> java.lang.String: ...
@staticmethod
def runCapabilityOutputSchema() -> java.lang.String: ...
@staticmethod
def safetySystemPerformanceInputSchema() -> java.lang.String: ...
@staticmethod
def safetySystemPerformanceOutputSchema() -> java.lang.String: ...
@staticmethod
def sessionInputSchema() -> java.lang.String: ...
@staticmethod
def silInputSchema() -> java.lang.String: ...
@staticmethod
def standardsInputSchema() -> java.lang.String: ...
@staticmethod
def utilityDesignInputSchema() -> java.lang.String: ...
@staticmethod
def validateInputSchema() -> java.lang.String: ...
@staticmethod
def validateOutputSchema() -> java.lang.String: ...
@staticmethod
def visualizationInputSchema() -> java.lang.String: ...
@staticmethod
def waterHammerInputSchema() -> java.lang.String: ...

class SchemaChecker:
@staticmethod
def check(jsonElement: com.google.gson.JsonElement, jsonElement2: com.google.gson.JsonElement, string: typing.Union[java.lang.String, str], list: java.util.List[typing.Union[java.lang.String, str]]) -> None: ...
Expand All @@ -257,5 +127,4 @@ class __module_protocol__(Protocol):
# A module protocol which reflects the result of ``jp.JPackage("jneqsim.mcp.catalog")``.

ExampleCatalog: typing.Type[ExampleCatalog]
SchemaCatalog: typing.Type[SchemaCatalog]
SchemaChecker: typing.Type[SchemaChecker]
Loading
Loading