======
Barril
.. image:: https://img.shields.io/pypi/v/barril.svg
:target: https://pypi.python.org/pypi/barril
.. image:: https://img.shields.io/pypi/pyversions/barril.svg
:target: https://pypi.org/project/barril
.. image:: https://github.com/ESSS/barril/workflows/test/badge.svg
:target: https://github.com/ESSS/barril/actions
.. image:: https://codecov.io/gh/ESSS/barril/branch/master/graph/badge.svg
:target: https://codecov.io/gh/ESSS/barril
.. image:: https://img.shields.io/readthedocs/barril.svg
:target: https://barril.readthedocs.io/en/latest/
.. image:: https://sonarcloud.io/api/project_badges/measure?project=ESSS_barril&metric=alert_status
:target: https://sonarcloud.io/project/overview?id=ESSS_barril
What is Barril?
Python package to manage units for physical quantities.
Quick example:
.. code-block:: python
from barril.units import Scalar
s1 = Scalar(10, "m")
s2 = Scalar(500, "cm")
assert s1 + s2 == Scalar(15, "m")
Features
- Pre-defined unit database containing several physical quantities for the Oil & Gas industry.
- Data types with an associated unit:
Scalar
, Array
, Quantity
, FixedArray
. - Automatic conversion during arithmetic operations.
Development
For complete description of what type of contributions are possible,
see the full CONTRIBUTING <CONTRIBUTING.rst>
_ guide.
Here is a quick summary of the steps necessary to setup your environment to contribute to barril
.
#. Create a virtual environment and activate it::
$ python -m virtualenv .env
$ .env\Scripts\activate # windows
$ source .env/bin/activate # linux
.. note::
If you use ``conda``, you can install ``virtualenv`` in the root environment::
$ conda install -n root virtualenv
Don't worry as this is safe to do.
#. Update pip
::
$ python -m pip install -U pip
#. Install development dependencies::
$ pip install -e .[testing]
#. Install pre-commit::
$ pre-commit install
#. Run tests::
$ pytest --pyargs barril
#. Generate docs locally::
$ tox -e docs
The documentation files will be generated in docs/_build
.
Release
A reminder for the maintainers on how to make a new release.
Note that the VERSION should folow the semantic versioning as X.Y.Z
Ex.: v1.0.5
- Create a
release-VERSION
branch from upstream/master
. - Update
CHANGELOG.rst
. - Push a branch with the changes.
- Once all builds pass, push a
VERSION
tag to upstream
. - Merge the PR.
Credits
This package was created with Cookiecutter_ and the audreyr/cookiecutter-pypackage
_ project template.
.. _audreyr/cookiecutter-pypackage
: https://github.com/audreyr/cookiecutter-pypackage
.. _GitHub page
: https://github.com/ESSS/barril
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _pytest: https://github.com/pytest-dev/pytest
.. _tox: https://github.com/tox-dev/tox
2.0.1 (2024-02-15)
- Added support for Python 3.11 and 3.12.
- Dropped support for EOL Python 3.6 and 3.7.
- Add categorie and quantity type
henry solubility coefficient
(mol/m3.Pa
) - Add categorie and quantity type
crystallization kinetic rate
(mol/m2.s.Pa
)
1.19.0 (2023-08-10)
- Define the category and quantity type
density derivative in respect to enthalpy
(default unit: kg2/m3.J
).
1.18.0 (2023-06-01)
- Define categories
forchheimer linear productivity index
and forchheimer linear productivity index
. - Define quantity types
forchheimer linear productivity index
and forchheimer quadratic productivity index
. - Add units to categories
forchheimer linear productivity index
and forchheimer quadratic productivity index
.
1.17.0 (2023-05-02)
- Standardize the usage of
lbmol
- Add more valid units for
mole per mass
category
1.16.0 (2023-04-26)
- Add more units for
mole per mass
quantity. - Define a
molality
category.
1.15.0 (2023-04-03)
- Add
cubic meter per day per kilogram-force per square centimeter
(m3/d/kgf/cm2
) unit to productivity index
category. - Add gauge pressures units
Pa(g)
, kPa(g)
, bar(g)
, and kgf/cm2(g)
to pressure
category.
1.14.1 (2022-11-03)
- Add
mole per mass
quantity (mol/kg
).
1.13.0 (2021-11-30)
- Update
Newton second per meter
unit from Ns/m
to N.s/m
to get unit display consistent with other units in the same category (support for the old unit input added). - Add
force per velocity squared
quantity (N.s2/m2
, lbf.s2/ft2
, lbf.s2/in2
, kgf.s2/m2
).
1.12.0 (2021-11-08)
barril
is now fully type annotated, being tested with mypy
.Array
and FixedArray
are Generic
subclasses, parametrized by the container type.
1.11.1 (2021-10-08)
- Fixed typos in unit names:
kilkodynes
(unit=kdyne) fixed to kilodynes
, killowatts/cubic metre degree Kelvin
(unit=kW/m3.K) fixed to kilowatts/cubic metre degree Kelvin
.
1.11.0 (2021-06-18)
- Add new unit: "Stokes" (
St
). - Use
TypeCheckingSupport
from oop-ext 1.1
. - Add
cubic feet per day per psi
(ft3/psi.d
) unit to productivity index
category. - Add
calories/metre hour degree Celsius
(cal/m.h.degC
) unit to thermal conductivity
category. - Add
calorie/hour square metre deg C
(cal/h.m2.degC
) unit to heat transfer coefficient
category. - Add
std cubic metres/second
(sm3/s
) unit to standard volume per time
category. - Add
million std cubic feet/stock tank barrel
(MMscf/stb
), stock tank barrel/std cubic feet
(stb/scf
) and stock tank barrel/million std cubic feet
(stb/MMscf
) units to standard volume per standard volume
category.
1.10.0 (2020-10-22)
- Removing
thermodynamic temperature
as default category for degF
and degR
units.
1.9.0 (2020-02-20)
- New
classmethod
Array.FromScalars
that creates an Array
from a List[Scalar]
. - Add new unit: "barrel per second" (
bbl/s
).
1.8.0 (2020-01-10)
- Add new category: "standard volume per standard volume".
- Move unit
sm3/sm3
from "volume per volume" to "standard volume per standard volume".
1.7.2 (2019-10-16)
_foundation
has been renamed to _util
, and a lot of functions which were not being
used anymore have been removed.- Add new unit category mass temperature per mol (
kg.K/mol
). - Some units have been renamed as they were deemed out-of-place in the oil industry to something more usual (for example,
1000ft3/d
became Mcf/d
).
The old representation of those units is still supported, but they will be automatically translated during Quantity
creation, so this change should not affect users much. - Fix division
1.0 / a
where a
is a Scalar
or Array
and also add support for floor
division, i.e., operations like a // b
where a
and b
are Scalar
or Array
(and combinations with float
or int
). - Add new unit category for Joule-Thomson coefficient (
K/Pa
). - Add new temperature unit for density derivative in respect to temperature (
kg/m3.K
).
1.7.1 (2019-10-03)
- Fixed bug in
/
and -
operators for FixedArray
.
1.7.0 (2019-06-18)
1.6.1 (2019-04-11)
- Change export to include ICurve and Curve and exclude IReadOnlyScalar.
1.6.0 (2019-04-10)
- Add curve implementation.
- Add support to interfaces from oop-ext.
- Drop support to Python 2.
1.5.0 (2019-01-09)
Quantity.CheckValue
now raises QuantityValidationError
instead of ValueError
.
1.4.0 (2018-12-17)
- Add new category for "concentration ratio".
1.3.0 (2018-10-13)
- Add "per micrometre" unit to "per length" category.
- Remove internal
barril.fixtures
module as it is not necessary or part of the public API.
1.2.0 (2018-09-26)
- Add units for defining Spring-Dashpot movements.
1.1.0 (2018-09-24)
- Add
number
and fraction
properties to FractionValue
. - Add
unit
read-only property to Quantity
.
1.0.0 (2018-09-21)
0.1.0 (2018-09-03)