prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Allow simple loading of "dummy" configuration
  A simple method to load a minimal configuration should be added.
  
  This can be handy for some data-analysis tasks in notebooks, where no full configuration is needed or necessary.
  
  Something like `Configuration.get_empty_config()`, which contains the minimum required keys set to default values
  
  </issue>
  <code>
  [start of freqtrade/configuration/check_exchange.py]
  1 import logging
  2 from typing import Any, Dict
  3 
  4 from freqtrade import OperationalException
  5 from freqtrade.exchange import (available_exchanges, get_exchange_bad_reason,
  6                                 is_exchange_known_ccxt, is_exchange_bad,
  7                                 is_exchange_officially_supported)
  8 from freqtrade.state import RunMode
  9 
  10 logger = logging.getLogger(__name__)
  11 
  12 
  13 def check_exchange(config: Dict[str, Any], check_for_bad: bool = True) -> bool:
  14     """
  15     Check if the exchange name in the config file is supported by Freqtrade
  16     :param check_for_bad: if True, check the exchange against the list of known 'bad'
  17                           exchanges
  18     :return: False if exchange is 'bad', i.e. is known to work with the bot with
  19              critical issues or does not work at all, crashes, etc. True otherwise.
  20              raises an exception if the exchange if not supported by ccxt
  21              and thus is not known for the Freqtrade at all.
  22     """
  23 
  24     if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE]
  25        and not config.get('exchange', {}).get('name')):
  26         # Skip checking exchange in plot mode, since it requires no exchange
  27         return True
  28     logger.info("Checking exchange...")
  29 
  30     exchange = config.get('exchange', {}).get('name').lower()
  31     if not exchange:
  32         raise OperationalException(
  33             f'This command requires a configured exchange. You should either use '
  34             f'`--exchange <exchange_name>` or specify a configuration file via `--config`.\n'
  35             f'The following exchanges are available for Freqtrade: '
  36             f'{", ".join(available_exchanges())}'
  37         )
  38 
  39     if not is_exchange_known_ccxt(exchange):
  40         raise OperationalException(
  41                 f'Exchange "{exchange}" is not known to the ccxt library '
  42                 f'and therefore not available for the bot.\n'
  43                 f'The following exchanges are available for Freqtrade: '
  44                 f'{", ".join(available_exchanges())}'
  45         )
  46 
  47     if check_for_bad and is_exchange_bad(exchange):
  48         raise OperationalException(f'Exchange "{exchange}" is known to not work with the bot yet. '
  49                                    f'Reason: {get_exchange_bad_reason(exchange)}')
  50 
  51     if is_exchange_officially_supported(exchange):
  52         logger.info(f'Exchange "{exchange}" is officially supported '
  53                     f'by the Freqtrade development team.')
  54     else:
  55         logger.warning(f'Exchange "{exchange}" is known to the the ccxt library, '
  56                        f'available for the bot, but not officially supported '
  57                        f'by the Freqtrade development team. '
  58                        f'It may work flawlessly (please report back) or have serious issues. '
  59                        f'Use it at your own discretion.')
  60 
  61     return True
  62
  [end of freqtrade/configuration/check_exchange.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/freqtrade/configuration/check_exchange.py b/freqtrade/configuration/check_exchange.py
  --- a/freqtrade/configuration/check_exchange.py
  +++ b/freqtrade/configuration/check_exchange.py
  @@ -21,7 +21,7 @@
                and thus is not known for the Freqtrade at all.
       """
   
  -    if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE]
  +    if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE, RunMode.OTHER]
          and not config.get('exchange', {}).get('name')):
           # Skip checking exchange in plot mode, since it requires no exchange
           return True
  
verification_info: {"golden_diff": "diff --git a/freqtrade/configuration/check_exchange.py b/freqtrade/configuration/check_exchange.py\n--- a/freqtrade/configuration/check_exchange.py\n+++ b/freqtrade/configuration/check_exchange.py\n@@ -21,7 +21,7 @@\n              and thus is not known for the Freqtrade at all.\n     \"\"\"\n \n-    if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE]\n+    if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE, RunMode.OTHER]\n        and not config.get('exchange', {}).get('name')):\n         # Skip checking exchange in plot mode, since it requires no exchange\n         return True\n", "issue": "Allow simple loading of \"dummy\" configuration\nA simple method to load a minimal configuration should be added.\r\n\r\nThis can be handy for some data-analysis tasks in notebooks, where no full configuration is needed or necessary.\r\n\r\nSomething like `Configuration.get_empty_config()`, which contains the minimum required keys set to default values\n", "before_files": [{"content": "import logging\nfrom typing import Any, Dict\n\nfrom freqtrade import OperationalException\nfrom freqtrade.exchange import (available_exchanges, get_exchange_bad_reason,\n                                is_exchange_known_ccxt, is_exchange_bad,\n                                is_exchange_officially_supported)\nfrom freqtrade.state import RunMode\n\nlogger = logging.getLogger(__name__)\n\n\ndef check_exchange(config: Dict[str, Any], check_for_bad: bool = True) -> bool:\n    \"\"\"\n    Check if the exchange name in the config file is supported by Freqtrade\n    :param check_for_bad: if True, check the exchange against the list of known 'bad'\n                          exchanges\n    :return: False if exchange is 'bad', i.e. is known to work with the bot with\n             critical issues or does not work at all, crashes, etc. True otherwise.\n             raises an exception if the exchange if not supported by ccxt\n             and thus is not known for the Freqtrade at all.\n    \"\"\"\n\n    if (config['runmode'] in [RunMode.PLOT, RunMode.UTIL_NO_EXCHANGE]\n       and not config.get('exchange', {}).get('name')):\n        # Skip checking exchange in plot mode, since it requires no exchange\n        return True\n    logger.info(\"Checking exchange...\")\n\n    exchange = config.get('exchange', {}).get('name').lower()\n    if not exchange:\n        raise OperationalException(\n            f'This command requires a configured exchange. You should either use '\n            f'`--exchange <exchange_name>` or specify a configuration file via `--config`.\\n'\n            f'The following exchanges are available for Freqtrade: '\n            f'{\", \".join(available_exchanges())}'\n        )\n\n    if not is_exchange_known_ccxt(exchange):\n        raise OperationalException(\n                f'Exchange \"{exchange}\" is not known to the ccxt library '\n                f'and therefore not available for the bot.\\n'\n                f'The following exchanges are available for Freqtrade: '\n                f'{\", \".join(available_exchanges())}'\n        )\n\n    if check_for_bad and is_exchange_bad(exchange):\n        raise OperationalException(f'Exchange \"{exchange}\" is known to not work with the bot yet. '\n                                   f'Reason: {get_exchange_bad_reason(exchange)}')\n\n    if is_exchange_officially_supported(exchange):\n        logger.info(f'Exchange \"{exchange}\" is officially supported '\n                    f'by the Freqtrade development team.')\n    else:\n        logger.warning(f'Exchange \"{exchange}\" is known to the the ccxt library, '\n                       f'available for the bot, but not officially supported '\n                       f'by the Freqtrade development team. '\n                       f'It may work flawlessly (please report back) or have serious issues. '\n                       f'Use it at your own discretion.')\n\n    return True\n", "path": "freqtrade/configuration/check_exchange.py"}]}