HDF5_logger: Created logging suite for writing a NumPy array (structured or not) to an HDF5 file. Using an instance of such a logger (EmptyArrayDebugLogger, HDF5ArrayDebugLogger) does not require knowledge about the logging except than each output must have a unique entry name and the array must be non-empty.
HDF5_logger: As the contents of HDF5_logger have moved from advanced_debugging, that module must now be imported. Further, HDF5_serializers can be imported into the global namespace, as well.
advanced_image_processing: Changed region_properties to ensure that the properties list argument will include the Label field at the beginning of the structured array only and that no properties will repeat. The rest will be sorted.
batch_learner: Fixed debugging to use callbacks with HDF5_logger object instances.
advanced_image_processing: Added logging of intermediate arrays using HDF5_logger to implement this. Debug callbacks passed throughout to enable easy logging. Uses vigra for local maxima (deals with plateaus properly and drops edges) via generate_local_maxima_vigra. Similarly packaged the old scikit image function (it messes up plateaus). Added extended_region_local_maxima_properties, which builds on region_properties by providing all the local maxima in the structured array, which means that entries are no longer unique by label, but are unique by local maxima. Also, extended_region_local_maxima_properties returns a structured array with different label names than used before. All relevant properties for missing labels are stored in missing_labels.hdf5. Refactored and renamed LabelImageCentroidProps to ExtendedRegionProps. Now, can be used to do local maxima removal for the watershed results as well. This is currently being done. This also helps further refactor wavelet_denoising. Simplified merge_neuron_sets and fixed some errors in it. Now, merge_neuron_sets uses NumPy arrays to the fullest extent to determine distances and the like. Added a function inside of generate_neurons (array_debug_logger_enumerator) to ensure that debug information is kept per basis image.
HDF5_logger: Removed useless print statement.
advanced_numpy: Doctests for renumber_label_image were updated to reflect its new form. Some new comments and notes added to the docstring.
advanced_numpy: Added the function normalized_dot_product to aid in refactoring and testing merge_neuron_sets.
advanced_numpy: Edited the docstring of normalized_dot_product to have a better description.
advanced_numpy: Added the function dot_product, which behaves in the same fashion as the function normalized_dot_product, but does not normalize the vectors. Includes docstring and doctests that all passed.
advanced_image_processing: Changed functions used for comparisons between neurons. Removed old todo and reworded/removed old comments.
advanced_numpy: Tweaked docstring of normalized_dot_product to specify L_2 norm instead of just norm.
advanced_numpy: Renamed normalized_dot_product to dot_product_L2_normalized to be more clear and accurate.
advanced_numpy: Added the function norm to handle find the norm on a matrix (array of vectors) or a single vector.
advanced_numpy: Added the function dot_product_normalized. This generalize on dot_product_L2_normalized and is useful when addressing other norms. A slight variant of this will be needed in the module advanced_image_processing.
advanced_numpy: Added the function dot_product_partially_normalized, which will be used in the module advanced_image_processing to deal with some of the comparisons between neurons.
advanced_numpy: Made sure that the type of norm defaults to L_2 if not specified.
advanced_numpy: Fixed a bug in the function dot_product_partially_normalized where broadcasting was not happening as expected. Also, tweaked some doctests that failed silently. Added doctests to catch this case.
advanced_image_processing: Change the function merge_neuron_sets so that it uses distances between neurons and masks calculated by separate tested functions as a part of further testing and refactoring.
HDF5_logger: Made sure all overwrite options were False by default. Also, added a few lines to make sure a group is deleted whether or not debugging occurs. Lastly, made sure that a group is used whether or not it is overwritten as long as it exists. If it doesn't exists, the group is created and used.
batch_learner: Changed call to HDF5_logger.generate_HDF5_array_debug_logger force overwrite_group.
advanced_image_processing: Changed array_debug_logger_enumerator to create a new group to place all the intermediate results from processing each dictionary image.

This commit marks the successful completion of a few outstanding items. Though the fixes occurred in earlier commits, other changes surrounding them did not make them fully stable or nicely testable. Except for the fact that vigranumpy cannot get local maxima on edges, which we don't want anyways, we have found the missing local maxima on plateaus meaning #15 is fixed. Also, after fixing the distance measurement and tweaking parameters, we have found the missing neurons. The distance measurements have been separated into nice doctested functions that are now used, which aids in further refactoring and building tests for the code. In short, this means #14 is fixed. Testing and refactoring are not complete, but good progress has been made in this direction. In particular, more work has occurred in addressing any lingering concerns regarding #2. In short, many challenging issues have been resolved. Now, focus will be placed on further testing and integration concerns.