sofia_redux.toolkit: Shared Utilities for SOFIA Pipelines¶
The sofia_redux.toolkit
package contains supporting algorithms
and helper functions for SOFIA data reduction pipelines.
Submodules¶
- Convolution (
sofia_redux.toolkit.convolve
) - Fitting (
sofia_redux.toolkit.fitting
) - Image Algorithms (
sofia_redux.toolkit.image
) - Interpolate (
sofia_redux.toolkit.interpolate
) - Resampling (
sofia_redux.toolkit.resampling
) - Splines (
sofia_redux.toolkit.resampling.splines
) - Statistical Algorithms (
sofia_redux.toolkit.stats
) - Utilities (
sofia_redux.toolkit.utilities
)
Reference/API¶
sofia_redux.toolkit.convolve.base Module¶
Classes¶
|
Convolution class allowing error propagation. |
Class Inheritance Diagram¶
digraph inheritance555cb6bce0 { bgcolor=transparent; rankdir=LR; size=""; "ConvolveBase" [URL="../../api/sofia_redux.toolkit.convolve.base.ConvolveBase.html#sofia_redux.toolkit.convolve.base.ConvolveBase",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Convolution class allowing error propagation."]; "Model" -> "ConvolveBase" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "Model" [URL="../../api/sofia_redux.toolkit.utilities.base.Model.html#sofia_redux.toolkit.utilities.base.Model",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base model Class for fitting N-dimensional data"]; }sofia_redux.toolkit.convolve.kernel Module¶
Functions¶
|
Apply a kernel over multiple features |
|
Convolve an N-dimensional array with a user defined kernel or fixed box. |
|
Apply a least-squares (Savitzky-Golay) polynomial filter |
Classes¶
|
Generic convolution with a kernel |
|
Convolution with a box kernel (mean) |
|
Convolve using Savitzky-Golay filter |
Class Inheritance Diagram¶
digraph inheritance7459f88665 { bgcolor=transparent; rankdir=LR; size=""; "BoxConvolve" [URL="../../api/sofia_redux.toolkit.convolve.kernel.BoxConvolve.html#sofia_redux.toolkit.convolve.kernel.BoxConvolve",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Convolution with a box kernel (mean)"]; "KernelConvolve" -> "BoxConvolve" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "ConvolveBase" [URL="../../api/sofia_redux.toolkit.convolve.base.ConvolveBase.html#sofia_redux.toolkit.convolve.base.ConvolveBase",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Convolution class allowing error propagation."]; "Model" -> "ConvolveBase" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "KernelConvolve" [URL="../../api/sofia_redux.toolkit.convolve.kernel.KernelConvolve.html#sofia_redux.toolkit.convolve.kernel.KernelConvolve",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Generic convolution with a kernel"]; "ConvolveBase" -> "KernelConvolve" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "Model" [URL="../../api/sofia_redux.toolkit.utilities.base.Model.html#sofia_redux.toolkit.utilities.base.Model",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base model Class for fitting N-dimensional data"]; "SavgolConvolve" [URL="../../api/sofia_redux.toolkit.convolve.kernel.SavgolConvolve.html#sofia_redux.toolkit.convolve.kernel.SavgolConvolve",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Convolve using Savitzky-Golay filter"]; "ConvolveBase" -> "SavgolConvolve" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; }sofia_redux.toolkit.convolve.filter Module¶
Functions¶
|
Apply Savitzky-Golay filter to an array of arbitrary features |
|
Creates the correct windows for given order and samples |
|
Edge enhancement Sobel filter for n-dimensional images. |
sofia_redux.toolkit.fitting.fitpeaks1d Module¶
Functions¶
|
Simple convenience lookup to get width parameter name for various models. |
|
Creates the object fitting a model to data |
|
A simple wrapper to fit model to the data |
|
Convolve a model with a box (or another model) |
|
Create the |
|
Perform an initial search for peaks in the data |
|
Return a background model with initialized parameters |
|
Refine the initial fit and return a set of models |
|
Fit peaks (and optionally background) to a 1D set of data. |
|
Default data preparation for |
|
Default peak guess function for |
sofia_redux.toolkit.fitting.polynomial Module¶
Functions¶
|
Returns exponents for given polynomial orders in arbitrary dimensions. |
|
Create a system of linear equations to solve n-D polynomials |
|
Create a system of linear equations |
|
Linear equation solution by Gauss-Jordan elimination and matrix inversion |
|
Evalulate polynomial coefficients at x |
|
Evaluate a polynomial in multiple features |
|
Calculate the zeroth order polynomial coefficients and covariance |
|
Fit a polynomial to data samples using linear least-squares. |
|
Fit a polynomial to data samples using Gauss-Jordan elimination. |
|
Solve for polynomial coefficients using non-linear least squares fit |
|
Fits polynomial coefficients to N-dimensional data. |
|
|
|
|
|
|
|
Least squares polynomial fit to a surface |
|
Evaluate 2D polynomial coefficients |
|
Interpolate 2D data using polynomial regression (global) |
Classes¶
|
Fits and evaluates polynomials in N-dimensions. |
Class Inheritance Diagram¶
digraph inheritance812590e9a1 { bgcolor=transparent; rankdir=LR; size=""; "Model" [URL="../../api/sofia_redux.toolkit.utilities.base.Model.html#sofia_redux.toolkit.utilities.base.Model",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base model Class for fitting N-dimensional data"]; "Polyfit" [URL="../../api/sofia_redux.toolkit.fitting.polynomial.Polyfit.html#sofia_redux.toolkit.fitting.polynomial.Polyfit",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Fits and evaluates polynomials in N-dimensions."]; "Model" -> "Polyfit" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; }sofia_redux.toolkit.image.adjust Module¶
Functions¶
|
Shift an image by the specified amount. |
|
Rotate an image. |
|
Rebins an array to new shape |
|
Shifts an image by x and y offsets |
|
Replicates IDL rotate function |
|
Un-rotates an image using IDL style rotation types |
|
Return the pixel offset between an image and a reference |
|
Upsampled DFT by matrix multiplication. |
sofia_redux.toolkit.image.coadd Module¶
Functions¶
|
Coadd total intensity or spectral images. |
sofia_redux.toolkit.image.combine Module¶
Functions¶
|
Combine input image arrays. |
sofia_redux.toolkit.image.fill Module¶
Functions¶
|
|
|
|
|
Interpolates over image using a mask. |
|
Fills in NaN values in an image |
|
Clip a polygon to a square unit pixel |
|
Finds all pixels at least partially inside a specified polygon |
|
Uses the shoelace method to calculate area of a polygon |
|
Get pixel weights - depreciated by polyfillaa |
sofia_redux.toolkit.image.resize Module¶
Functions¶
|
Replacement for |
sofia_redux.toolkit.image.smooth Module¶
Functions¶
|
Quick and simple cubic polynomial fit to surface - no checks |
|
Returns the coefficients necessary for bicubic interpolation. |
|
|
|
Fit a plane to distribution of points. |
|
Fits a smooth surface to data using J. |
sofia_redux.toolkit.image.utilities Module¶
Functions¶
|
Convert from |
|
Allow translation of modes for scipy versions >= 1.6.0 |
|
Clip the array to the range of original values. |
|
A drop in replacement for |
sofia_redux.toolkit.image.warp Module¶
Functions¶
|
Warp data using transformation defined by two sets of coordinates |
|
Performs polynomial spatial warping |
|
Warp an image by mapping 2 coordinate sets with a polynomial transform. |
|
Check if a transform is homographic. |
|
Apply a metric transform to the supplied coordinates. |
|
Apply coefficients to polynomial terms. |
|
Estimate the polynomial transform for (x, y) coordinates. |
|
Apply the warping between two sets of coordinates to another. |
|
Warp the indices of an array with a given shape using a polynomial. |
|
Warp an n-dimensional image according to a given coordinate transform. |
Classes¶
|
Initialize a polynomial transform. |
Class Inheritance Diagram¶
digraph inheritance2c28666683 { bgcolor=transparent; rankdir=LR; size=""; "ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Helper class that provides a standard way to create an ABC using"]; "PolynomialTransform" [URL="../../api/sofia_redux.toolkit.image.warp.PolynomialTransform.html#sofia_redux.toolkit.image.warp.PolynomialTransform",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "ABC" -> "PolynomialTransform" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; }sofia_redux.toolkit.interpolate.interpolate Module¶
Functions¶
|
Shift an equally spaced array of data values by an offset |
|
Interpolate values containing NaNs |
|
Perform cubic spline (tensioned) interpolation |
|
Perform a sinc interpolation on a data set |
|
Perform linear interpolation at a single point. |
|
Perform linear interpolation at a single point with error propagation. |
|
Perform linear interpolation of errors |
|
Propagate errors using Delaunay triangulation in N-dimensions |
|
Propagate errors using linear interpolation in N-dimensions |
|
Find the effective index of a function value in an ordered vector with NaN handling. |
|
Finds the effective index of a function value in an ordered array. |
Classes¶
|
Fast interpolation on a regular grid |
Class Inheritance Diagram¶
digraph inheritanceb8ee21f950 { bgcolor=transparent; rankdir=LR; size=""; "Interpolate" [URL="../../api/sofia_redux.toolkit.interpolate.interpolate.Interpolate.html#sofia_redux.toolkit.interpolate.interpolate.Interpolate",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Fast interpolation on a regular grid"]; }sofia_redux.toolkit.resampling Package¶
Functions¶
|
Set certain arrays to a fixed size based on a mask array. |
|
Return the sum of an array. |
Returns distance weights based on offsets and scaled adaptive weighting. |
|
Returns distance weights based on offsets and shaped adaptive weighting. |
|
|
Returns a distance weighting based on coordinate offsets. |
Returns distance weights based on coordinate offsets and matrix operation. |
|
|
Calculate the final weighting factor based on errors and other weights. |
|
Defines a hyperrectangle edge around a coordinate distribution. |
|
Defines an edge based on statistical deviation from a sample distribution. |
|
Defines an ellipsoid edge around a coordinate distribution. |
|
Defines an edge based on the range of coordinates in each dimension. |
|
Determine whether a reference position is within a distribution "edge". |
|
Checks the sample distribution is suitable for a polynomial fit order. |
|
Checks maximum order for sample coordinates bounding a reference. |
|
Checks maximum order based only on the number of samples. |
|
Checks maximum order based on unique samples, irrespective of reference. |
|
Uses |
|
Converts a Python iterable to a Numba list for use in jitted functions. |
|
Calculate the covariance of a distribution. |
|
Returns the mean coordinate of a distribution. |
|
Calculates the inverse covariance matrix inverse of the fit coefficients. |
|
Return the weighted mean-square-cross-product (mscp) of sample derivatives. |
|
Return variance at each coordinate based on coordinate distribution. |
|
Calculates covariance matrix inverse of fit coefficients from mean error. |
|
Calculates the derivative of a polynomial at a single point. |
|
Calculates the derivative of a polynomial at multiple points. |
|
Fast 1-D integration using Trapezium method. |
|
Returns the dot product of phi and coefficients. |
|
Calculates variance given the polynomial terms of a coordinate. |
|
Calculates the residual of a polynomial fit to data. |
|
Evaluate a special case of the logistic function where f(x0) = 0.5. |
|
Evaluate the generalized logistic function. |
|
Derive polynomial terms for a coordinate set given polynomial exponents. |
|
Return values of a multivariate Gaussian in K-dimensional coordinates. |
|
Fill output arrays with set values on fit failure. |
|
Variance at reference coordinate derived from distribution uncertainty. |
|
Creates a mapping from polynomial exponents to derivatives. |
|
Define a set of polynomial exponents. |
|
Derive polynomial terms given coordinates and polynomial exponents. |
|
Returns the relative density of samples compared to a uniform distribution. |
|
ResamplePolynomial data using local polynomial fitting. |
|
ResamplePolynomial data using local polynomial fitting. |
|
Apply scaling factors and offsets to N-dimensional data. |
|
Applies the function |
|
Applies the function |
|
Applies the function |
|
Applies the function |
|
Wrapper for |
|
Scales a Gaussian weighting kernel based on a prior fit. |
|
Wrapper for |
|
Shape and scale the weighting kernel based on a prior fit. |
|
Evaluate a scaled and shifted logistic function. |
|
Derive polynomial terms for a single coordinate given polynomial exponents. |
|
Convenience function returning matrices suitable for linear algebra. |
|
Find least squares solution of Ax=B and rank of A. |
|
Solve for a fit at a single coordinate. |
|
Solve all fits within one intersection block. |
|
Inverse covariance matrices on fit coefficients from errors and residuals. |
|
Return the weighted mean of data, variance, and reduced chi-squared. |
|
Derive a polynomial fit from samples, then calculate fit at single point. |
|
Return the reduced chi-squared given residuals and sample errors. |
|
Return the reduced chi-squared given residuals and constant variance. |
|
Calculate the sum-of-squares-and-cross-products of a matrix. |
|
A sigmoid function used by the "shaped" adaptive resampling algorithm. |
|
Updates a mask, setting False values where weights are zero or non-finite. |
|
Determine the variance given offsets from the expected value. |
|
Calculate variance of a fit from the residuals of the fit to data. |
|
Calculate the weighted mean of a data set. |
|
Calculated mean weighted variance. |
|
Utility function to calculate the biased weighted variance. |
Classes¶
|
Define and initialize a resampling grid. |
|
Create a tree structure for use with the resampling algorithm. |
alias of |
|
|
Class to resample data using kernel convolution. |
|
Class to resample data using local polynomial fits. |
Class Inheritance Diagram¶
digraph inheritance5eb099603a { bgcolor=transparent; rankdir=LR; size=""; "BaseGrid" [URL="../../api/sofia_redux.toolkit.resampling.BaseGrid.html#sofia_redux.toolkit.resampling.BaseGrid",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "BaseTree" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled"]; "PolynomialTree" [URL="../../api/sofia_redux.toolkit.resampling.PolynomialTree.html#sofia_redux.toolkit.resampling.PolynomialTree",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "BaseTree" -> "PolynomialTree" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "ResampleBase" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled"]; "ResampleKernel" [URL="../../api/sofia_redux.toolkit.resampling.ResampleKernel.html#sofia_redux.toolkit.resampling.ResampleKernel",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "ResampleBase" -> "ResampleKernel" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; "ResamplePolynomial" [URL="../../api/sofia_redux.toolkit.resampling.ResamplePolynomial.html#sofia_redux.toolkit.resampling.ResamplePolynomial",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "ResampleBase" -> "ResamplePolynomial" [arrowsize=1.2,arrowtail=empty,dir=back,style="setlinewidth(0.5)"]; }sofia_redux.toolkit.splines.spline Module¶
Classes¶
|
Initialize a Spline object. |
Class Inheritance Diagram¶
digraph inheritancec6547c4ef9 { bgcolor=transparent; rankdir=LR; size=""; "Spline" [URL="../../api/sofia_redux.toolkit.splines.spline.Spline.html#sofia_redux.toolkit.splines.spline.Spline",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; }sofia_redux.toolkit.splines.spline_utils Module¶
Functions¶
|
Find the knot indices for an array of coordinates. |
|
Find the knot index for a single coordinate. |
|
Calculate the minimum possible bandwidth given knots and spline degree. |
|
Return index slices for Numba flattened arrays. |
|
Given a list of indices, create an ordering structure for fast access. |
|
Check all input arrays. |
|
Calculate the parameters of a Givens transformation. |
|
Apply the Givens transformation to a value. |
|
Build the spline observation matrices. |
|
Use back-substitution to solve a reduced row-echelon form matrix. |
|
Solve a rank-deficient row-echelon reduced form matrix. |
|
Solve a row-echelon reduced linear system of equations Ax=B. |
|
Calculate the spline fit at each knot location. |
|
Add a knot to the spline fit. |
|
Evaluate b-splines for given knots at a coordinate. |
|
Smooth the current solution to a specified level. |
|
Calculates the discontinuity jumps. |
|
Determines p where (u + p + v)/(p + w) = 0. |
|
Evaluate fitted value given a spline and coefficients. |
|
Evaluate a given spline at multiple coordinates. |
|
Return a fitted value at the given coordinate. |
sofia_redux.toolkit.stats.stats Module¶
Functions¶
|
Determines the outliers in a distribution of data |
|
(Robustly) averages arrays along arbitrary axes. |
|
Combines a data set using median |
|
Computes statistics on a data set avoiding deviant points if requested |
|
Computes a mask derived from data Median Absolute Deviation (MAD). |
sofia_redux.toolkit.utilities.base Module¶
Classes¶
|
Base model Class for fitting N-dimensional data |
Class Inheritance Diagram¶
digraph inheritanced18b721993 { bgcolor=transparent; rankdir=LR; size=""; "Model" [URL="../../api/sofia_redux.toolkit.utilities.base.Model.html#sofia_redux.toolkit.utilities.base.Model",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,margin=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base model Class for fitting N-dimensional data"]; }sofia_redux.toolkit.utilities.fits Module¶
Functions¶
|
Insert or replace a keyword and value in the header |
|
Add HISTORY message to a FITS header before the pipeline. |
|
Make a function to add HISTORY messages to a header, prefixed with a string. |
|
Retrieve the data and header from a FITS file |
|
Returns the header of a FITS file |
|
Returns the data from a FITS file |
|
Convert a FITS header to an array of strings |
|
Convert an array of strings to a FITS header |
|
Returns the HDUList from a FITS file |
|
Write a HDULists to disk. |
|
Get a key value from a header. |
|
Context manager to temporarily set the log level. |
|
Order headers based on contents. |
|
Merge input headers. |
sofia_redux.toolkit.utilities.func Module¶
Functions¶
|
Check for 'truthy' values. |
|
Check for valid numbers. |
|
Returns list sorted in a human friendly manner |
|
Check if a file exists, and optionally if it has the correct permissions. |
|
Convert a header datestring to seconds |
|
Convert a string to an int or float. |
|
Returns a slice of an array in arbitrary dimension. |
|
Sets a value to a valid number type |
|
Gaussian model for curve_fit |
|
Broadcast an array to the desired shape. |
|
Recursively update a dictionary |
|
|
|
|
|
Taylor expansion generator for Polynomial exponents |
|
Convert a number of bytes to a string with correct suffix |
|
Remove any samples containing NaNs from sample points |
|
Return a byte array the same size as the input array. |
|
Generate a 2-D Julia fractal image |
|
Derive a mask to trim NaNs from an array |
|
Emulates the behaviour of np.nansum for NumPy versions <= 1.9.0. |
sofia_redux.toolkit.utilities.multiprocessing Module¶
Functions¶
|
Returns the maximum number of CPU cores available |
|
Return the actual number of cores to use for a given number of jobs. |
|
Return a valid number of jobs in the range 1 <= jobs <= max_cores. |
|
Process a series of tasks in serial, or in parallel using joblib. |
|
Pickle a object and save to the given filename. |
|
Unpickle a string argument if it is a file, and return the result. |
|
Pickle a list of objects to a temporary directory. |
|
Restore pickle files to objects in-place. |
Return whether the process is running in the main thread. |
|
|
Context manager to temporarily log messages for unique processes/threads |
|
Context manager to output log messages during multiprocessing. |
|
Remove all temporary logging files/directories and handle log records. |
|
Return the results of the function in multitask and save log records. |
|
Store the log records in a pickle file rather than emitting. |
|
Wrap a function for use with |
Classes¶
A log handler for multitask. |