# Path: dipplanner/settings.py
# __VERSION__ = None
# FRESH_WATER_DENSITY = 1.0  #: water density kg/l
# SEA_WATER_DENSITY = 1.03  #: water density kg/l
# ABSOLUTE_MAX_PPO2 = 2.0  #: in bar
# ABSOLUTE_MIN_PPO2 = 0.16  #: in bar
# ABSOLUTE_MAX_TANK_PRESSURE = 300  #: in bar
# ABSOLUTE_MAX_TANK_SIZE = 2 * 20  #: in liter
# SURFACE_TEMP = 37
# HE_NARCOTIC_VALUE = 0.23  #: helium narcotic value
# N2_NARCOTIC_VALUE = 1.0  #: nitrogen narcotic value
# O2_NARCOTIC_VALUE = 1.0  #: oxygen narcotic value
# AR_NARCOTIC_VALUE = 2.33  #: argon narcotic value
# DEFAULT_AIR_FH2 = 0.0  #: fraction of HE in standard AIR
# DEFAULT_AIR_FN2 = 0.7808  #: fraction of N2 in standard AIR
# DEFAULT_AIR_FO2 = 0.2095  #: fraction of O2 in standard AIR
# DEFAULT_AIR_FAR = 0.00934  #: fraction of AR (argon) in standard AIR
# DEFAULT_AIR_F_INNERT_GAS = DEFAULT_AIR_FH2 + DEFAULT_AIR_FN2 + DEFAULT_AIR_FAR
# STOP_DEPTH_INCREMENT = 3  #: in meter
# LAST_STOP_DEPTH = 3  #: in meter : last stop before surfacing
# STOP_TIME_INCREMENT = 1  #: in second
# FORCE_ALL_STOPS = True
# AMBIANT_PRESSURE_SEA_LEVEL = 1.01325  #: surface pressure (in bar)
# METHOD_FOR_DEPTH_CALCULATION = 'complex'  #: either simple (/10) or complex
# TRAVEL_SWITCH = 'late'  #: "late" or "early"
# FLIGHT_ALTITUDE = 2450
# TEMPLATE = "default-color.tpl"  #: template should be in templates/ directory
# DECO_MODEL = "ZHL16c"  #: ZHL16c or ZHL16b or ZHL16a
# BUHLMANN_VALUES = "1a"  #: 1a (4 mins for 1st comp) or 1b (5 mins)
# WATER_DENSITY = SEA_WATER_DENSITY  #: water density kg/l
# AMBIANT_PRESSURE_SURFACE = AMBIANT_PRESSURE_SEA_LEVEL
# DEFAULT_MAX_PPO2 = 1.6  #: in bar
# DEFAULT_MIN_PPO2 = 0.16  #: in bar
# DEFAULT_MAX_END = 30  #: in meter
# DIVE_CONSUMPTION_RATE = 20.0 / 60  #: liter/s
# DECO_CONSUMPTION_RATE = 17.0 / 60  #: liter/s
# DESCENT_RATE = 20 / 60   #: m/s
# ASCENT_RATE = 10 / 60   #: m/s
# DECO_ASCENT_RATE = 3 / 60   #: m/s
# RUN_TIME = True
# USE_OC_DECO = True  #: if True, use enabled gases of decomp in oc or bailout
# GF_LOW = 0.30  #: % between 0.0 and 1.0
# GF_HIGH = 0.80  #: % between 0.0 and 1.0
# MULTILEVEL_MODE = False
# AUTOMATIC_TANK_REFILL = True  #: automatic refill of tanks between dives


import math
import re
from dipplanner import settings
    :rtype: float

    :raises ValueError: if altitude > 10000m
    """
    if altitude_or_depth < 0:
        return (depth_to_pressure(-altitude_or_depth) +
                settings.AMBIANT_PRESSURE_SURFACE)
    else:
        return altitude_to_pressure(altitude_or_depth)


def altitude_to_pressure(altitude):
    """Convert a given altitude in pressure in bar.

    uses the formula:
    p = 101325.(1-2.25577.10^-5.h)^5.25588

    :param float altitude: current altitude in meter

    :returns: resulting pressure in bar
    :rtype: float

    :raises ValueError: when bad altitude is given (bad or <0 or > 10000 m)
    """
    if altitude < 0:
        raise ValueError("altitude can not be negative")
    if altitude > 10000:
        raise ValueError("altitude can not higher than 10000m")

    return (math.pow(1 - 2.25577 * math.pow(10, -5) * altitude, 5.25588) *

# Path: dipplanner/settings.py
# __VERSION__ = None
# FRESH_WATER_DENSITY = 1.0  #: water density kg/l
# SEA_WATER_DENSITY = 1.03  #: water density kg/l
# ABSOLUTE_MAX_PPO2 = 2.0  #: in bar
# ABSOLUTE_MIN_PPO2 = 0.16  #: in bar
# ABSOLUTE_MAX_TANK_PRESSURE = 300  #: in bar
# ABSOLUTE_MAX_TANK_SIZE = 2 * 20  #: in liter
# SURFACE_TEMP = 37
# HE_NARCOTIC_VALUE = 0.23  #: helium narcotic value
# N2_NARCOTIC_VALUE = 1.0  #: nitrogen narcotic value
# O2_NARCOTIC_VALUE = 1.0  #: oxygen narcotic value
# AR_NARCOTIC_VALUE = 2.33  #: argon narcotic value
# DEFAULT_AIR_FH2 = 0.0  #: fraction of HE in standard AIR
# DEFAULT_AIR_FN2 = 0.7808  #: fraction of N2 in standard AIR
# DEFAULT_AIR_FO2 = 0.2095  #: fraction of O2 in standard AIR
# DEFAULT_AIR_FAR = 0.00934  #: fraction of AR (argon) in standard AIR
# DEFAULT_AIR_F_INNERT_GAS = DEFAULT_AIR_FH2 + DEFAULT_AIR_FN2 + DEFAULT_AIR_FAR
# STOP_DEPTH_INCREMENT = 3  #: in meter
# LAST_STOP_DEPTH = 3  #: in meter : last stop before surfacing
# STOP_TIME_INCREMENT = 1  #: in second
# FORCE_ALL_STOPS = True
# AMBIANT_PRESSURE_SEA_LEVEL = 1.01325  #: surface pressure (in bar)
# METHOD_FOR_DEPTH_CALCULATION = 'complex'  #: either simple (/10) or complex
# TRAVEL_SWITCH = 'late'  #: "late" or "early"
# FLIGHT_ALTITUDE = 2450
# TEMPLATE = "default-color.tpl"  #: template should be in templates/ directory
# DECO_MODEL = "ZHL16c"  #: ZHL16c or ZHL16b or ZHL16a
# BUHLMANN_VALUES = "1a"  #: 1a (4 mins for 1st comp) or 1b (5 mins)
# WATER_DENSITY = SEA_WATER_DENSITY  #: water density kg/l
# AMBIANT_PRESSURE_SURFACE = AMBIANT_PRESSURE_SEA_LEVEL
# DEFAULT_MAX_PPO2 = 1.6  #: in bar
# DEFAULT_MIN_PPO2 = 0.16  #: in bar
# DEFAULT_MAX_END = 30  #: in meter
# DIVE_CONSUMPTION_RATE = 20.0 / 60  #: liter/s
# DECO_CONSUMPTION_RATE = 17.0 / 60  #: liter/s
# DESCENT_RATE = 20 / 60   #: m/s
# ASCENT_RATE = 10 / 60   #: m/s
# DECO_ASCENT_RATE = 3 / 60   #: m/s
# RUN_TIME = True
# USE_OC_DECO = True  #: if True, use enabled gases of decomp in oc or bailout
# GF_LOW = 0.30  #: % between 0.0 and 1.0
# GF_HIGH = 0.80  #: % between 0.0 and 1.0
# MULTILEVEL_MODE = False
# AUTOMATIC_TANK_REFILL = True  #: automatic refill of tanks between dives


# Path: dipplanner/tools.py
import math
import re
from dipplanner import settings

    :rtype: float

    :raises ValueError: if altitude > 10000m
    """
    if altitude_or_depth < 0:
        return (depth_to_pressure(-altitude_or_depth) +
                settings.AMBIANT_PRESSURE_SURFACE)
    else:
        return altitude_to_pressure(altitude_or_depth)


def altitude_to_pressure(altitude):
    """Convert a given altitude in pressure in bar.

    uses the formula:
    p = 101325.(1-2.25577.10^-5.h)^5.25588

    :param float altitude: current altitude in meter

    :returns: resulting pressure in bar
    :rtype: float

    :raises ValueError: when bad altitude is given (bad or <0 or > 10000 m)
    """
    if altitude < 0:
        raise ValueError("altitude can not be negative")
    if altitude > 10000:
        raise ValueError("altitude can not higher than 10000m")

    return (math.pow(1 - 2.25577 * math.pow(10, -5) * altitude, 5.25588) *

            settings.AMBIANT_PRESSURE_SEA_LEVEL)