Travel through time in your tests.

Overview

time-machine

https://img.shields.io/github/workflow/status/adamchainz/time-machine/CI/main?style=for-the-badge image::https://img.shields.io/badge/Coverage-100%25-success?style=for-the-badge https://img.shields.io/pypi/v/time-machine.svg?style=for-the-badge https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge pre-commit

Travel through time in your tests.

A quick example:

import datetime as dt
from zoneinfo import ZoneInfo
import time_machine

hill_valley_tz = ZoneInfo("America/Los_Angeles")


@time_machine.travel(dt.datetime(1985, 10, 26, 1, 24, tzinfo=hill_valley_tz))
def test_delorean():
    assert dt.date.today().isoformat() == "1985-10-26"

For a bit of background, see the introductory blog post and the benchmark blog post.

Installation

Use pip:

python -m pip install time-machine

Python 3.6 to 3.10 supported. Only CPython is supported at this time because time-machine directly hooks into the C-level API.


Testing a Django project? Check out my book Speed Up Your Django Tests which covers loads of best practices so you can write faster, more accurate tests. I created time-machine whilst writing the book.


Usage

travel(destination, *, tick=True)

travel() is a class that allows time travel, to the datetime specified by destination. It does so by mocking all functions from Python's standard library that return the current date or datetime. It can be used independently, as a function decorator, or as a context manager.

destination specifies the datetime to move to. It may be:

  • A datetime.datetime. If it is naive, it will be assumed to have the UTC timezone. If it has tzinfo set to a zoneinfo.ZoneInfo instance, the current timezone will also be mocked.
  • A datetime.date. This will be converted to a UTC datetime with the time 00:00:00.
  • A float or int specifying a Unix timestamp
  • A string, which will be parsed with dateutil.parse and converted to a timestamp.

Additionally, you can provide some more complex types:

  • A generator, in which case next() will be called on it, with the result treated as above.
  • A callable, in which case it will be called with no parameters, with the result treated as above.

tick defines whether time continues to "tick" after travelling, or is frozen. If True, the default, successive calls to mocked functions return values increasing by the elapsed real time since the first call. So after starting travel to 0.0 (the UNIX epoch), the first call to any datetime function will return its representation of 1970-01-01 00:00:00.000000 exactly. The following calls "tick," so if a call was made exactly half a second later, it would return 1970-01-01 00:00:00.500000.

Mocked Functions

All datetime functions in the standard library are mocked to move to the destination current datetime:

  • datetime.datetime.now()
  • datetime.datetime.utcnow()
  • time.gmtime()
  • time.localtime()
  • time.clock_gettime() (only for CLOCK_REALTIME)
  • time.clock_gettime_ns() (only for CLOCK_REALTIME)
  • time.strftime()
  • time.time()
  • time.time_ns()

The mocking is done at the C layer, replacing the function pointers for these built-ins. Therefore, it automatically affects everywhere those functions have been imported, unlike use of unittest.mock.patch().

Usage with start() / stop()

To use independently, create and instance, use start() to move to the destination time, and stop() to move back. For example:

import datetime as dt
import time_machine

traveller = time_machine.travel(dt.datetime(1985, 10, 26))
traveller.start()
# It's the past!
assert dt.date.today() == dt.date(1985, 10, 26)
traveller.stop()
# We've gone back to the future!
assert dt.date.today() > dt.date(2020, 4, 29)

travel() instances are nestable, but you'll need to be careful when manually managing to call their stop() methods in the correct order, even when exceptions occur. It's recommended to use the decorator or context manager forms instead, to take advantage of Python features to do this.

Function Decorator

When used as a function decorator, time is mocked during the wrapped function's duration:

import time
import time_machine


@time_machine.travel("1970-01-01 00:00 +0000")
def test_in_the_deep_past():
    assert 0.0 < time.time() < 1.0

You can also decorate asynchronous functions (coroutines):

import time
import time_machine


@time_machine.travel("1970-01-01 00:00 +0000")
async def test_in_the_deep_past():
    assert 0.0 < time.time() < 1.0

Beware: time is a global state - see below.

Context Manager

When used as a context manager, time is mocked during the with block:

import time
import time_machine


def test_in_the_deep_past():
    with time_machine.travel(0.0):
        assert 0.0 < time.time() < 1.0

Class Decorator

Only unittest.TestCase subclasses are supported. When applied as a class decorator to such classes, time is mocked from the start of setUpClass() to the end of tearDownClass():

import time
import time_machine
import unittest


@time_machine.travel(0.0)
class DeepPastTests(TestCase):
    def test_in_the_deep_past(self):
        assert 0.0 < time.time() < 1.0

Note this is different to unittest.mock.patch()'s behaviour, which is to mock only during the test methods.

Timezone mocking

If the destination passed to time_machine.travel() or Coordinates.move_to() has its tzinfo set to a zoneinfo.ZoneInfo instance, the current timezone will be mocked. This will be done by calling time.tzset(), so it is only available on Unix. The zoneinfo module is new in Python 3.8 - on older Python versions use the backports.zoneinfo package, by the original zoneinfo author.

time.tzset() changes the time module’s timezone constants and features that rely on those, such as time.localtime(). It won’t affect other concepts of “the current timezone”, such as Django’s (which can be changed with its time.override()).

Here’s a worked example changing the current timezone:

import datetime as dt
import time
from zoneinfo import ZoneInfo
import time_machine

hill_valley_tz = ZoneInfo("America/Los_Angeles")


@time_machine.travel(dt.datetime(2015, 10, 21, 16, 29, tzinfo=hill_valley_tz))
def test_hoverboard_era():
    assert time.tzname == ("PST", "PDT")
    now = dt.datetime.now()
    assert (now.hour, now.minute) == (16, 29)

Coordinates

The start() method and entry of the context manager both return a Coordinates object that corresponds to the given "trip" in time. This has a couple methods that can be used to travel to other times.

move_to(destination, tick=None)

move_to() moves the current time to a new destination. destination may be any of the types supported by travel.

tick may be set to a boolean, to change the tick flag of travel.

For example:

import datetime as dt
import time
import time_machine

with time_machine.travel(0, tick=False) as traveller:
    assert time.time() == 0

    traveller.move_to(234)
    assert time.time() == 234

shift(delta)

shift() takes one argument, delta, which moves the current time by the given offset. delta may be a timedelta or a number of seconds, which will be added to destination. It may be negative, in which case time will move to an earlier point.

For example:

import datetime as dt
import time
import time_machine

with time_machine.travel(0, tick=False) as traveller:
    assert time.time() == 0

    traveller.shift(dt.timedelta(seconds=100))
    assert time.time() == 100

    traveller.shift(-dt.timedelta(seconds=10))
    assert time.time() == 90

pytest plugin

time-machine also works as a pytest plugin. It provides a function-scoped fixture called time_machine that has one method, move_to(), which has the same signature as Coordinates.move_to(). This can be used to mock your test at different points in time and will automatically be un-mock when the test is torn down.

For example:

import datetime as dt


def test_delorean(time_machine):
    time_machine.move_to(dt.datetime(1985, 10, 26))

    assert dt.date.today().isoformat() == "1985-10-26"

    time_machine.move_to(dt.datetime(2015, 10, 21))

    assert dt.date.today().isoformat() == "2015-10-21"

escape_hatch

The escape_hatch object provides functions to bypass time-machine. These allow you to call the real datetime functions, without any mocking. It also provides a way to check if time-machine is currently time travelling.

These capabilities are useful in rare circumstances. For example, if you need to authenticate with an external service during time travel, you may need the real value of datetime.now().

The functions are:

  • escape_hatch.is_travelling() -> bool - returns True if time_machine.travel() is active, False otherwise.
  • escape_hatch.datetime.datetime.now() - wraps the real datetime.datetime.now().
  • escape_hatch.datetime.datetime.utcnow() - wraps the real datetime.datetime.utcnow().
  • escape_hatch.time.clock_gettime() - wraps the real time.clock_gettime().
  • escape_hatch.time.clock_gettime_ns() - wraps the real time.clock_gettime_ns().
  • escape_hatch.time.gmtime() - wraps the real time.gmtime().
  • escape_hatch.time.localtime() - wraps the real time.localtime().
  • escape_hatch.time.strftime() - wraps the real time.strftime().
  • escape_hatch.time.time() - wraps the real time.time().
  • escape_hatch.time.time_ns() - wraps the real time.time_ns().

For example:

import time_machine


with time_machine.travel(...):
    if time_machine.escape_hatch.is_travelling():
        print("We need to go back to the future!")

    real_now = time_machine.escape_hatch.datetime.datetime.now()
    external_authenticate(now=real_now)

Caveats

Time is a global state. Any concurrent threads or asynchronous functions are also be affected. Some aren't ready for time to move so rapidly or backwards, and may crash or produce unexpected results.

Also beware that other processes are not affected. For example, if you use SQL datetime functions on a database server, they will return the real time.

Comparison

There are some prior libraries that try to achieve the same thing. They have their own strengths and weaknesses. Here's a quick comparison.

unittest.mock

The standard library's unittest.mock can be used to target imports of datetime and time to change the returned value for current time. Unfortunately, this is fragile as it only affects the import location the mock targets. Therefore, if you have several modules in a call tree requesting the date/time, you need several mocks. This is a general problem with unittest.mock - see Why Your Mock Doesn't Work.

It's also impossible to mock certain references, such as function default arguments:

def update_books(_now=time.time):  # set as default argument so faster lookup
    for book in books:
        ...

Although such references are rare, they are occasionally used to optimize highly repeated loops.

freezegun

Steve Pulec's freezegun library is a popular solution. It provides a clear API which was much of the inspiration for time-machine.

The main drawback is its slow implementation. It essentially does a find-and-replace mock of all the places that the datetime and time modules have been imported. This gets around the problems with using unittest.mock, but it means the time it takes to do the mocking is proportional to the number of loaded modules. In large projects, this can take several seconds, an impractical overhead for an individual test.

It's also not a perfect search, since it searches only module-level imports. Such imports are definitely the most common way projects use date and time functions, but they're not the only way. freezegun won’t find functions that have been “hidden” inside arbitrary objects, such as class-level attributes.

It also can't affect C extensions that call the standard library functions, including (I believe) Cython-ized Python code.

python-libfaketime

Simon Weber's python-libfaketime wraps the libfaketime library. libfaketime replaces all the C-level system calls for the current time with its own wrappers. It's therefore a "perfect" mock for the current process, affecting every single point the current time might be fetched, and performs much faster than freezegun.

Unfortunately python-libfaketime comes with the limitations of LD_PRELOAD. This is a mechanism to replace system libraries for a program as it loads (explanation). This causes two issues in particular when you use python-libfaketime.

First, LD_PRELOAD is only available on Unix platforms, which prevents you from using it on Windows.

Second, you have to help manage LD_PRELOAD. You either use python-libfaketime's reexec_if_needed() function, which restarts (re-execs) your test process while loading, or manually manage the LD_PRELOAD environment variable. Neither is ideal. Re-execing breaks anything that might wrap your test process, such as profilers, debuggers, and IDE test runners. Manually managing the environment variable is a bit of overhead, and must be done for each environment you run your tests in, including each developer's machine.

time-machine

time-machine is intended to combine the advantages of freezegun and libfaketime. It works without LD_PRELOAD but still mocks the standard library functions everywhere they may be referenced. Its weak point is that other libraries using date/time system calls won't be mocked. Thankfully this is rare. It's also possible such python libraries can be added to the set mocked by time-machine.

One drawback is that it only works with CPython, so can't be used with other Python interpreters like PyPy. However it may possible to extend it to support other interpreters through different mocking mechanisms.

Migrating from libfaketime or freezegun

freezegun has a useful API, and python-libfaketime copies some of it, with a different function name. time-machine also copies some of freezegun's API, in travel()'s destination, and tick arguments, and the shift() method. There are a few differences:

  • time-machine's tick argument defaults to True, because code tends to make the (reasonable) assumption that time progresses between function calls, and should normally be tested as such. Testing with time frozen can make it easy to write complete assertions, but it's quite artificial.
  • freezegun's tick() method has been implemented as shift(), to avoid confusion with the tick argument. It also requires an explicit delta rather than defaulting to 1 second.
  • freezegun's tz_offset argument only partially mocks the current time zone. Time zones are more complicated than a single offset from UTC, and freezegun only uses the offset in time.localtime(). Instead, time-machine will mock the current time zone if you give it a datetime with a ZoneInfo timezone.

Some features aren't supported like the auto_tick_seconds argument. These may be added in a future release.

If you are only fairly simple function calls, you should be able to migrate by replacing calls to freezegun.freeze_time() and libfaketime.fake_time() with time_machine.travel().

Comments
  • Captain! We can't seem to lock on to the exact millisecond!

    Captain! We can't seem to lock on to the exact millisecond!

    Python Version

    3.7

    pytest Version

    7.1.2

    Package Version

    2.6.0

    Description

    The void of space is vast.

    Only 0.0000000000000000000042% of the space is composed of matter.

    "You could shoot a bullet and it would go on for millions of light years without hitting an object!" said Admiral Faustus.

    "But Captain..." the Engineer awkwardly trying to find his voice.

    The Admiral fiercely gripping the deck, intently observing the activity monitor. Thousands of red dots swiftly moved towards the center of the screen. The enemy was upon them. "There's no time the Cylons are on us! We need to make the jump in time! Has the Machine made it's calculations?"

    "Yes sir" replied the Head engineer

    "By the Machine's calculations will we land at the given time in empty space?"

    "Yes but..." the engineer feared that the machine wasn't precise enough for such a jump, it has never been tested. Even a small miscalculation could result in catastrophe.

    But the Cylons were upon them, and who was the engineer to judge the Machine that has never failed them before. The Machine has always been precise and accurate.

    "Press the Machine's button" the Captain was furious

    The engineer composed himself. The Machine will not fail us. "Yes Sir" said the Head Engineer as he pressed the button.

    Alas, the Machine failed them. The entirety of humanity vaporized as the intergalactic colony vessel The Hope reappeared in the core of a white dwarf.

    Even though it seems the local universe is almost static, everything is moving at almost light speed pace. The Machine knew this. The Machine was coded for this. The Machine had the computational power. But was humanity didn't know is that the Machine had a very small error, so small, it never mattered.

    The Machine teleported The Hope 1 millisecond too early, and so humanity ended in one big blast


    I've changed my Pandas timestamps to seconds, noticed the ms part is actually based on current time.

    Not sure if it's a bug. Hi @adamchainz :)

    opened by jamespacileo 8
  • Segmentation fault after switching from freezegun

    Segmentation fault after switching from freezegun

    Hi @adamchainz

    I'm still testing the library on our systems before switching completely. Our main blocker is currently that at at least 2 points in our test suite, the tests will fail due to a segmentation fault (and reproduces this way).

    The tests run on pretty small machines with only 1CPU and 1GB RAM, running on Ubuntu 20.04. I might disable https://github.com/getsentry/pytest-sentry which appears in the stacktrace, but I couldn't find some reasonable suspects in there...

    Here is the stacktrace for information:

    Fatal Python error: Segmentation fault
    Thread 0x00007fb9cf9ed700 (most recent call first):
      File "/opt/pyenv/versions/3.6.3/lib/python3.6/socket.py", line 745 in getaddrinfo
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/util/connection.py", line 61 in create_connection
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/connection.py", line 160 in _new_conn
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/connection.py", line 309 in connect
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/connectionpool.py", line 978 in _validate_conn
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/connectionpool.py", line 381 in _make_request
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/connectionpool.py", line 677 in urlopen
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/poolmanager.py", line 336 in urlopen
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/request.py", line 171 in request_encode_body
      File "/path-to-venv/lib/python3.6/site-packages/urllib3/request.py", line 80 in request
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/transport.py", line 180 in _send_request
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/transport.py", line 267 in _send_envelope
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/transport.py", line 340 in send_envelope_wrapper
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/worker.py", line 128 in _target
      File "/opt/pyenv/versions/3.6.3/lib/python3.6/threading.py", line 864 in run
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/integrations/threading.py", line 67 in run
      File "/opt/pyenv/versions/3.6.3/lib/python3.6/threading.py", line 916 in _bootstrap_inner
      File "/opt/pyenv/versions/3.6.3/lib/python3.6/threading.py", line 884 in _bootstrap
    Current thread 0x00007fb9deebc180 (most recent call first):
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/utils.py", line 132 in format_timestamp
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/client.py", line 342 in capture_event
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/hub.py", line 321 in capture_event
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/tracing.py", line 551 in finish
      File "/path-to-venv/lib/python3.6/site-packages/sentry_sdk/tracing.py", line 215 in __exit__
      File "/path-to-venv/lib/python3.6/site-packages/pytest_sentry.py", line 162 in pytest_fixture_setup
      File "/path-to-venv/lib/python3.6/site-packages/pytest_sentry.py", line 113 in _with_hub
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/callers.py", line 203 in _multicall
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 86 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 92 in _hookexec
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/hooks.py", line 286 in __call__
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/fixtures.py", line 1057 in execute
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/fixtures.py", line 676 in _compute_fixture_value
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/fixtures.py", line 592 in _get_active_fixturedef
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/fixtures.py", line 572 in getfixturevalue
      File "/path-to-venv/lib/python3.6/site-packages/pytest_lazyfixture.py", line 37 in fill
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/python.py", line 1633 in setup
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 448 in prepare
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 151 in pytest_runtest_setup
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/callers.py", line 187 in _multicall
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 86 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 92 in _hookexec
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/hooks.py", line 286 in __call__
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 256 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 310 in from_call
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 256 in call_runtest_hook
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 216 in call_and_report
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/runner.py", line 121 in runtestprotocol
      File "/path-to-venv/lib/python3.6/site-packages/pytest_rerunfailures.py", line 240 in pytest_runtest_protocol
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/callers.py", line 187 in _multicall
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 86 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 92 in _hookexec
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/hooks.py", line 286 in __call__
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/main.py", line 338 in pytest_runtestloop
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/callers.py", line 187 in _multicall
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 86 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 92 in _hookexec
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/hooks.py", line 286 in __call__
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/main.py", line 313 in _main
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/main.py", line 257 in wrap_session
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/main.py", line 306 in pytest_cmdline_main
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/callers.py", line 187 in _multicall
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 86 in <lambda>
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/manager.py", line 92 in _hookexec
      File "/path-to-venv/lib/python3.6/site-packages/pluggy/hooks.py", line 286 in __call__
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/config/__init__.py", line 165 in main
      File "/path-to-venv/lib/python3.6/site-packages/_pytest/config/__init__.py", line 187 in console_main
      File "/path-to-venv/bin/pytest", line 8 in <module>
    bash: line 185: 193869 Segmentation fault      (core dumped) pytest -c pytest.ci.ini --test-group-count=$CI_NODE_TOTAL --test-group=$CI_NODE_INDEX --test-group-random-seed=123
    
    opened by MRigal 8
  • Fix to work when clock_gettime or CLOCK_REALTIME are not present

    Fix to work when clock_gettime or CLOCK_REALTIME are not present

    Python in macos has a couple of challenges to be overcome:

    CLOCK_REALTIME and clock_gettime are not present. The python docs list it as available in Unix environments, but this doesn't seem to include macos: https://docs.python.org/3/library/time.html#time.CLOCK_REALTIME https://news.ycombinator.com/item?id=6303755

    opened by dcrowe 8
  • Complete copying freezegun API

    Complete copying freezegun API

    • [x] .tick() method
    • [x] .move_to() method
    • [ ] auto_tick_seconds(?) - #14
    • [ ] Wrapping non-TestCase classes like pytest classes. Probably adopt the unittest mechanism where only callables starting test_ (or a configurable prefix) are wrapped, rather than the unnecessary, perhaps dangerous "wrap every callable" behaviour freezegun uses.
    opened by adamchainz 8
  • Segmentation fault when using Python 3.8.3 [Mac]

    Segmentation fault when using Python 3.8.3 [Mac]

    I am getting segmentation fault when trying to use time-machine on my mac machine with Python 3.8.3.

    It works fine if I use Python3.7.

    Please let me know how can I provide more details to help in this issue. Have learned a lot from your blog posts @adamchainz 👍 .

    This is the error report

    Process:               Python [1312]
    Path:                  /Library/Frameworks/Python.framework/Versions/3.8/Resources/Python.app/Contents/MacOS/Python
    Identifier:            Python
    Version:               3.8.3 (3.8.3)
    Code Type:             X86-64 (Native)
    Parent Process:        zsh [963]
    Responsible:           iTerm2 [952]
    User ID:               501
    
    Date/Time:             2020-06-22 12:00:59.427 +0530
    OS Version:            Mac OS X 10.15.5 (19F101)
    Report Version:        12
    Anonymous UUID:        66763C03-792C-E4D6-5942-AEE41F3AD7DC
    
    
    Time Awake Since Boot: 230 seconds
    
    System Integrity Protection: enabled
    
    Crashed Thread:        0  Dispatch queue: com.apple.main-thread
    
    Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000010
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Signal:    Segmentation fault: 11
    Termination Reason:    Namespace SIGNAL, Code 0xb
    Terminating Process:   exc handler [1312]
    
    VM Regions Near 0x10:
    --> 
        __TEXT                 00000001010fa000-00000001010fb000 [    4K] r-x/rwx SM=COW  /Library/Frameworks/Python.framework/Versions/3.8/Resources/Python.app/Contents/MacOS/Python
    
    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0   _time_machine.cpython-38-darwin.so	0x000000010252144d _time_machine_patch_if_needed + 205
    1   org.python.python             	0x0000000101160086 cfunction_vectorcall_NOARGS + 214
    2   org.python.python             	0x00000001011f1c4c call_function + 444
    3   org.python.python             	0x00000001011eeaae _PyEval_EvalFrameDefault + 25678
    4   org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    5   org.python.python             	0x00000001011f1c4c call_function + 444
    6   org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    7   org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    8   org.python.python             	0x00000001011265bb method_vectorcall + 235
    9   org.python.python             	0x00000001011ee5ea _PyEval_EvalFrameDefault + 24458
    10  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    11  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    12  org.python.python             	0x000000010112657a method_vectorcall + 170
    13  org.python.python             	0x00000001011f1c4c call_function + 444
    14  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    15  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    16  org.python.python             	0x00000001011f1c4c call_function + 444
    17  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    18  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    19  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    20  org.python.python             	0x000000010112665c method_vectorcall + 396
    21  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    22  org.python.python             	0x00000001011eefb8 _PyEval_EvalFrameDefault + 26968
    23  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    24  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    25  org.python.python             	0x000000010112657a method_vectorcall + 170
    26  org.python.python             	0x00000001011f1c4c call_function + 444
    27  org.python.python             	0x00000001011eeaae _PyEval_EvalFrameDefault + 25678
    28  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    29  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    30  org.python.python             	0x00000001011233b7 _PyObject_FastCallDict + 247
    31  org.python.python             	0x00000001011249bf _PyObject_Call_Prepend + 143
    32  org.python.python             	0x0000000101179496 slot_tp_call + 150
    33  org.python.python             	0x0000000101123565 _PyObject_MakeTpCall + 373
    34  org.python.python             	0x00000001011f1ca5 call_function + 533
    35  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    36  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    37  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    38  org.python.python             	0x000000010112665c method_vectorcall + 396
    39  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    40  org.python.python             	0x00000001011eefb8 _PyEval_EvalFrameDefault + 26968
    41  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    42  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    43  org.python.python             	0x00000001011233b7 _PyObject_FastCallDict + 247
    44  org.python.python             	0x00000001011249bf _PyObject_Call_Prepend + 143
    45  org.python.python             	0x0000000101179496 slot_tp_call + 150
    46  org.python.python             	0x0000000101123565 _PyObject_MakeTpCall + 373
    47  org.python.python             	0x00000001011f1ca5 call_function + 533
    48  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    49  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    50  org.python.python             	0x00000001011f1c4c call_function + 444
    51  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    52  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    53  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    54  org.python.python             	0x00000001011f1c4c call_function + 444
    55  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    56  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    57  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    58  org.python.python             	0x00000001011f1c4c call_function + 444
    59  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    60  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    61  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    62  org.python.python             	0x000000010112665c method_vectorcall + 396
    63  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    64  org.python.python             	0x00000001011eefb8 _PyEval_EvalFrameDefault + 26968
    65  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    66  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    67  org.python.python             	0x000000010112665c method_vectorcall + 396
    68  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    69  org.python.python             	0x00000001011eefb8 _PyEval_EvalFrameDefault + 26968
    70  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    71  org.python.python             	0x000000010112657a method_vectorcall + 170
    72  org.python.python             	0x00000001011f1c4c call_function + 444
    73  org.python.python             	0x00000001011eeaae _PyEval_EvalFrameDefault + 25678
    74  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    75  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    76  org.python.python             	0x00000001011f1c4c call_function + 444
    77  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    78  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    79  org.python.python             	0x00000001011f1c4c call_function + 444
    80  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    81  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    82  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    83  org.python.python             	0x00000001011f1c4c call_function + 444
    84  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    85  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    86  org.python.python             	0x00000001011f1c4c call_function + 444
    87  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    88  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    89  org.python.python             	0x00000001011e8584 PyEval_EvalCode + 100
    90  org.python.python             	0x00000001012380f0 PyRun_FileExFlags + 336
    91  org.python.python             	0x00000001012377e0 PyRun_SimpleFileExFlags + 864
    92  org.python.python             	0x0000000101254c6f Py_RunMain + 2159
    93  org.python.python             	0x0000000101254faf pymain_main + 223
    94  org.python.python             	0x00000001012551ab Py_BytesMain + 43
    95  libdyld.dylib                 	0x00007fff6a562cc9 start + 1
    
    Thread 1:
    0   libsystem_kernel.dylib        	0x00007fff6a6a6882 __psynch_cvwait + 10
    1   libsystem_pthread.dylib       	0x00007fff6a767425 _pthread_cond_wait + 698
    2   org.python.python             	0x0000000101244ea6 PyThread_acquire_lock_timed + 454
    3   org.python.python             	0x0000000101291d9f acquire_timed + 111
    4   org.python.python             	0x0000000101291eb0 lock_PyThread_acquire_lock + 48
    5   org.python.python             	0x000000010112c9d5 method_vectorcall_VARARGS_KEYWORDS + 373
    6   org.python.python             	0x00000001011f1c4c call_function + 444
    7   org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    8   org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    9   org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    10  org.python.python             	0x00000001011f1c4c call_function + 444
    11  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    12  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    13  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    14  org.python.python             	0x00000001011f1c4c call_function + 444
    15  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    16  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    17  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    18  org.python.python             	0x00000001011eefb8 _PyEval_EvalFrameDefault + 26968
    19  org.python.python             	0x00000001011f2a94 _PyEval_EvalCodeWithName + 2804
    20  org.python.python             	0x000000010112404e _PyFunction_Vectorcall + 270
    21  org.python.python             	0x00000001011f1c4c call_function + 444
    22  org.python.python             	0x00000001011eeb45 _PyEval_EvalFrameDefault + 25829
    23  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    24  org.python.python             	0x00000001011f1c4c call_function + 444
    25  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    26  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    27  org.python.python             	0x00000001011f1c4c call_function + 444
    28  org.python.python             	0x00000001011eea8a _PyEval_EvalFrameDefault + 25642
    29  org.python.python             	0x0000000101123eb0 function_code_fastcall + 128
    30  org.python.python             	0x00000001011265bb method_vectorcall + 235
    31  org.python.python             	0x000000010112388d PyVectorcall_Call + 109
    32  org.python.python             	0x000000010129179a t_bootstrap + 74
    33  org.python.python             	0x0000000101244a89 pythread_wrapper + 25
    34  libsystem_pthread.dylib       	0x00007fff6a767109 _pthread_start + 148
    35  libsystem_pthread.dylib       	0x00007fff6a762b8b thread_start + 15
    
    Thread 0 crashed with X86 Thread State (64-bit):
      rax: 0x0000000000000000  rbx: 0x00007fc89cdd5a40  rcx: 0x0000000000000000  rdx: 0x00007fc8a1c24150
      rdi: 0x00007fc89cdd73f0  rsi: 0x0000000101345ba0  rbp: 0x00007ffeeeb00a40  rsp: 0x00007ffeeeb00a30
       r8: 0x0000000101166880   r9: 0x0000000000000000  r10: 0x00007fc8a1cea440  r11: 0xfffffffffff39d60
      r12: 0x0000000101391e78  r13: 0x0000000000000000  r14: 0x00007fc89e182130  r15: 0x00007fc8a1ae2d10
      rip: 0x000000010252144d  rfl: 0x0000000000010202  cr2: 0x00007000064c2ff8
      
    Logical CPU:     0
    Error Code:      0x02000131
    Trap Number:     133
    
    
    Binary Images:
           0x1010fa000 -        0x1010fafff +org.python.python (3.8.3 - 3.8.3) <4A52E177-60C3-3B60-A1C5-3651F5857993> /Library/Frameworks/Python.framework/Versions/3.8/Resources/Python.app/Contents/MacOS/Python
           0x101102000 -        0x101338ff7 +org.python.python (3.8.3, [c] 2001-2019 Python Software Foundation. - 3.8.3) <ABC651E1-72AF-3D91-955E-B57001D86FC2> /Library/Frameworks/Python.framework/Versions/3.8/Python
           0x10148b000 -        0x101493fff +math.cpython-38-darwin.so (0) <1354713B-8427-38CF-9418-AE0B2E3C9290> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/math.cpython-38-darwin.so
           0x10149f000 -        0x1014aeff7 +_datetime.cpython-38-darwin.so (0) <7BCE75EC-CBB5-3812-BD76-A3E3D0C73029> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_datetime.cpython-38-darwin.so
           0x1014bf000 -        0x1014c1ff7 +_heapq.cpython-38-darwin.so (0) <97A0811A-F821-3A44-BA9E-39269C2A058D> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_heapq.cpython-38-darwin.so
           0x1014c9000 -        0x1014cafff +_posixsubprocess.cpython-38-darwin.so (0) <EF777AF5-5C5D-33FB-B6EE-1590AAD9D25D> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_posixsubprocess.cpython-38-darwin.so
           0x1014d2000 -        0x1014d5ff7 +select.cpython-38-darwin.so (0) <AD6F2B1F-A1AB-3E4F-A641-94B7059ABEA0> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/select.cpython-38-darwin.so
           0x1014df000 -        0x1014e4ff7 +zlib.cpython-38-darwin.so (0) <34F60B9D-FC23-3864-A516-311A941DA8E9> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/zlib.cpython-38-darwin.so
           0x1014ee000 -        0x1014f0ff7 +_bz2.cpython-38-darwin.so (0) <6D7B2A06-E971-37D4-BEB6-110865EBDAD8> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_bz2.cpython-38-darwin.so
           0x1014f9000 -        0x10152afff +_lzma.cpython-38-darwin.so (0) <008EB489-2F28-3ED5-AC50-CBB9BDA5C363> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_lzma.cpython-38-darwin.so
           0x101538000 -        0x101539ff7 +grp.cpython-38-darwin.so (0) <D4BC9BD3-C6C8-37FD-8165-A54FDD0E01A4> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/grp.cpython-38-darwin.so
           0x101541000 -        0x101541fff +_opcode.cpython-38-darwin.so (0) <E82DB906-779B-3162-9B7D-04FF6CC6EED4> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_opcode.cpython-38-darwin.so
           0x101549000 -        0x10154aff7 +_bisect.cpython-38-darwin.so (0) <32F2A2ED-4C32-3C76-A818-3FF0632C680D> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_bisect.cpython-38-darwin.so
           0x101552000 -        0x101556ff7 +_sha512.cpython-38-darwin.so (0) <1A72D84C-27FB-3C21-AA1F-1F9759AEA518> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_sha512.cpython-38-darwin.so
           0x10155e000 -        0x10155fff7 +_random.cpython-38-darwin.so (0) <3D63FC3A-D70D-3270-8CB8-E935544587D2> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_random.cpython-38-darwin.so
           0x101568000 -        0x1015b1fff +_decimal.cpython-38-darwin.so (0) <D9EBE3C4-89B6-32B6-8120-BDA01BFD4A7C> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_decimal.cpython-38-darwin.so
           0x1015d0000 -        0x1015d1ff7 +termios.cpython-38-darwin.so (0) <A203D0FF-E4EC-38FD-AB8A-BB99C7177073> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/termios.cpython-38-darwin.so
           0x1015d9000 -        0x1015ddfff +binascii.cpython-38-darwin.so (0) <80448651-FE0F-311A-8CF3-FBDEF71399E4> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/binascii.cpython-38-darwin.so
           0x1015e6000 -        0x1015ebff7 +_struct.cpython-38-darwin.so (0) <A73E0431-D8F2-3586-B24E-94389EACBD5D> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_struct.cpython-38-darwin.so
           0x1015f8000 -        0x101605fff +_socket.cpython-38-darwin.so (0) <716E93B0-2AA3-31CA-945F-B9E94916928D> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_socket.cpython-38-darwin.so
           0x101612000 -        0x101617fff +_json.cpython-38-darwin.so (0) <E384F6C8-A33E-3A62-96E8-EE60BBBD8475> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_json.cpython-38-darwin.so
           0x101621000 -        0x101624ff7 +_hashlib.cpython-38-darwin.so (0) <38EE8FA7-0D62-3779-950C-B912CEA099FE> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_hashlib.cpython-38-darwin.so
           0x10162e000 -        0x101686fff +libssl.1.1.dylib (0) <D2C6CEF7-687D-3D68-9BB1-5FB54A020027> /Library/Frameworks/Python.framework/Versions/3.8/lib/libssl.1.1.dylib
           0x1016b5000 -        0x1018caf87 +libcrypto.1.1.dylib (0) <CA2B41B8-E077-3B33-BC72-7E7C42B66156> /Library/Frameworks/Python.framework/Versions/3.8/lib/libcrypto.1.1.dylib
           0x101969000 -        0x10196ffff +_blake2.cpython-38-darwin.so (0) <42F3F8C5-B97B-35E6-BE65-BA553E2BF1E0> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_blake2.cpython-38-darwin.so
           0x101979000 -        0x101989fff +_sha3.cpython-38-darwin.so (0) <701C39F0-D1CF-39DD-941C-099051445CDF> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_sha3.cpython-38-darwin.so
           0x101993000 -        0x101a97ff7 +unicodedata.cpython-38-darwin.so (0) <F6A286EE-CDEF-3F01-8C22-D4B3A83A8EEC> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/unicodedata.cpython-38-darwin.so
           0x101aa5000 -        0x101ab9ff7 +_ssl.cpython-38-darwin.so (0) <1A81B3DF-88CB-3B64-B80E-BAD6DB5F3056> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_ssl.cpython-38-darwin.so
           0x101ad2000 -        0x101ad2fff +_uuid.cpython-38-darwin.so (0) <FFBCC7C0-DC2E-39F8-9FB7-7CEDC419D153> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_uuid.cpython-38-darwin.so
           0x101ada000 -        0x101adcfff +fcntl.cpython-38-darwin.so (0) <D0510226-6FA2-3D9B-AAFA-42AF05741544> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/fcntl.cpython-38-darwin.so
           0x101ae4000 -        0x101afafff +_pickle.cpython-38-darwin.so (0) <62CD3FB4-220F-3453-ABC7-D716AD8EFFE9> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_pickle.cpython-38-darwin.so
           0x101b0a000 -        0x101b0bfff +_queue.cpython-38-darwin.so (0) <0DEF7AB7-E5BD-3B72-98D1-10B511E419C6> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_queue.cpython-38-darwin.so
           0x101b14000 -        0x101b14ff7 +_contextvars.cpython-38-darwin.so (0) <6A39DEC4-53C5-38DF-9285-6F61A3A45329> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_contextvars.cpython-38-darwin.so
           0x101b1c000 -        0x101b23ff7 +_asyncio.cpython-38-darwin.so (0) <7F8C9F5C-A4B4-3315-88EA-849775626234> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_asyncio.cpython-38-darwin.so
           0x101b34000 -        0x101b38ff3 +_mysql.cpython-38-darwin.so (0) <25FA0758-62AC-3A14-909A-FF771A478E3B> /Users/USER/*/_mysql.cpython-38-darwin.so
           0x101b44000 -        0x101ea3fff +libmysqlclient.21.dylib (0) <5DDB9D3F-3C2F-303F-A7DB-6E6F621F70C5> /usr/local/mysql-8.0.15-macos10.14-x86_64/lib/libmysqlclient.21.dylib
           0x1020dd000 -        0x102129ff7 +libssl.1.0.0.dylib (0) <D14D4EB4-1878-323C-B2EB-DD5DF8249ACF> /usr/local/mysql-8.0.15-macos10.14-x86_64/lib/libssl.1.0.0.dylib
           0x102147000 -        0x1022bab2f +libcrypto.1.0.0.dylib (0) <970C9F4A-0D9B-3E2B-9A14-46D43C8CFA71> /usr/local/mysql-8.0.15-macos10.14-x86_64/lib/libcrypto.1.0.0.dylib
           0x102371000 -        0x102378ff7 +array.cpython-38-darwin.so (0) <A1E985CF-36C8-3D22-BEE5-2266D4480EB3> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/array.cpython-38-darwin.so
           0x102385000 -        0x102385ff7 +_scproxy.cpython-38-darwin.so (0) <DB2BE8B5-D86D-3DDA-8645-EB61BDE7FEF6> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_scproxy.cpython-38-darwin.so
           0x10238d000 -        0x10239eff7 +_ctypes.cpython-38-darwin.so (0) <B17DAED2-6EAE-33DE-A287-F17013E7FBA9> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_ctypes.cpython-38-darwin.so
           0x1023b5000 -        0x1023b6fff +resource.cpython-38-darwin.so (0) <7BCAC19B-9D06-3D94-8E04-2696B989E23A> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/resource.cpython-38-darwin.so
           0x1023be000 -        0x1024a2ff7 +_sqlite3.cpython-38-darwin.so (0) <E98E32C2-1F07-3B52-978C-DEECEC0E468A> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_sqlite3.cpython-38-darwin.so
           0x1024d3000 -        0x1024fcfff +pyexpat.cpython-38-darwin.so (0) <BFE2D681-44E2-3E55-8994-B86E03D39149> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/pyexpat.cpython-38-darwin.so
           0x102515000 -        0x102517ff7 +_lsprof.cpython-38-darwin.so (0) <13161B12-2C49-361E-9570-09AF39CF5407> /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload/_lsprof.cpython-38-darwin.so
           0x102520000 -        0x102521ff7 +_time_machine.cpython-38-darwin.so (0) <83713906-3A5E-378A-AC19-C17321DE4789> /Users/USER/*/_time_machine.cpython-38-darwin.so
           0x10edb7000 -        0x10ee48eff  dyld (750.5) <E4698FBD-806A-3396-B279-E685BA37430B> /usr/lib/dyld
        0x7fff2c16f000 -     0x7fff2c16ffff  com.apple.Accelerate (1.11 - Accelerate 1.11) <56DFF715-6A4E-3231-BDCC-A348BCB05047> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
        0x7fff2c187000 -     0x7fff2c7ddfff  com.apple.vImage (8.1 - 524.2.1) <17C93AB9-1625-3FDB-9851-C5E77BBE3428> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
        0x7fff2c7de000 -     0x7fff2ca45ff7  libBLAS.dylib (1303.60.1) <CBC28BE4-3C78-3AED-9565-0D625251D121> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
        0x7fff2ca46000 -     0x7fff2cf19fef  libBNNS.dylib (144.100.2) <8D653678-1F9B-3670-AAE2-46DFB8D37643> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib
        0x7fff2cf1a000 -     0x7fff2d2b5fff  libLAPACK.dylib (1303.60.1) <F8E9D081-7C60-32EC-A47D-2D30CAD73C5F> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
        0x7fff2d2b6000 -     0x7fff2d2cbfec  libLinearAlgebra.dylib (1303.60.1) <D2C1ACEA-2B6A-339A-9EEB-62A76CC92CBE> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
        0x7fff2d2cc000 -     0x7fff2d2d1ff3  libQuadrature.dylib (7) <3112C977-8306-3190-8313-01A952B7F3CF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib
        0x7fff2d2d2000 -     0x7fff2d342fff  libSparse.dylib (103) <40510BF9-99A7-3155-A81D-6DE5A0C73EDC> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib
        0x7fff2d343000 -     0x7fff2d355fef  libSparseBLAS.dylib (1303.60.1) <3C1066AB-20D5-38D2-B1F2-70A03DE76D0B> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
        0x7fff2d356000 -     0x7fff2d52dfd7  libvDSP.dylib (735.121.1) <74702E2E-ED05-3765-B18C-64BEFF62B517> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
        0x7fff2d52e000 -     0x7fff2d5f0fef  libvMisc.dylib (735.121.1) <137558BF-503D-3A6E-96DC-A181E3FB31FF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
        0x7fff2d5f1000 -     0x7fff2d5f1fff  com.apple.Accelerate.vecLib (3.11 - vecLib 3.11) <D7E8E400-35C8-3174-9956-8D1B483620DA> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
        0x7fff2ed56000 -     0x7fff2f0e4ffd  com.apple.CFNetwork (1126 - 1126) <BB8F4C63-10B8-3ACD-84CF-D4DCFA9245DD> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
        0x7fff304e4000 -     0x7fff30963ffb  com.apple.CoreFoundation (6.9 - 1676.105) <6AF8B3CC-BC3F-3869-B9FB-1D881422364E> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
        0x7fff318cb000 -     0x7fff318cbfff  com.apple.CoreServices (1069.24 - 1069.24) <D9F6AB40-10EC-3682-A969-85560E2E4768> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
        0x7fff318cc000 -     0x7fff31951fff  com.apple.AE (838.1 - 838.1) <5F26DA9B-FB2E-3AF8-964B-63BD6671CF12> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
        0x7fff31952000 -     0x7fff31c33ff7  com.apple.CoreServices.CarbonCore (1217 - 1217) <8022AF47-AA99-3786-B086-141D84F00387> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
        0x7fff31c34000 -     0x7fff31c81ffd  com.apple.DictionaryServices (1.2 - 323.6) <C0F3830C-A4C6-3046-9A6A-DE1B5D448C2C> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
        0x7fff31c82000 -     0x7fff31c8aff7  com.apple.CoreServices.FSEvents (1268.100.1 - 1268.100.1) <E4B2CAF2-1203-335F-9971-1278CB6E2AE0> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
        0x7fff31c8b000 -     0x7fff31ec5ff6  com.apple.LaunchServices (1069.24 - 1069.24) <2E0AD228-B1CC-3645-91EE-EB7F46F2147B> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
        0x7fff31ec6000 -     0x7fff31f5eff1  com.apple.Metadata (10.7.0 - 2076.6) <C8034E84-7DD4-34B9-9CDF-16A05032FF39> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
        0x7fff31f5f000 -     0x7fff31f8cfff  com.apple.CoreServices.OSServices (1069.24 - 1069.24) <72FDEA52-7607-3745-AC43-630D80962099> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
        0x7fff31f8d000 -     0x7fff31ff4fff  com.apple.SearchKit (1.4.1 - 1.4.1) <086EB5DF-A2EC-3342-8028-CA7996BE5CB2> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
        0x7fff31ff5000 -     0x7fff32019ff5  com.apple.coreservices.SharedFileList (131.4 - 131.4) <AE333DA2-C279-3751-8C15-B963E58EE61E> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
        0x7fff3285f000 -     0x7fff32865fff  com.apple.DiskArbitration (2.7 - 2.7) <52E7D181-2A18-37CD-B24F-AA32E93F7A69> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
        0x7fff32b9e000 -     0x7fff32f63fff  com.apple.Foundation (6.9 - 1676.105) <1FA28BAB-7296-3A09-8E1E-E62A7D233DB8> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
        0x7fff332d7000 -     0x7fff3337bff3  com.apple.framework.IOKit (2.0.2 - 1726.121.1) <A0F54725-036F-3279-A46E-C2ABDBFD479B> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
        0x7fff36e7c000 -     0x7fff36e88ffe  com.apple.NetFS (6.0 - 4.0) <AC74E6A4-6E9B-3AB1-9577-8277F8A3EDE0> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
        0x7fff39a6a000 -     0x7fff39a86fff  com.apple.CFOpenDirectory (10.15 - 220.40.1) <BFC32EBE-D95C-3267-B95C-5CEEFD189EA6> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
        0x7fff39a87000 -     0x7fff39a92ffd  com.apple.OpenDirectory (10.15 - 220.40.1) <76A20BBA-775F-3E17-AB0F-FEDFCDCE0716> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
        0x7fff3ce2c000 -     0x7fff3d175ff1  com.apple.security (7.0 - 59306.120.7) <AEA33464-1507-36F1-8CAE-A86EB787F9B5> /System/Library/Frameworks/Security.framework/Versions/A/Security
        0x7fff3d176000 -     0x7fff3d1feffb  com.apple.securityfoundation (6.0 - 55236.60.1) <79289FE1-CB5F-3BEF-A33F-11A29A93A681> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
        0x7fff3d22d000 -     0x7fff3d231ff8  com.apple.xpc.ServiceManagement (1.0 - 1) <4194D29D-F0D4-33F8-839A-D03C6C62D8DB> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
        0x7fff3dedd000 -     0x7fff3df4bff7  com.apple.SystemConfiguration (1.19 - 1.19) <0CF8726A-BE41-3E07-B895-FBC44B75450E> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
        0x7fff41eac000 -     0x7fff41f71ff7  com.apple.APFS (1412.120.2 - 1412.120.2) <1E8FD511-FDC4-31A2-ACDE-EB5192032BC6> /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS
        0x7fff43df9000 -     0x7fff43e08fd7  com.apple.AppleFSCompression (119.100.1 - 1.0) <2E75CF51-B693-3275-9A4F-40571D48745E> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
        0x7fff455c8000 -     0x7fff455d1ff7  com.apple.coreservices.BackgroundTaskManagement (1.0 - 104) <F070F440-27AB-3FCF-9602-F278C332CA01> /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement
        0x7fff483ce000 -     0x7fff483deff3  com.apple.CoreEmoji (1.0 - 107.1) <CDCCB4B0-B98F-38E8-9568-C81320E756EB> /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji
        0x7fff48a1e000 -     0x7fff48a88ff0  com.apple.CoreNLP (1.0 - 213) <40FC46D2-844C-3282-A8E4-69DD827F05C5> /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP
        0x7fff49903000 -     0x7fff49931ffd  com.apple.CSStore (1069.24 - 1069.24) <C96E5CE8-D604-3F13-B079-B2BA33B90081> /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore
        0x7fff55b91000 -     0x7fff55c5fffd  com.apple.LanguageModeling (1.0 - 215.1) <A6FAA215-9A01-3EE1-B304-2238801C5883> /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
        0x7fff55c60000 -     0x7fff55ca8fff  com.apple.Lexicon-framework (1.0 - 72) <6AE1872C-0352-36FE-90CC-7303F13A5BEF> /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon
        0x7fff55caf000 -     0x7fff55cb4ff3  com.apple.LinguisticData (1.0 - 353.18) <686E7B7C-640F-3D7B-A9C1-31E2DFACD457> /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData
        0x7fff5701b000 -     0x7fff57067fff  com.apple.spotlight.metadata.utilities (1.0 - 2076.6) <C3AEA22D-1FEB-3E38-9821-1FA447C8AF9D> /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities
        0x7fff57b1e000 -     0x7fff57b28fff  com.apple.NetAuth (6.2 - 6.2) <D660F2CB-5A49-3DD0-9DB3-86EF0797828C> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
        0x7fff60da3000 -     0x7fff60db3ff3  com.apple.TCC (1.0 - 1) <FD146B21-6DC0-3B66-BB95-57A5016B1365> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
        0x7fff64485000 -     0x7fff64487ff3  com.apple.loginsupport (1.0 - 1) <31F02734-1ECF-37D9-9DF6-7C3BC3A324FE> /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
        0x7fff66fa5000 -     0x7fff66fd9fff  libCRFSuite.dylib (48) <02C52318-C537-3FD8-BBC4-E5BD25430652> /usr/lib/libCRFSuite.dylib
        0x7fff66fdc000 -     0x7fff66fe6fff  libChineseTokenizer.dylib (34) <04A7CB5A-FD68-398A-A206-33A510C115E7> /usr/lib/libChineseTokenizer.dylib
        0x7fff67072000 -     0x7fff67074ff7  libDiagnosticMessagesClient.dylib (112) <27220E98-6CE2-33E3-BD48-3CC3CE4AA036> /usr/lib/libDiagnosticMessagesClient.dylib
        0x7fff67548000 -     0x7fff67549fff  libSystem.B.dylib (1281.100.1) <B6FDA8A9-3D2B-3BD5-B5B0-57D311C0FF3D> /usr/lib/libSystem.B.dylib
        0x7fff675d6000 -     0x7fff675d7fff  libThaiTokenizer.dylib (3) <97DC10ED-3C11-3C89-B366-299A644035E7> /usr/lib/libThaiTokenizer.dylib
        0x7fff675ef000 -     0x7fff67605fff  libapple_nghttp2.dylib (1.39.2) <B99D7150-D4E2-31A2-A594-36DA4B90D558> /usr/lib/libapple_nghttp2.dylib
        0x7fff6763a000 -     0x7fff676acff7  libarchive.2.dylib (72.100.1) <20B70252-0C4B-3AFD-8C8D-F51921E9D324> /usr/lib/libarchive.2.dylib
        0x7fff6774a000 -     0x7fff6774aff3  libauto.dylib (187) <85383E24-1592-36BC-BB39-308B7F1C826E> /usr/lib/libauto.dylib
        0x7fff67810000 -     0x7fff67820ffb  libbsm.0.dylib (60.100.1) <B2331E11-3CBB-3BCF-93A6-12627AE444D0> /usr/lib/libbsm.0.dylib
        0x7fff67821000 -     0x7fff6782dfff  libbz2.1.0.dylib (44) <BF40E193-8856-39B7-98F8-7A17B328B1E9> /usr/lib/libbz2.1.0.dylib
        0x7fff6782e000 -     0x7fff67880fff  libc++.1.dylib (902.1) <AD0805FE-F98B-3E2F-B072-83782B22DAC9> /usr/lib/libc++.1.dylib
        0x7fff67881000 -     0x7fff67896ffb  libc++abi.dylib (902) <771E9263-E832-3985-9477-8F1B2D73B771> /usr/lib/libc++abi.dylib
        0x7fff67897000 -     0x7fff67897fff  libcharset.1.dylib (59) <FF23D4ED-A5AD-3592-9574-48486C7DF85B> /usr/lib/libcharset.1.dylib
        0x7fff67898000 -     0x7fff678a9fff  libcmph.dylib (8) <296A51E6-9661-3AC2-A1C9-F1E3510F91AA> /usr/lib/libcmph.dylib
        0x7fff678aa000 -     0x7fff678c1fd7  libcompression.dylib (87) <21F37C2E-B9AA-38CE-9023-B763C8828AC6> /usr/lib/libcompression.dylib
        0x7fff67b9b000 -     0x7fff67bb1ff7  libcoretls.dylib (167) <9E5D1E0C-03F8-37B6-82A1-0D0597021CB8> /usr/lib/libcoretls.dylib
        0x7fff67bb2000 -     0x7fff67bb3fff  libcoretls_cfhelpers.dylib (167) <C23BE09B-85D1-3744-9E7B-E2B11ACD5442> /usr/lib/libcoretls_cfhelpers.dylib
        0x7fff682d9000 -     0x7fff682d9fff  libenergytrace.dylib (21) <DBF8BDEE-7229-3F06-AC10-A28DCC4243C0> /usr/lib/libenergytrace.dylib
        0x7fff68300000 -     0x7fff68302fff  libfakelink.dylib (149.1) <122F530F-F10E-3DD5-BBEA-91796BE583F3> /usr/lib/libfakelink.dylib
        0x7fff68311000 -     0x7fff68316fff  libgermantok.dylib (24) <DD279BF6-E906-30D3-A69E-DC797E95F147> /usr/lib/libgermantok.dylib
        0x7fff68321000 -     0x7fff68411fff  libiconv.2.dylib (59) <F58FED71-6CCA-30E8-9A51-13E9B46E568D> /usr/lib/libiconv.2.dylib
        0x7fff68412000 -     0x7fff68669fff  libicucore.A.dylib (64260.0.1) <7B9204AC-EA14-3FF3-B6B9-4C85B37EED79> /usr/lib/libicucore.A.dylib
        0x7fff68683000 -     0x7fff68684fff  liblangid.dylib (133) <36581D30-1C7B-3A58-AA07-36237BD75E0E> /usr/lib/liblangid.dylib
        0x7fff68685000 -     0x7fff6869dff3  liblzma.5.dylib (16) <4DB30730-DBD1-3503-957A-D604049B98F9> /usr/lib/liblzma.5.dylib
        0x7fff686b5000 -     0x7fff6875cff7  libmecab.dylib (883.11) <66AD729B-2BCC-3347-B9B3-FD88570E884D> /usr/lib/libmecab.dylib
        0x7fff6875d000 -     0x7fff689bfff1  libmecabra.dylib (883.11) <2AE744D2-AC95-3720-8E66-4F9C7A79384C> /usr/lib/libmecabra.dylib
        0x7fff68e8b000 -     0x7fff69307ff5  libnetwork.dylib (1880.120.4) <715FB943-BA01-351C-BEA6-121970472985> /usr/lib/libnetwork.dylib
        0x7fff693a8000 -     0x7fff693dbfde  libobjc.A.dylib (787.1) <CA836D3E-4595-33F1-B70C-7E39A3FBBE16> /usr/lib/libobjc.A.dylib
        0x7fff693ee000 -     0x7fff693f2fff  libpam.2.dylib (25.100.1) <732E8D8E-C630-3EC2-B6C3-A1564E3B68B8> /usr/lib/libpam.2.dylib
        0x7fff693f5000 -     0x7fff6942bff7  libpcap.A.dylib (89.120.1) <CF2ADF15-2D44-3A35-94B4-DD24052F9B23> /usr/lib/libpcap.A.dylib
        0x7fff69523000 -     0x7fff6970dff7  libsqlite3.dylib (308.5) <AF518115-4AD1-39F2-9B82-E2640E2221E1> /usr/lib/libsqlite3.dylib
        0x7fff6995e000 -     0x7fff69961ffb  libutil.dylib (57) <D33B63D2-ADC2-38BD-B8F2-24056C41E07B> /usr/lib/libutil.dylib
        0x7fff69962000 -     0x7fff6996fff7  libxar.1.dylib (425.2) <943A4CBB-331B-3A04-A11F-A2301189D40B> /usr/lib/libxar.1.dylib
        0x7fff69975000 -     0x7fff69a57ff7  libxml2.2.dylib (33.3) <262EF7C6-7D83-3C01-863F-36E97F5ACD34> /usr/lib/libxml2.2.dylib
        0x7fff69a5b000 -     0x7fff69a83fff  libxslt.1.dylib (16.9) <86FE4382-BD77-3C19-A678-11EBCD70685A> /usr/lib/libxslt.1.dylib
        0x7fff69a84000 -     0x7fff69a96ff3  libz.1.dylib (76) <DB120508-3BED-37A8-B439-5235EAB4618A> /usr/lib/libz.1.dylib
        0x7fff6a344000 -     0x7fff6a349ff3  libcache.dylib (83) <A5ECC751-A681-30D8-B33C-D192C15D25C8> /usr/lib/system/libcache.dylib
        0x7fff6a34a000 -     0x7fff6a355fff  libcommonCrypto.dylib (60165.120.1) <C321A74A-AA91-3785-BEBF-BEDC6975026C> /usr/lib/system/libcommonCrypto.dylib
        0x7fff6a356000 -     0x7fff6a35dfff  libcompiler_rt.dylib (101.2) <652A6012-7E5C-3F4F-9438-86BC094526F3> /usr/lib/system/libcompiler_rt.dylib
        0x7fff6a35e000 -     0x7fff6a367ff7  libcopyfile.dylib (166.40.1) <40113A69-A81C-3397-ADC6-1D16B9A22C3E> /usr/lib/system/libcopyfile.dylib
        0x7fff6a368000 -     0x7fff6a3fafe3  libcorecrypto.dylib (866.120.3) <5E4B0E50-24DD-3E04-9374-EDA9FFD6257B> /usr/lib/system/libcorecrypto.dylib
        0x7fff6a507000 -     0x7fff6a547ff0  libdispatch.dylib (1173.100.2) <201EDBF3-0B36-31BA-A7CB-443CE35C05D4> /usr/lib/system/libdispatch.dylib
        0x7fff6a548000 -     0x7fff6a57efff  libdyld.dylib (750.5) <7E711A46-5E4D-393C-AEA6-440E2A5CCD0C> /usr/lib/system/libdyld.dylib
        0x7fff6a57f000 -     0x7fff6a57fffb  libkeymgr.dylib (30) <52662CAA-DB1F-30A3-BE13-D6274B1A6D7B> /usr/lib/system/libkeymgr.dylib
        0x7fff6a580000 -     0x7fff6a58cff3  libkxld.dylib (6153.121.2) <5EBB4886-C7B6-31D6-AA63-D861B2D58FCE> /usr/lib/system/libkxld.dylib
        0x7fff6a58d000 -     0x7fff6a58dff7  liblaunch.dylib (1738.120.8) <07CF647B-F9DC-3907-AD98-2F85FCB34A72> /usr/lib/system/liblaunch.dylib
        0x7fff6a58e000 -     0x7fff6a593ff7  libmacho.dylib (959.0.1) <D91DFF00-E22F-3796-8A1C-4C1F5F8FA03C> /usr/lib/system/libmacho.dylib
        0x7fff6a594000 -     0x7fff6a596ff3  libquarantine.dylib (110.40.3) <D3B7D02C-7646-3FB4-8529-B36DCC2419EA> /usr/lib/system/libquarantine.dylib
        0x7fff6a597000 -     0x7fff6a598ff7  libremovefile.dylib (48) <B5E88D9B-C2BE-3496-BBB2-C996317E18A3> /usr/lib/system/libremovefile.dylib
        0x7fff6a599000 -     0x7fff6a5b0ff3  libsystem_asl.dylib (377.60.2) <1170348D-2491-33F1-AA79-E2A05B4A287C> /usr/lib/system/libsystem_asl.dylib
        0x7fff6a5b1000 -     0x7fff6a5b1ff7  libsystem_blocks.dylib (74) <7AFBCAA6-81BE-36C3-8DB0-AAE0A4ACE4C5> /usr/lib/system/libsystem_blocks.dylib
        0x7fff6a5b2000 -     0x7fff6a639fff  libsystem_c.dylib (1353.100.2) <935DDCE9-4ED0-3F79-A05A-A123DDE399CC> /usr/lib/system/libsystem_c.dylib
        0x7fff6a63a000 -     0x7fff6a63dffb  libsystem_configuration.dylib (1061.120.2) <EA9BC2B1-5001-3463-9FAF-39FF61CAC87C> /usr/lib/system/libsystem_configuration.dylib
        0x7fff6a63e000 -     0x7fff6a641fff  libsystem_coreservices.dylib (114) <3D0A3AA8-8415-37B2-AAE3-66C03BCE8B55> /usr/lib/system/libsystem_coreservices.dylib
        0x7fff6a642000 -     0x7fff6a64afff  libsystem_darwin.dylib (1353.100.2) <6EEC9975-EE3B-3C95-AA5B-030FD10587BC> /usr/lib/system/libsystem_darwin.dylib
        0x7fff6a64b000 -     0x7fff6a652fff  libsystem_dnssd.dylib (1096.100.3) <0115092A-E61B-317D-8670-41C7C34B1A82> /usr/lib/system/libsystem_dnssd.dylib
        0x7fff6a653000 -     0x7fff6a654ffb  libsystem_featureflags.dylib (17) <AFDB5095-0472-34AC-BA7E-497921BF030A> /usr/lib/system/libsystem_featureflags.dylib
        0x7fff6a655000 -     0x7fff6a6a2ff7  libsystem_info.dylib (538) <851693E9-C079-3547-AD41-353F8C248BE8> /usr/lib/system/libsystem_info.dylib
        0x7fff6a6a3000 -     0x7fff6a6cfff7  libsystem_kernel.dylib (6153.121.2) <9F9902C9-A46F-3CA9-B7F9-5CCFE98FBF75> /usr/lib/system/libsystem_kernel.dylib
        0x7fff6a6d0000 -     0x7fff6a717fff  libsystem_m.dylib (3178) <436CFF76-6A99-36F2-A3B6-8D017396A050> /usr/lib/system/libsystem_m.dylib
        0x7fff6a718000 -     0x7fff6a73ffff  libsystem_malloc.dylib (283.100.6) <D4BA7DF2-57AC-33B0-B948-A688EE43C799> /usr/lib/system/libsystem_malloc.dylib
        0x7fff6a740000 -     0x7fff6a74dffb  libsystem_networkextension.dylib (1095.120.6) <6DE86DB0-8CD2-361E-BD6A-A34282B47847> /usr/lib/system/libsystem_networkextension.dylib
        0x7fff6a74e000 -     0x7fff6a757ff7  libsystem_notify.dylib (241.100.2) <7E9E2FC8-DF26-340C-B196-B81B11850C46> /usr/lib/system/libsystem_notify.dylib
        0x7fff6a758000 -     0x7fff6a760fef  libsystem_platform.dylib (220.100.1) <736920EA-6AE0-3B1B-BBDA-7DCDF0C229DF> /usr/lib/system/libsystem_platform.dylib
        0x7fff6a761000 -     0x7fff6a76bfff  libsystem_pthread.dylib (416.100.3) <77488669-19A3-3993-AD65-CA5377E2475A> /usr/lib/system/libsystem_pthread.dylib
        0x7fff6a76c000 -     0x7fff6a770ff3  libsystem_sandbox.dylib (1217.120.7) <20C93D69-6452-3C82-9521-8AE54345C66F> /usr/lib/system/libsystem_sandbox.dylib
        0x7fff6a771000 -     0x7fff6a773fff  libsystem_secinit.dylib (62.100.2) <E851113D-D5B1-3FB0-9D29-9C7647A71961> /usr/lib/system/libsystem_secinit.dylib
        0x7fff6a774000 -     0x7fff6a77bffb  libsystem_symptoms.dylib (1238.120.1) <25C3866B-004E-3621-9CD3-B1E9C4D887EB> /usr/lib/system/libsystem_symptoms.dylib
        0x7fff6a77c000 -     0x7fff6a792ff2  libsystem_trace.dylib (1147.120) <A1ED1D3A-5FAD-3559-A1D6-1BE4E1C5756A> /usr/lib/system/libsystem_trace.dylib
        0x7fff6a794000 -     0x7fff6a799ff7  libunwind.dylib (35.4) <253A12E2-F88F-3838-A666-C5306F833CB8> /usr/lib/system/libunwind.dylib
        0x7fff6a79a000 -     0x7fff6a7cfffe  libxpc.dylib (1738.120.8) <68D433B6-DCFF-385D-8620-F847FB7D4A5A> /usr/lib/system/libxpc.dylib
    
    External Modification Summary:
      Calls made by other processes targeting this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by this process:
        task_for_pid: 0
        thread_create: 0
        thread_set_state: 0
      Calls made by all processes on this machine:
        task_for_pid: 150
        thread_create: 0
        thread_set_state: 0
    
    VM Region Summary:
    ReadOnly portion of Libraries: Total=473.4M resident=0K(0%) swapped_out_or_unallocated=473.4M(100%)
    Writable regions: Total=114.8M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=114.8M(100%)
     
                                    VIRTUAL   REGION 
    REGION TYPE                        SIZE    COUNT (non-coalesced) 
    ===========                     =======  ======= 
    Activity Tracing                   256K        1 
    Kernel Alloc Once                    8K        1 
    MALLOC                            81.8M      198 
    MALLOC guard page                   16K        4 
    MALLOC_LARGE (reserved)            384K        2         reserved VM address space (unallocated)
    STACK GUARD                          8K        2 
    Stack                             32.0M        2 
    __DATA                            8864K      171 
    __DATA_CONST                        20K        1 
    __LINKEDIT                       392.2M       50 
    __OBJC_RO                         32.2M        1 
    __OBJC_RW                         1892K        2 
    __TEXT                            81.2M      165 
    __UNICODE                          564K        1 
    shared memory                       12K        3 
    ===========                     =======  ======= 
    TOTAL                            631.2M      604 
    TOTAL, minus reserved VM space   630.8M      604 
    
    Model: MacBookAir7,2, BootROM 194.0.0.0.0, 2 processors, Dual-Core Intel Core i5, 1.6 GHz, 8 GB, SMC 2.27f2
    Graphics: kHW_IntelHDGraphics6000Item, Intel HD Graphics 6000, spdisplays_builtin
    Memory Module: BANK 0/DIMM0, 4 GB, DDR3, 1600 MHz, 0x02FE, -
    Memory Module: BANK 1/DIMM0, 4 GB, DDR3, 1600 MHz, 0x02FE, -
    AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0x117), Broadcom BCM43xx 1.0 (7.77.111.1 AirPortDriverBrcmNIC-1610.1)
    Bluetooth: Version 7.0.5f6, 3 services, 27 devices, 1 incoming serial ports
    Network Service: Wi-Fi, AirPort, en0
    Serial ATA Device: APPLE SSD SM0256G, 251 GB
    USB Device: USB 3.0 Bus
    USB Device: BRCM20702 Hub
    USB Device: Bluetooth USB Host Controller
    Thunderbolt Bus: MacBook Air, Apple Inc., 27.2
    
    opened by pratyushmittal 7
  • Time Warp

    Time Warp

    Hello, I don't know if this is the right place, but I'm using your module in my test environment and thought maybe you have a tip for me.

    Is it somehow possible to speed up the time? With different factors. E.g. that a second is only a hundredth as long.

    I need that to shorten real time tasks that normally run over many hours to be able to test them better.

    opened by jb-alvarado 5
  • Installation problems

    Installation problems

    Hi,

    Thanks for building this - looks very exciting and will hopefully speed up our tests a lot.

    Unfortunately I can't currently get it to install (Python 3.6.2 on MacOS):

    $ env/bin/python --version
    Python 3.6.2
    
    $ env/bin/pip install time-machine
    Collecting time-machine
      Using cached time-machine-1.0.1.tar.gz (60 kB)
      WARNING: Generating metadata for package time-machine produced metadata for project name unknown. Fix your #egg=time-machine fragments.
    Building wheels for collected packages: unknown, unknown
      Building wheel for unknown (setup.py) ... done
      Created wheel for unknown: filename=UNKNOWN-0.0.0-cp36-cp36m-macosx_10_15_x86_64.whl size=4748 sha256=3d9e0639969264f65a9c208b31862567bef56f493b10e88ae9e9c9110e7bad78
      Stored in directory: /Users/jamie/Library/Caches/pip/wheels/5d/7c/4c/042fbaeda0209ab73ce5a275df4efc49a2d8de09fccea3413d
      Building wheel for unknown (setup.py) ... done
      Created wheel for unknown: filename=UNKNOWN-0.0.0-cp36-cp36m-macosx_10_15_x86_64.whl size=4748 sha256=3d9e0639969264f65a9c208b31862567bef56f493b10e88ae9e9c9110e7bad78
      Stored in directory: /private/var/folders/zv/cntypnxj6pgb2tq59c9bdvd40000gn/T/pip-ephem-wheel-cache-yvxvovid/wheels/3f/9b/e7/1ab852a3e52202a96e5c9a963218743f990d693b3b9aeac5d8
    Successfully built unknown unknown
    Installing collected packages: unknown
    Successfully installed unknown-0.0.0
    
    $ env/bin/python -c 'import time_machine'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ModuleNotFoundError: No module named 'time_machine'
    
    opened by j4mie 5
  • inexact results with pandas

    inexact results with pandas

    Python Version

    3.10.6

    pytest Version

    Package Version

    2.8.2

    Description

    >>> with time_machine.travel("2000-01-01 00:12:34.567890"):
    ...     print(datetime.now())
    ...     print(pd.Timestamp("now"))
    ...     print(pd.Timestamp.now())
    ...     print(pd.to_datetime("now", utc=True))
    ...     print(np.datetime64("now"))
    ... 
    2000-01-01 00:12:34.567890
    2000-01-01 00:12:34.567942
    2000-01-01 00:12:34.567986
    2000-01-01 06:12:34.568156+00:00
    2022-10-20T02:25:38
    

    The result with stdlib datetime is exact, but the results with pandas suffer a kind of delay or something(?) Also it looks like numpy was not affected at all.

    pandas v1.5.1 and numpy v1.23.4 on macOS

    opened by wimglenn 4
  • using tz_offset only for local time

    using tz_offset only for local time

    Hi,

    want to migrate from libfaketime to time-machine.

    But unlike in libfaketime and freezegun, tz_offset is used also for the UTC time. In freezegun and libfaketime tz_offset is used only to determine the "local" time.

    see the following tests: https://github.com/simon-weber/python-libfaketime/blob/master/test/test_faketime.py#L53 https://github.com/spulec/freezegun/blob/master/tests/test_datetimes.py#L77

    This PR tries to fix that, but it isn't complete. The local time somehow has an offset of 1 hour. But I create it to maybe give a starting point to fix this.

    opened by danygielow 4
  • Flag that we're time traveling, with access to true datetime

    Flag that we're time traveling, with access to true datetime

    Description

    In some of our integration tests we make API calls to external services. Some of these require a timestamp for use in authentication. I know that excluding some modules from time-machine isn't possible due to the implementation, but having some signal that we're time traveling would suffice, along with access to the unpatched datetime module.

    opened by pegler 3
  • Freeze time instead of just shifting it

    Freeze time instead of just shifting it

    Hi! This library looks very cool, even more with the added support for pytest. I have a question which might be more related with me not understanding the use cases or purpose than the tool itself.

    I thought I would be able to tell the library: everytime I call now I want you to return this. Instead what I found is that when I call the move_to method in the time_machine fixture, time goes back to that time but the starts moving forward accurately. What I wanted to be able to do is to always get the same value when utcnow is called so I can test the value of queries that I am generating on the fly.

    Is this possible? Thanks!

    opened by jaraqueffdc 3
  • Flaky time-related test in downstream 'tox' project unit test

    Flaky time-related test in downstream 'tox' project unit test

    Python Version

    cpython 3.11

    pytest Version

    7.2.0

    Package Version

    2.8.2

    Description

    This unit test in (downstream time-machine usage-site) tox includes a representation of elapsed time is evidently experiencing flaky results for some reason.

    Please note: I'm not certain that time-machine is the cause here; it seems possible-to-likely to me though - I'm continuing to investigate.

    The above failure was on Windows 2022, and I'll try to determine whether that platform is a shared trait among the failing tests, or not a relevant factor.

    opened by jayaddison 2
  • Segfault on PyPy3.9

    Segfault on PyPy3.9

    Python Version

    Python 3.9.15 (27701b51ceb07e359281c991e8a38d08da6de56e, Nov 24 2022, 19:53:33) [PyPy 7.3.10-candidate3 with GCC 12.2.1 20221008]

    pytest Version

    7.2.0

    Package Version

    333ab698c31bb23c454747d16f61eeb0b2e6453a

    Description

    Upon attempting to run the test suite using pypy3, it immediately segfaults:

    $ tox -e pypy39
    pypy39 inst-nodeps: /tmp/time-machine/.tox/.tmp/package/1/time-machine-2.8.2.tar.gz
    pypy39 installed: attrs==22.1.0,cffi==1.15.1,coverage==6.5.0,exceptiongroup==1.0.4,greenlet==0.4.13,hpy==0.0.4.dev179+g9b5d200,importlib-metadata==5.0.0,iniconfig==1.1.1,packaging==21.3,pluggy==1.0.0,pyparsing==3.0.9,pytest==7.2.0,pytest-randomly==3.12.0,python-dateutil==2.8.2,readline==6.2.4.1,six==1.16.0,time-machine @ file:///tmp/time-machine/.tox/.tmp/package/1/time-machine-2.8.2.tar.gz,tomli==2.0.1,zipp==3.10.0
    pypy39 run-test-pre: PYTHONHASHSEED='488944051'
    pypy39 run-test: commands[0] | python -s -W error::ResourceWarning -W error::DeprecationWarning -W error::PendingDeprecationWarning -m coverage run -m pytest tests
    ========================================================= test session starts =========================================================
    platform linux -- Python 3.9.15[pypy-7.3.10-candidate], pytest-7.2.0, pluggy-1.0.0
    cachedir: .tox/pypy39/.pytest_cache
    Using --randomly-seed=2406368577
    rootdir: /tmp/time-machine, configfile: pyproject.toml
    plugins: time-machine-2.8.2, randomly-3.12.0
    collected 81 items                                                                                                                    
    
    tests/test_time_machine.py Fatal Python error: Segmentation fault
    
    Stack (most recent call first, approximate line numbers):
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/time_machine/__init__.py", line 231 in start
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/time_machine/__init__.py", line 259 in __enter__
      File "/tmp/time-machine/tests/test_time_machine.py", line 792 in test_time_time
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/python.py", line 188 in pytest_pyfunc_call
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_callers.py", line 9 in _multicall
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_manager.py", line 77 in _hookexec
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_hooks.py", line 244 in __call__
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/python.py", line 1787 in runtest
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 158 in pytest_runtest_call
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_callers.py", line 9 in _multicall
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_manager.py", line 77 in _hookexec
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_hooks.py", line 244 in __call__
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 260 in <lambda>
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 316 in from_call
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 245 in call_runtest_hook
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 217 in call_and_report
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 117 in runtestprotocol
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/runner.py", line 109 in pytest_runtest_protocol
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_callers.py", line 9 in _multicall
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_manager.py", line 77 in _hookexec
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_hooks.py", line 244 in __call__
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/main.py", line 337 in pytest_runtestloop
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_callers.py", line 9 in _multicall
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_manager.py", line 77 in _hookexec
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_hooks.py", line 244 in __call__
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/main.py", line 320 in _main
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/main.py", line 257 in wrap_session
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/main.py", line 316 in pytest_cmdline_main
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_callers.py", line 9 in _multicall
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_manager.py", line 77 in _hookexec
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pluggy/_hooks.py", line 244 in __call__
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/config/__init__.py", line 135 in main
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/_pytest/config/__init__.py", line 183 in console_main
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/pytest/__main__.py", line 1 in <module>
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/coverage/execfile.py", line 157 in run
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/coverage/cmdline.py", line 782 in do_run
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/coverage/cmdline.py", line 588 in command_line
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/coverage/cmdline.py", line 934 in main
      File "/tmp/time-machine/.tox/pypy39/lib/pypy3.9/site-packages/coverage/__main__.py", line 4 in <module>
      File "/usr/lib/pypy3.9/runpy.py", line 64 in _run_code
      File "/usr/lib/pypy3.9/runpy.py", line 175 in _run_module_as_main
      File "<builtin>/app_main.py", line 131 in run_toplevel
      File "<builtin>/app_main.py", line 733 in run_command_line
      File "<builtin>/app_main.py", line 1126 in entry_point
    ERROR: InvocationError for command /tmp/time-machine/.tox/pypy39/bin/python -s -W error::ResourceWarning -W error::DeprecationWarning -W error::PendingDeprecationWarning -m coverage run -m pytest tests (exited with code -11 (SIGSEGV)) (exited with code -11)
    _______________________________________________________________ summary _______________________________________________________________
    ERROR:   pypy39: commands failed
    

    (I've copied py39.txt to pypy39.txt for the requirements, and added -s to pytest args to avoid pytest from hiding any output)

    There is a suspicious warning at build time:

    gcc -pthread -O0 -g -fPIC -I/tmp/time-machine/.tox/pypy39/include -I/usr/include/pypy3.9 -c src/_time_machine.c -o build/temp.linux-x86_64-pypy39/src/_time_machine.o
    src/_time_machine.c: In function ‘_time_machine_original_now’:
    src/_time_machine.c:78:60: warning: passing argument 2 of ‘state->original_now’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
       78 |     PyObject* result = state->original_now(datetime_class, args, nargs, kwnames);
          |                                                            ^~~~
    src/_time_machine.c:78:60: note: expected ‘PyObject **’ {aka ‘struct _object **’} but argument is of type ‘PyObject * const*’ {aka ‘struct _object * const*’}
    gcc -pthread -shared -Wl,-Bsymbolic-functions -O0 -g build/temp.linux-x86_64-pypy39/src/_time_machine.o -o build/lib.linux-x86_64-pypy39/_time_machine.pypy39-pp73-x86_64-linux-gnu.so
    

    …and indeed coredump seems to confirm that this is where it crashes:

    Program terminated with signal SIGSEGV, Segmentation fault.
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=11, no_tid=no_tid@entry=0) at pthread_kill.c:44
    44	pthread_kill.c: No such file or directory.
    (gdb) up
    #1  0x00007f9bcd78889f in __pthread_kill_internal (signo=11, threadid=<optimized out>) at pthread_kill.c:78
    78	in pthread_kill.c
    (gdb) up
    #2  0x00007f9bcd7382d2 in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
    26	../sysdeps/posix/raise.c: No such file or directory.
    (gdb) up
    #3  <signal handler called>
    (gdb) up
    #4  _time_machine_patch_if_needed (module=0x5589dba18b80, unused=0x0) at src/_time_machine.c:379
    379	    state->original_now = (_PyCFunctionFastWithKeywords) datetime_datetime_now->m_ml->ml_meth;
    
    opened by mgorny 2
  • Add support for dt.timedelta to travel class

    Add support for dt.timedelta to travel class

    Adds support to pass a datetime.timedelta object to travel.

    To avoid potential abuse this feature is blocked when already traveling, since the shift API would provide similar functionality and should be simpler.

    This should open an API to implement #247

    fixes #38

    opened by AgDude 2
  • Interpret naive datetimes as local time

    Interpret naive datetimes as local time

    Description

    Python defaults to interpreting naive datetimes as local time: https://blog.ganssle.io/articles/2022/04/naive-local-datetimes.html

    time-machine currently turns naive datetimes into UTC, except from naive datetiems parsed from strings with datetutil, which it keeps in local times: https://twitter.com/hugovk/status/1513513262649950210

    @pganssle would prefer time-machine to be consistent with Python's behaviour: https://twitter.com/pganssle/status/1513507255253184518

    I'm inclined to agree. It would be good to at least be consistent between datetimes and strings. It would be a breaking change though.

    We might also consider a warning for naive datetimes, as this can allow a test's success to depend on the timezone in which it is run.

    opened by adamchainz 4
Owner
Adam Johnson
🦄 @django technical board member 🇬🇧 @djangolondon co-organizer ✍ AWS/Django/Python Author and Consultant
Adam Johnson
Given some test cases, this program automatically queries the oracle and tests your Cshanty compiler!

The Diviner A complement to The Oracle for compilers class. Given some test cases, this program automatically queries the oracle and tests your compil

Grant Holmes 2 Jan 29, 2022
pytest splinter and selenium integration for anyone interested in browser interaction in tests

Splinter plugin for the pytest runner Install pytest-splinter pip install pytest-splinter Features The plugin provides a set of fixtures to use splin

pytest-dev 238 Nov 14, 2022
User-oriented Web UI browser tests in Python

Selene - User-oriented Web UI browser tests in Python (Selenide port) Main features: User-oriented API for Selenium Webdriver (code like speak common

Iakiv Kramarenko 575 Jan 2, 2023
The pytest framework makes it easy to write small tests, yet scales to support complex functional testing

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries. An example o

pytest-dev 9.6k Jan 2, 2023
Data-Driven Tests for Python Unittest

DDT (Data-Driven Tests) allows you to multiply one test case by running it with different test data, and make it appear as multiple test cases. Instal

null 424 Nov 28, 2022
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

Teemu 963 Dec 28, 2022
:game_die: Pytest plugin to randomly order tests and control random.seed

pytest-randomly Pytest plugin to randomly order tests and control random.seed. Features All of these features are on by default but can be disabled wi

pytest-dev 471 Dec 30, 2022
Selects tests affected by changed files. Continous test runner when used with pytest-watch.

This is a pytest plug-in which automatically selects and re-executes only tests affected by recent changes. How is this possible in dynamic language l

Tibor Arpas 614 Dec 30, 2022
Docker-based integration tests

Docker-based integration tests Description Simple pytest fixtures that help you write integration tests with Docker and docker-compose. Specify all ne

Avast 326 Dec 27, 2022
To automate the generation and validation tests of COSE/CBOR Codes and it's base45/2D Code representations

To automate the generation and validation tests of COSE/CBOR Codes and it's base45/2D Code representations, a lot of data has to be collected to ensure the variance of the tests. This respository was established to collect a lot of different test data and related test cases of different member states in a standardized manner. Each member state can generate a folder in this section.

null 160 Jul 25, 2022
Show surprise when tests are passing

pytest-pikachu pytest-pikachu prints ascii art of Surprised Pikachu when all tests pass. Installation $ pip install pytest-pikachu Usage Pass the --p

Charlie Hornsby 13 Apr 15, 2022
Django-google-optimize is a Django application designed to make running server side Google Optimize A/B tests easy.

Django-google-optimize Django-google-optimize is a Django application designed to make running Google Optimize A/B tests easy. Here is a tutorial on t

Adin Hodovic 39 Oct 25, 2022
Run ISP speed tests and save results

SpeedMon Automatically run periodic internet speed tests and save results to a variety of storage backends. Supported Backends InfluxDB v1 InfluxDB v2

Matthew Carey 9 May 8, 2022
LuluTest is a Python framework for creating automated browser tests.

LuluTest LuluTest is an open source browser automation framework using Python and Selenium. It is relatively lightweight in that it mostly provides wr

Erik Whiting 14 Sep 26, 2022
Statistical tests for the sequential locality of graphs

Statistical tests for the sequential locality of graphs You can assess the statistical significance of the sequential locality of an adjacency matrix

null 2 Nov 23, 2021
Fail tests that take too long to run

GitHub | PyPI | Issues pytest-fail-slow is a pytest plugin for making tests fail that take too long to run. It adds a --fail-slow DURATION command-lin

John T. Wodder II 4 Nov 27, 2022
Automated tests for OKAY websites in Python (Selenium) - user friendly version

Okay Selenium Testy Aplikace určená k testování produkčních webů společnosti OKAY s.r.o. Závislosti K běhu aplikace je potřeba mít v počítači nainstal

Viktor Bem 0 Oct 1, 2022
a wrapper around pytest for executing tests to look for test flakiness and runtime regression

bubblewrap a wrapper around pytest for assessing flakiness and runtime regressions a cs implementations practice project How to Run: First, install de

Anna Nagy 1 Aug 5, 2021
A library to make concurrent selenium tests that automatically download and setup webdrivers

AutoParaSelenium A library to make parallel selenium tests that automatically download and setup webdrivers Usage Installation pip install autoparasel

Ronak Badhe 8 Mar 13, 2022