oemof.tools package

Submodules

oemof.tools.debugging module

Module contains tools facilitating debugging

This file is part of project oemof (github.com/oemof/oemof). It’s copyrighted by the contributors recorded in the version control history of the file, available from its original location oemof/oemof/tools/economics.py

SPDX-License-Identifier: MIT

exception oemof.tools.debugging.ExperimentalFeatureWarning[source]

Bases: UserWarning

Warn the user about use of experimental features.

New modules first go to “experimental” ti highlight their unmature state. Sometimes, functionality is added to existing code. We use this warning to warn users in these cases.

exception oemof.tools.debugging.SuspiciousUsageWarning[source]

Bases: UserWarning

Warn the user about potentially dangerous usage.

Some ways of using oemof are not necessarily wrong but could lead to hard to find bugs if done accidentally instead of intentionally. We use these warnings, and you can do too ;), in your code to warn users about these cases. If you know what you are doing and these warnings point you to things you are doing intentionally, you can easily switch them off.

Note

TODO: Fix ref! See SuspiciousUsageWarning for more information.

Examples

>>> import warnings
>>> warnings.filterwarnings("ignore", category=SuspiciousUsageWarning)

oemof.tools.economics module

Module to collect useful functions for economic calculation.

This file is part of project oemof (github.com/oemof/oemof). It’s copyrighted by the contributors recorded in the version control history of the file, available from its original location oemof/oemof/tools/economics.py

SPDX-License-Identifier: MIT

oemof.tools.economics.annuity(capex, n, wacc, u=None, cost_decrease=0)[source]

Calculates the annuity of an initial investment ‘capex’, considering the cost of capital ‘wacc’ during a project horizon ‘n’

In case of a single initial investment, the employed formula reads:

\[\text{annuity} = \text{capex} \cdot \frac{(\text{wacc} \cdot (1+\text{wacc})^n)} {((1 + \text{wacc})^n - 1)}\]

In case of repeated investments (due to replacements) at fixed intervals ‘u’, the formula yields:

\[\text{annuity} = \text{capex} \cdot \frac{(\text{wacc} \cdot (1+\text{wacc})^n)} {((1 + \text{wacc})^n - 1)} \cdot \left( \frac{1 - \left( \frac{(1-\text{cost\_decrease})} {(1+\text{wacc})} \right)^n} {1 - \left(\frac{(1-\text{cost\_decrease})}{(1+\text{wacc})} \right)^u} \right)\]
Parameters:
  • capex (float) – Capital expenditure for first investment. Net Present Value (NPV) or Net Present Cost (NPC) of investment

  • n (int) – Horizon of the analysis, or number of years the annuity wants to be obtained for (n>=1)

  • wacc (float) – Weighted average cost of capital (0<wacc<1)

  • u (int) – Lifetime of the investigated investment. Might be smaller than the analysis horizon, ‘n’, meaning it will have to be replaced. Takes value ‘n’ if not specified otherwise (u>=1)

  • cost_decrease (float) – Annual rate of cost decrease (due to, e.g., price experience curve). This only influences the result for investments corresponding to replacements, whenever u<n. Takes value 0, if not specified otherwise (0<cost_decrease<1)

Returns:

float – annuity

oemof.tools.logger module

Helpers to log your modeling process with oemof.

This file is part of project oemof (github.com/oemof/oemof). It’s copyrighted by the contributors recorded in the version control history of the file, available from its original location oemof/oemof/tools/logger.py

SPDX-License-Identifier: MIT

oemof.tools.logger.define_logging(logpath=None, logfile='oemof.log', file_format=None, screen_format=None, file_datefmt=None, screen_datefmt=None, screen_level=20, file_level=30, log_path=True, timed_rotating=None)[source]

Initialise customisable logger.

Parameters:
  • logfile (str) – Name of the log file, default: oemof.log

  • logpath (str) – The path for log files. By default a “.oemof’ folder is created in your home directory with subfolder called ‘log_files’.

  • file_format (str) – Format of the file output. Default: “%(asctime)s - %(levelname)s - %(module)s - %(message)s”

  • screen_format (str) – Format of the screen output. Default: “%(asctime)s-%(levelname)s-%(message)s”

  • file_datefmt (str) – Format of the datetime in the file output. Default: None

  • screen_datefmt (str) – Format of the datetime in the screen output. Default: “%H:%M:%S”

  • screen_level (int) – Level of logging to stdout. Default: 20 (logging.INFO)

  • file_level (int) – Level of logging to file. Default: 30 (logging.WARNING)

  • log_path (boolean) – If True the used file path is logged while initialising the logger.

  • timed_rotating (dict) – Option to pass parameters to the TimedRotatingFileHandler.

Returns:

str (Place where the log file is stored.)

Notes

By default the INFO level is printed on the screen and the DEBUG level in a file, but you can easily configure the logger. Every module that wants to create logging messages has to import the logging module. The oemof logger module has to be imported once to initialise it.

Examples

To define the default logger you have to import the python logging library and this function. The first logging message should be the path where the log file is saved to.

>>> import logging
>>> from oemof.tools import logger
>>> mypath = logger.define_logging(
...     log_path=True, timed_rotating={'backupCount': 4},
...     screen_level=logging.ERROR, screen_datefmt = "no_date")
>>> mypath[-9:]
'oemof.log'
>>> logging.debug("Hallo")
oemof.tools.logger.extend_basic_path(subfolder)[source]

Returns a path based on the basic oemof path and creates it if necessary. The subfolder is the name of the path extension.

oemof.tools.logger.get_basic_path()[source]

Returns the basic oemof path and creates it if necessary. The basic path is the ‘.oemof’ folder in the $HOME directory.