Skip to content

Commit

Permalink
Merge pull request #31 from equinor/logging
Browse files Browse the repository at this point in the history
Use python logging
  • Loading branch information
berland authored Oct 3, 2019
2 parents 3c8be03 + 2f8b67f commit d94ecf9
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 43 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ language: python

python:
- '2.7'
- '3.5'
#- '3.5' # disabled due to travis bug
- '3.6'
- '3.7'

Expand All @@ -22,5 +22,5 @@ deploy:
secure: "tmv4rjGV4v4iqPEziUcHfTUg5mObF4i8jX4rTyfeom2NfOObT+ytHwt4yW3xPK8O8FgXoDTNGtCj/cc7Bf/oTS4FNKGuhceTr7/bkaQYdLDlVjlWXsx3A9QeHF+29nBfBOEfirj6v9UL/eDxTZCBThoxAZ89LDO5WWeoa7E4A6C4I2ctu+UaGiqCk0j+MpIjy0IDUyLl36KZeDowIgm05Wo//IGh1AaRY9SuzKChPE/HsOEcMNyh2kP8iKITmCKFaMnPLhsm/i3D6lEN9SZN+O4APddSTGs8moyyYBLyTvmUcEI8R1igLL/0G/yjlBfu4FmVEvznV1+GQOt9MHU0WL4N1p2VKLff20TVhhto8CH3zHjLz+vDpjq444Gg2/HB/OynNtbyzfUONap6z61kMvd/uu2EfBh1OlewQA+PPAm1F5Rt7U52D1umbsZ9IGaLUp5o2eLjmdor770FE+MpFX02cGGQYM1Nx9IckJNLVoZtlX2G7wzmYsoflzkNvbdu9x+jCI71WUBBszhBj+XePxtF31DRoV8Jg+wxvZX93MYgV76c4su02cd/+02UiDWAAfVvl5e7N77vikRicqIquN9GdOSi/kwJDeJlAfpAFaY1j/LU2tcNLmVcaEFK9/XNliO+0e8wlB7d/KsNF5AFon2ukg92Ebs3KerHT2voGng="
keep_history: true
on:
branch: master
branch: master
python: "3.6"
45 changes: 27 additions & 18 deletions pyscal/gasoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import division, absolute_import
from __future__ import print_function

import logging
import numpy as np
import pandas as pd

Expand Down Expand Up @@ -69,7 +70,7 @@ def __init__(
self.swirr = swirr
if not np.isclose(sorg, 0.0) and sorg < 1.0 / SWINTEGERS:
# Too small but nonzero sorg gives too many numerical issues.
print("sorg was close to zero, set to zero")
logging.warning("sorg was close to zero, set to zero")
sorg = 0.0
self.sorg = sorg

Expand All @@ -82,7 +83,7 @@ def __init__(
if krgendanchor in ["sorg", ""]:
self.krgendanchor = krgendanchor
else:
print("Unknown krgendanchor %s, ignored" % str(krgendanchor))
logging.warning("Unknown krgendanchor %s, ignored", str(krgendanchor))
self.krgendanchor = ""
if np.isclose(sorg, 0.0) and self.krgendanchor == "sorg":
# This is too much info..
Expand Down Expand Up @@ -142,6 +143,10 @@ def __init__(
self.krogcomment = ""
self.pccomment = ""

logging.info(
"Initialized GasOil with %s saturation points", str(len(self.table))
)

def resetsorg(self):
"""Recalculate sorg in case it has table data has been manipulated"""
if "krog" in self.table.columns:
Expand Down Expand Up @@ -183,15 +188,16 @@ def add_gasoil_fromtable(
from scipy.interpolate import PchipInterpolator

if sgcolname not in df:
raise Exception(
logging.critical(
sgcolname + " not found in dataframe, " + "can't read table data"
)
raise ValueError
swlfrominput = 1 - df[sgcolname].max()
if abs(swlfrominput - self.swl) < epsilon:
print(
"Warning: swl and 1-max(sg) from incoming table does not seem compatible"
logging.warning(
"swl and 1-max(sg) from incoming table does not seem compatible"
)
print(" Do not trust the result near the endpoint.")
logging.warning(" Do not trust the result near the endpoint.")
if krgcolname in df:
pchip = PchipInterpolator(
df[sgcolname].astype(float), df[krgcolname].astype(float)
Expand Down Expand Up @@ -236,7 +242,7 @@ def _handle_endpoints_linearpart_gas(self, krgend, krgmax=None):
else:
self.table.loc[self.table.sg > (1 - (self.swl + epsilon)), "krg"] = krgend
if krgmax:
print("Warning: krgmax ignored when not anchoring to sorg")
logging.warning("krgmax ignored when not anchoring to sorg")

def _handle_endpoints_linearpart_oil(self, kroend, kromax):
"""Internal utility function to handle kro
Expand All @@ -255,7 +261,7 @@ def _handle_endpoints_linearpart_oil(self, kroend, kromax):
self.table.loc[self.table["sg"] < epsilon, "krog"] = kromax
else:
if kromax:
print("Warning: kromax ignored when sgcr is close to swl")
logging.warning("kromax ignored when sgcr is close to swl")
self.table.loc[self.table["sg"] < epsilon, "krog"] = kroend

def add_corey_gas(self, ng=2, krgend=1, krgmax=None):
Expand Down Expand Up @@ -426,38 +432,39 @@ def selfcheck(self):
"""
error = False
if not (self.table.sg.diff().dropna() > -epsilon).all():
print("Error: sg data not strictly increasing")
logging.error("sg data not strictly increasing")
error = True
if not (self.table.krg.diff().dropna() >= -epsilon).all():
print("Error: krg data not monotonically decreasing")
logging.error("krg data not monotonically decreasing")
error = True

if (
"krog" in self.table.columns
and not (self.table.krog.diff().dropna() <= epsilon).all()
):
print("Error: krog data not monotonically increasing")
logging.error("krog data not monotonically increasing")
error = True
if not np.isclose(min(self.table.krg), 0.0):
print("Error: krg must start at zero")
logging.error("krg must start at zero")
error = True
if "pc" in self.table.columns and self.table.pc[0] > 0:
if not (self.table.pc.diff().dropna() < epsilon).all():
print("Error: pc data for gas-oil not strictly deceasing")
logging.error("pc data for gas-oil not strictly deceasing")
error = True
if "pc" in self.table.columns and np.isinf(self.table.pc.max()):
print("Error: pc goes to infinity for gas-oil. ")
logging.error("pc goes to infinity for gas-oil. ")
error = True
for col in list(set(["sg", "krg", "krog"]) & set(self.table.columns)):
if not (
(min(self.table[col]) >= -epsilon)
and (max(self.table[col]) <= 1 + epsilon)
):
print("Error: %s data should be contained in [0,1]" % col)
logging.error("%s data should be contained in [0,1]", col)
error = True
if error:
return False
else:
logging.info("GasOil object is checked to be valid")
return True

def SGOF(self, header=True, dataincommentrow=True):
Expand Down Expand Up @@ -530,9 +537,11 @@ def slgof_df(self):
slgof.drop_duplicates("slint", inplace=True)
else:
# Give up repairing the table:
print("BUG: SLGOF does not start at the correct value. Please report.")
print("slgof_sl_mismatch: %f" % slgof_sl_mismatch)
print(slgof.head())
logging.critical(
"SLGOF does not start at the correct value. Please report as bug."
)
logging.error("slgof_sl_mismatch: %f", slgof_sl_mismatcher)
logging.error(str(slgof.head()))
return slgof

def SLGOF(self, header=True, dataincommentrow=True):
Expand Down
5 changes: 3 additions & 2 deletions pyscal/scalrecommendation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-

import copy
import logging
import numpy as np
import pandas as pd

Expand Down Expand Up @@ -227,7 +228,7 @@ def interpolate(self, parameter, parameter2=None, h=0.02):
interpolant = WaterOilGas()

if abs(parameter) > 1.0:
print("ERROR: Interpolation parameter must be in [-1,1]")
logging.error("Interpolation parameter must be in [-1,1]")
interpolant.wateroil = None
raise AssertionError
elif np.isclose(parameter, 0.0):
Expand Down Expand Up @@ -291,7 +292,7 @@ def interpolate(self, parameter, parameter2=None, h=0.02):
# We need swl from the interpolated WaterOil object.
swl = interpolant.wateroil.swl
if abs(gasparameter) > 1.0:
print("ERROR: Interpolation parameter must be in [-1,1]")
logging.error("Interpolation parameter must be in [-1,1]")
interpolant.gasoil = None
raise AssertionError
elif np.isclose(gasparameter, 0.0):
Expand Down
47 changes: 27 additions & 20 deletions pyscal/wateroil.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from __future__ import print_function

import math
import logging
import numpy as np
import pandas as pd

Expand Down Expand Up @@ -105,6 +106,10 @@ def __init__(self, swirr=0.0, swl=0.0, swcr=0.0, sorw=0.0, h=0.01, tag=""):
self.krowcomment = ""
self.pccomment = ""

logging.info(
"Initialized WaterOil with %s saturation points", str(len(self.table))
)

def add_oilwater_fromtable(
self,
df,
Expand Down Expand Up @@ -144,9 +149,10 @@ def add_oilwater_fromtable(
from scipy.interpolate import PchipInterpolator

if swcolname not in df:
raise Exception(
logging.critical(
swcolname + " not found in dataframe, can't read table data"
)
raise ValueError
if krwcolname in df:
pchip = PchipInterpolator(
df[swcolname].astype(float), df[krwcolname].astype(float)
Expand Down Expand Up @@ -219,7 +225,7 @@ def _handle_endpoints_linearpart_water(self, krwend, krwmax=None):
self.table.loc[self.table["sw"] > (1 - self.sorw - epsilon), "krw"] = krwmax
else:
if krwmax:
print("Warning: krwmax ignored when sorw is zero")
logging.warning("krwmax ignored when sorw is zero")
self.table.loc[self.table["sw"] > (1 - self.sorw - epsilon), "krw"] = krwend
self.table.loc[np.isclose(self.table["sw"], 1 - self.sorw), "krw"] = krwend
self.table.loc[self.table.sw < self.swcr, "krw"] = 0
Expand All @@ -234,7 +240,7 @@ def _handle_endpoints_linearpart_oil(self, kroend, kromax=None):
self.table.loc[self.table["son"] > 1.0 + epsilon, "krow"] = np.nan
if self.swcr < self.swl + self.h:
if kromax:
print("Warning: kromax ignored when swcr is close to swl")
logging.warning("kromax ignored when swcr is close to swl")
self.table.loc[self.table["sw"] <= self.swl + epsilon, "krow"] = kroend
else:
if not kromax:
Expand All @@ -250,7 +256,6 @@ def _handle_endpoints_linearpart_oil(self, kroend, kromax=None):
# Avoid machine accuracy problems around swcr (monotonicity):
self.table.loc[self.table["krow"] > kromax, "krow"] = kromax


def add_LET_water(self, l=2, e=2, t=2, krwend=1, krwmax=None):
"""Add krw data through LET parametrization
Expand Down Expand Up @@ -394,13 +399,14 @@ def add_simple_J(self, a=5, b=-1.5, poro_ref=0.25, perm_ref=100, drho=300, g=9.8
assert perm_ref > 0.0

if self.swl < epsilon:
raise ValueError(
logging.error(
"swl must larger than zero to avoid infinite capillary pressure"
)
raise ValueError

if b > 0:
print(
"Warning: positive b will give increasing capillary pressure with saturation"
logging.warning(
"positive b will give increasing capillary pressure with saturation"
)

# drho = rwo_w - rho_o, in units g/cc
Expand Down Expand Up @@ -436,16 +442,16 @@ def add_skjaeveland_pc(self, cw, co, aw, ao, swr=None, sor=None):
"""
inputerror = False
if cw < 0:
print("cw must be larger or equal to zero")
logging.error("cw must be larger or equal to zero")
inputerror = True
if co > 0:
print("co must be less than zero")
logging.error("co must be less than zero")
inputerror = True
if aw <= 0:
print("aw must be larger than zero")
logging.error("aw must be larger than zero")
inputerror = True
if ao <= 0:
print("ao must be larger than zero")
logging.error("ao must be larger than zero")
inputerror = True

if swr == None:
Expand All @@ -454,13 +460,13 @@ def add_skjaeveland_pc(self, cw, co, aw, ao, swr=None, sor=None):
sor = self.sorw

if swr >= 1 - sor:
print("swr (swirr) must be less than 1 - sor")
logging.error("swr (swirr) must be less than 1 - sor")
inputerror = True
if swr < 0 or swr > 1:
print("swr must be contained in [0,1]")
logging.error("swr must be contained in [0,1]")
inputerror = True
if sor < 0 or sor > 1:
print("sor must be contained in [0,1]")
logging.error("sor must be contained in [0,1]")
inputerror = True
if inputerror:
return False
Expand Down Expand Up @@ -569,34 +575,35 @@ def selfcheck(self):
"""
error = False
if not (self.table.sw.diff().dropna().round(10) > -epsilon).all():
print("Error: sw data not strictly increasing")
logging.error("sw data not strictly increasing")
error = True
if not (self.table.krw.diff().dropna().round(10) >= -epsilon).all():
print("Error: krw data not monotonically increasing")
logging.error("krw data not monotonically increasing")
error = True
if (
"krow" in self.table.columns
and not (self.table.krow.diff().dropna().round(10) <= epsilon).all()
):
print("Error: krow data not monotonically decreasing")
logging.error("krow data not monotonically decreasing")
error = True
if "pc" in self.table.columns and self.table.pc[0] > -epsilon:
if not (self.table.pc.diff().dropna().round(10) < epsilon).all():
print("Error: pc data not strictly decreasing")
logging.error("pc data not strictly decreasing")
error = True
if "pc" in self.table.columns and np.isinf(self.table.pc.max()):
print("Error: pc goes to infinity. Maybe swirr=swl?")
logging.error("pc goes to infinity. Maybe swirr=swl?")
error = True
for col in list(set(["sw", "krw", "krow"]) & set(self.table.columns)):
if not (
(round(min(self.table[col]), 10) >= -epsilon)
and (round(max(self.table[col]), 10) <= 1 + epsilon)
):
print("Error: %s data should be contained in [0,1]" % col)
logging.error("%s data should be contained in [0,1]", col)
error = True
if error:
return False
else:
logging.info("WaterOil object is checked to be valid")
return True

def SWOF(self, header=True, dataincommentrow=True):
Expand Down
3 changes: 2 additions & 1 deletion pyscal/wateroilgas.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import division, absolute_import
from __future__ import print_function

import logging
import numpy as np
import pandas as pd

Expand Down Expand Up @@ -229,4 +230,4 @@ def run_eclipse_test(self):
["/project/res/bin/runeclipse", "-i", eclfile]
)
ecloutputlines = ecloutput.split("\n")
print([x for x in ecloutputlines if "Error" in x or "ERROR" in x])
logging.error([x for x in ecloutputlines if "Error" in x or "ERROR" in x])

0 comments on commit d94ecf9

Please sign in to comment.