Source code for fibsem.mocktypes

import matplotlib.pyplot as plt

import fibsem

# Is this an appropriate way to handle things?
# https://holgerkrekel.net/2009/03/03/monkeypatching-in-unit-tests-done-right/
# https://docs.pytest.org/en/latest/monkeypatch.html


[docs]class MockPixelSize: """Pixel size mock object, has attributes x and y. Parameters ---------- x : float, optional. Pixel size in x dimension, in meters. y : float, optional. Pixel size in y dimension, in meters. """ def __init__(self, x=None, y=None): if x is None: self.x = 9.765625e-09 # pixel size in meters else: self.x = x if y is None: self.y = 9.765625e-09 # pixel size in meters else: self.y = y
[docs] def set_pixelsize(self, x, y): self.x = x self.y = y
[docs]class MockAdornedImage: """AdornedImage mock object, with attributes for data and pixel size. Attributes ---------- image_data : numpy array Equivalent to image.data on a real AdornedImage type. pixelsize_x : float, optional. Pixel size in x dimension, in meters. pixelsize_y : float, optional. Pixel size in y dimension, in meters. """ def __init__(self, image, pixelsize_x=None, pixelsize_y=None): self.data = image self.metadata = MockMetadata() if pixelsize_x is None: self.metadata.binary_result.pixel_size.x = 9.765625e-09 # meters else: self.metadata.binary_result.pixel_size.x = pixelsize_x if pixelsize_y is None: self.metadata.binary_result.pixel_size.y = 9.765625e-09 # meters else: self.metadata.binary_result.pixel_size.y = pixelsize_y
[docs] def set_pixelsize(self, x, y): self.metadata.binary_result.pixel_size.x = x self.metadata.binary_result.pixel_size.y = y
[docs] def set_imagedata(self, image): self.data = image
[docs]class MockMetadata: """Mock metadata subclass.""" def __init__(self): self.binary_result = MockBinaryResult()
[docs]class MockBinaryResult: """Mock binary_result subclass.""" def __init__(self): self.pixel_size = MockPixelSize()
[docs]def mock_user_settings(): """Mock user input settings. Returns ------- settings : dict Settings dictionary has the ksys: start_lamella : float Where the lamella starts, as percentage of length from head.' end_lamella : float Where the lamella ends, as percentage of length from head.' roi_width : float Width of ROI milling regions, in meters. roi_overlap : float Overlap of milling rectangles, in meters. ion_beam_overlap : float Overlap of the ion beam itself, as percentage. depth : float Depth of ion beam milling, in meters. current_for_milling : float Ion beam current for milling, in Amperes. current_for_imaging : float Ion beam current for imaging, in Amperes. """ settings = {} settings['start_lamella'] = 0.3 settings['end_lamella'] = 0.5 settings['roi_width'] = 100e-6 settings['roi_overlap'] = 10e-6 settings['ion_beam_overlap'] = 0.98 settings['depth'] = 2e-6 settings['current_for_milling'] = 1e-6 settings['buffer_around_lamlla'] = 10e-6 return settings