cellprofiler-core-nightly 5.0.0.dev65__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cellprofiler_core/__init__.py +1 -0
- cellprofiler_core/__main__.py +55 -0
- cellprofiler_core/_version.py +16 -0
- cellprofiler_core/analysis/__init__.py +32 -0
- cellprofiler_core/analysis/_analysis.py +109 -0
- cellprofiler_core/analysis/_runner.py +738 -0
- cellprofiler_core/analysis/event/__init__.py +5 -0
- cellprofiler_core/analysis/event/_finished.py +4 -0
- cellprofiler_core/analysis/event/_paused.py +2 -0
- cellprofiler_core/analysis/event/_progress.py +3 -0
- cellprofiler_core/analysis/event/_resumed.py +2 -0
- cellprofiler_core/analysis/event/_started.py +2 -0
- cellprofiler_core/analysis/reply/__init__.py +12 -0
- cellprofiler_core/analysis/reply/_ack.py +6 -0
- cellprofiler_core/analysis/reply/_debug_cancel.py +7 -0
- cellprofiler_core/analysis/reply/_dictionary_request.py +5 -0
- cellprofiler_core/analysis/reply/_exception_please_debug.py +8 -0
- cellprofiler_core/analysis/reply/_image_set_success.py +6 -0
- cellprofiler_core/analysis/reply/_image_set_success_with_dictionary.py +8 -0
- cellprofiler_core/analysis/reply/_interaction.py +5 -0
- cellprofiler_core/analysis/reply/_no_work.py +5 -0
- cellprofiler_core/analysis/reply/_omero_login.py +6 -0
- cellprofiler_core/analysis/reply/_server_exited.py +5 -0
- cellprofiler_core/analysis/reply/_shared_dictionary.py +9 -0
- cellprofiler_core/analysis/reply/_work.py +5 -0
- cellprofiler_core/analysis/request/__init__.py +15 -0
- cellprofiler_core/analysis/request/_analysis_cancel.py +5 -0
- cellprofiler_core/analysis/request/_debug_complete.py +5 -0
- cellprofiler_core/analysis/request/_debug_waiting.py +8 -0
- cellprofiler_core/analysis/request/_display.py +5 -0
- cellprofiler_core/analysis/request/_display_post_group.py +16 -0
- cellprofiler_core/analysis/request/_display_post_run.py +8 -0
- cellprofiler_core/analysis/request/_exception_report.py +29 -0
- cellprofiler_core/analysis/request/_initial_measurements.py +5 -0
- cellprofiler_core/analysis/request/_interaction.py +5 -0
- cellprofiler_core/analysis/request/_measurements_report.py +10 -0
- cellprofiler_core/analysis/request/_omero_login.py +5 -0
- cellprofiler_core/analysis/request/_pipeline_preferences.py +5 -0
- cellprofiler_core/analysis/request/_shared_dictionary.py +6 -0
- cellprofiler_core/analysis/request/_work.py +5 -0
- cellprofiler_core/bioformats/__init__.py +1 -0
- cellprofiler_core/bioformats/formatreader.py +19 -0
- cellprofiler_core/bioformats/formatwriter.py +104 -0
- cellprofiler_core/bioformats/omexml.py +3 -0
- cellprofiler_core/commands/__init__.py +0 -0
- cellprofiler_core/commands/_pipeline_command.py +40 -0
- cellprofiler_core/commands/_worker_command.py +15 -0
- cellprofiler_core/constants/__init__.py +0 -0
- cellprofiler_core/constants/image.py +173 -0
- cellprofiler_core/constants/measurement.py +116 -0
- cellprofiler_core/constants/module/__init__.py +225 -0
- cellprofiler_core/constants/module/_identify.py +28 -0
- cellprofiler_core/constants/modules/__init__.py +36 -0
- cellprofiler_core/constants/modules/images.py +7 -0
- cellprofiler_core/constants/modules/load_data.py +34 -0
- cellprofiler_core/constants/modules/metadata.py +31 -0
- cellprofiler_core/constants/modules/namesandtypes.py +197 -0
- cellprofiler_core/constants/object.py +1 -0
- cellprofiler_core/constants/pipeline.py +139 -0
- cellprofiler_core/constants/preferences.py +0 -0
- cellprofiler_core/constants/reader/__init__.py +17 -0
- cellprofiler_core/constants/setting.py +84 -0
- cellprofiler_core/constants/worker.py +13 -0
- cellprofiler_core/constants/workspace.py +4 -0
- cellprofiler_core/image/__init__.py +17 -0
- cellprofiler_core/image/_grayscale_image.py +23 -0
- cellprofiler_core/image/_image.py +396 -0
- cellprofiler_core/image/_image_set.py +148 -0
- cellprofiler_core/image/_image_set_list.py +144 -0
- cellprofiler_core/image/_rgb_image.py +17 -0
- cellprofiler_core/image/abstract_image/__init__.py +12 -0
- cellprofiler_core/image/abstract_image/_abstract_image.py +32 -0
- cellprofiler_core/image/abstract_image/_callback_image.py +21 -0
- cellprofiler_core/image/abstract_image/_vanilla_image.py +22 -0
- cellprofiler_core/image/abstract_image/file/__init__.py +9 -0
- cellprofiler_core/image/abstract_image/file/_file_image.py +425 -0
- cellprofiler_core/image/abstract_image/file/_flex_frame_image.py +11 -0
- cellprofiler_core/image/abstract_image/file/_movie_frame_image.py +11 -0
- cellprofiler_core/image/abstract_image/file/_stk_frame_image.py +17 -0
- cellprofiler_core/image/abstract_image/file/url/__init__.py +5 -0
- cellprofiler_core/image/abstract_image/file/url/_color_image.py +31 -0
- cellprofiler_core/image/abstract_image/file/url/_mask_image.py +26 -0
- cellprofiler_core/image/abstract_image/file/url/_monochrome_image.py +42 -0
- cellprofiler_core/image/abstract_image/file/url/_objects_image.py +100 -0
- cellprofiler_core/image/abstract_image/file/url/_url_image.py +37 -0
- cellprofiler_core/measurement/__init__.py +3 -0
- cellprofiler_core/measurement/_measurements.py +1763 -0
- cellprofiler_core/measurement/_metadata_group.py +21 -0
- cellprofiler_core/measurement/_relationship_key.py +6 -0
- cellprofiler_core/module/__init__.py +4 -0
- cellprofiler_core/module/_identify.py +71 -0
- cellprofiler_core/module/_image_processing.py +82 -0
- cellprofiler_core/module/_module.py +978 -0
- cellprofiler_core/module/_plugin_importer.py +37 -0
- cellprofiler_core/module/image_segmentation/__init__.py +2 -0
- cellprofiler_core/module/image_segmentation/_image_segmentation.py +184 -0
- cellprofiler_core/module/image_segmentation/_object_processing.py +156 -0
- cellprofiler_core/modules/__init__.py +11 -0
- cellprofiler_core/modules/align.py +833 -0
- cellprofiler_core/modules/groups.py +717 -0
- cellprofiler_core/modules/images.py +384 -0
- cellprofiler_core/modules/inject_objects.py +44 -0
- cellprofiler_core/modules/injectimage.py +120 -0
- cellprofiler_core/modules/loaddata.py +1493 -0
- cellprofiler_core/modules/measurementfixture.py +22 -0
- cellprofiler_core/modules/metadata.py +1325 -0
- cellprofiler_core/modules/namesandtypes.py +2079 -0
- cellprofiler_core/modules/setting_validation.py +32 -0
- cellprofiler_core/object/__init__.py +3 -0
- cellprofiler_core/object/_object_set.py +88 -0
- cellprofiler_core/object/_objects.py +376 -0
- cellprofiler_core/object/_segmentation.py +161 -0
- cellprofiler_core/pipeline/__init__.py +35 -0
- cellprofiler_core/pipeline/_image_file.py +240 -0
- cellprofiler_core/pipeline/_image_plane.py +175 -0
- cellprofiler_core/pipeline/_image_set_channel_descriptor.py +23 -0
- cellprofiler_core/pipeline/_listener.py +22 -0
- cellprofiler_core/pipeline/_pipeline.py +2740 -0
- cellprofiler_core/pipeline/dependency/__init__.py +4 -0
- cellprofiler_core/pipeline/dependency/_dependency.py +53 -0
- cellprofiler_core/pipeline/dependency/_image_dependency.py +26 -0
- cellprofiler_core/pipeline/dependency/_measurement_dependency.py +50 -0
- cellprofiler_core/pipeline/dependency/_object_dependency.py +26 -0
- cellprofiler_core/pipeline/event/__init__.py +20 -0
- cellprofiler_core/pipeline/event/_end_run.py +8 -0
- cellprofiler_core/pipeline/event/_event.py +27 -0
- cellprofiler_core/pipeline/event/_file_walk_ended.py +6 -0
- cellprofiler_core/pipeline/event/_file_walk_started.py +6 -0
- cellprofiler_core/pipeline/event/_ipd_load_exception.py +17 -0
- cellprofiler_core/pipeline/event/_load_exception.py +17 -0
- cellprofiler_core/pipeline/event/_module_added.py +17 -0
- cellprofiler_core/pipeline/event/_module_disabled.py +19 -0
- cellprofiler_core/pipeline/event/_module_edited.py +17 -0
- cellprofiler_core/pipeline/event/_module_enabled.py +19 -0
- cellprofiler_core/pipeline/event/_module_moved.py +18 -0
- cellprofiler_core/pipeline/event/_module_removed.py +17 -0
- cellprofiler_core/pipeline/event/_module_show_window.py +15 -0
- cellprofiler_core/pipeline/event/_pipeline_cleared.py +15 -0
- cellprofiler_core/pipeline/event/_pipeline_loaded.py +15 -0
- cellprofiler_core/pipeline/event/_prepare_run_error.py +15 -0
- cellprofiler_core/pipeline/event/_urls_added.py +10 -0
- cellprofiler_core/pipeline/event/_urls_cleared.py +9 -0
- cellprofiler_core/pipeline/event/_urls_removed.py +10 -0
- cellprofiler_core/pipeline/event/run_exception/__init__.py +3 -0
- cellprofiler_core/pipeline/event/run_exception/_post_run_exception.py +8 -0
- cellprofiler_core/pipeline/event/run_exception/_prepare_run_exception.py +8 -0
- cellprofiler_core/pipeline/event/run_exception/_run_exception.py +21 -0
- cellprofiler_core/pipeline/io/__init__.py +18 -0
- cellprofiler_core/pipeline/io/_v5.py +63 -0
- cellprofiler_core/pipeline/io/_v6.py +70 -0
- cellprofiler_core/preferences/__init__.py +2111 -0
- cellprofiler_core/preferences/_headless_configuration.py +45 -0
- cellprofiler_core/reader/__init__.py +131 -0
- cellprofiler_core/reader/_reader.py +224 -0
- cellprofiler_core/readers/__init__.py +0 -0
- cellprofiler_core/readers/bioformats_reader.py +321 -0
- cellprofiler_core/readers/gcs_reader.py +112 -0
- cellprofiler_core/readers/imageio_reader.py +187 -0
- cellprofiler_core/readers/ngff_reader.py +347 -0
- cellprofiler_core/setting/__init__.py +23 -0
- cellprofiler_core/setting/_binary.py +43 -0
- cellprofiler_core/setting/_binary_matrix.py +46 -0
- cellprofiler_core/setting/_color.py +182 -0
- cellprofiler_core/setting/_coordinates.py +61 -0
- cellprofiler_core/setting/_data_types.py +52 -0
- cellprofiler_core/setting/_delete_setting_event.py +3 -0
- cellprofiler_core/setting/_divider.py +11 -0
- cellprofiler_core/setting/_do_things.py +58 -0
- cellprofiler_core/setting/_figure_subscriber.py +18 -0
- cellprofiler_core/setting/_file_collection_display.py +346 -0
- cellprofiler_core/setting/_hidden_count.py +39 -0
- cellprofiler_core/setting/_html_text.py +21 -0
- cellprofiler_core/setting/_image_plane.py +129 -0
- cellprofiler_core/setting/_joiner.py +98 -0
- cellprofiler_core/setting/_measurement.py +335 -0
- cellprofiler_core/setting/_path_list_display.py +14 -0
- cellprofiler_core/setting/_regexp_text.py +37 -0
- cellprofiler_core/setting/_setting.py +172 -0
- cellprofiler_core/setting/_settings_group.py +31 -0
- cellprofiler_core/setting/_structuring_element.py +83 -0
- cellprofiler_core/setting/_table.py +168 -0
- cellprofiler_core/setting/_tree_choice.py +102 -0
- cellprofiler_core/setting/_validation_error.py +20 -0
- cellprofiler_core/setting/change_setting_event/__init__.py +3 -0
- cellprofiler_core/setting/change_setting_event/_after_change_setting_event.py +10 -0
- cellprofiler_core/setting/change_setting_event/_before_change_setting_event.py +24 -0
- cellprofiler_core/setting/change_setting_event/_change_setting_event.py +19 -0
- cellprofiler_core/setting/choice/__init__.py +3 -0
- cellprofiler_core/setting/choice/_choice.py +73 -0
- cellprofiler_core/setting/choice/_colormap.py +13 -0
- cellprofiler_core/setting/choice/_custom_choice.py +23 -0
- cellprofiler_core/setting/do_something/__init__.py +5 -0
- cellprofiler_core/setting/do_something/_do_something.py +27 -0
- cellprofiler_core/setting/do_something/_image_set_display.py +12 -0
- cellprofiler_core/setting/do_something/_path_list_extract_button.py +14 -0
- cellprofiler_core/setting/do_something/_path_list_refresh_button.py +14 -0
- cellprofiler_core/setting/do_something/_remove_setting_button.py +10 -0
- cellprofiler_core/setting/filter/__init__.py +11 -0
- cellprofiler_core/setting/filter/_compound_filter_predicate.py +7 -0
- cellprofiler_core/setting/filter/_directory_predicate.py +59 -0
- cellprofiler_core/setting/filter/_does_not_predicate.py +17 -0
- cellprofiler_core/setting/filter/_does_predicate.py +17 -0
- cellprofiler_core/setting/filter/_extension_predicate.py +102 -0
- cellprofiler_core/setting/filter/_file_predicate.py +65 -0
- cellprofiler_core/setting/filter/_filter.py +285 -0
- cellprofiler_core/setting/filter/_filter_predicate.py +41 -0
- cellprofiler_core/setting/filter/_image_predicate.py +99 -0
- cellprofiler_core/setting/filter/_metadata_predicate.py +85 -0
- cellprofiler_core/setting/filter/_regexp_filter_predicate.py +21 -0
- cellprofiler_core/setting/multichoice/__init__.py +6 -0
- cellprofiler_core/setting/multichoice/_image_name_subscriber_multichoice.py +13 -0
- cellprofiler_core/setting/multichoice/_measurement_multichoice.py +72 -0
- cellprofiler_core/setting/multichoice/_multichoice.py +82 -0
- cellprofiler_core/setting/multichoice/_object_subscriber_multichoice.py +13 -0
- cellprofiler_core/setting/multichoice/_subdirectory_filter.py +48 -0
- cellprofiler_core/setting/multichoice/_subscriber_multichoice.py +50 -0
- cellprofiler_core/setting/range/__init__.py +4 -0
- cellprofiler_core/setting/range/_float_range.py +25 -0
- cellprofiler_core/setting/range/_range.py +154 -0
- cellprofiler_core/setting/range/integer_range/__init__.py +2 -0
- cellprofiler_core/setting/range/integer_range/_integer_or_unbounded_range.py +146 -0
- cellprofiler_core/setting/range/integer_range/_integer_range.py +25 -0
- cellprofiler_core/setting/subscriber/__init__.py +10 -0
- cellprofiler_core/setting/subscriber/_grid_subscriber.py +20 -0
- cellprofiler_core/setting/subscriber/_label_subscriber.py +20 -0
- cellprofiler_core/setting/subscriber/_subscriber.py +73 -0
- cellprofiler_core/setting/subscriber/image_subscriber/__init__.py +4 -0
- cellprofiler_core/setting/subscriber/image_subscriber/_crop_image_subscriber.py +22 -0
- cellprofiler_core/setting/subscriber/image_subscriber/_file_image_subscriber.py +22 -0
- cellprofiler_core/setting/subscriber/image_subscriber/_image_subscriber.py +19 -0
- cellprofiler_core/setting/subscriber/image_subscriber/_outline_image_subscriber.py +23 -0
- cellprofiler_core/setting/subscriber/list_subscriber/__init__.py +3 -0
- cellprofiler_core/setting/subscriber/list_subscriber/_image_list_subscriber.py +20 -0
- cellprofiler_core/setting/subscriber/list_subscriber/_label_list_subscriber.py +20 -0
- cellprofiler_core/setting/subscriber/list_subscriber/_list_subscriber.py +64 -0
- cellprofiler_core/setting/text/__init__.py +21 -0
- cellprofiler_core/setting/text/_directory.py +229 -0
- cellprofiler_core/setting/text/_filename.py +39 -0
- cellprofiler_core/setting/text/_text.py +13 -0
- cellprofiler_core/setting/text/alphanumeric/__init__.py +10 -0
- cellprofiler_core/setting/text/alphanumeric/_alphanumeric.py +56 -0
- cellprofiler_core/setting/text/alphanumeric/_character.py +17 -0
- cellprofiler_core/setting/text/alphanumeric/name/__init__.py +8 -0
- cellprofiler_core/setting/text/alphanumeric/name/_grid_name.py +10 -0
- cellprofiler_core/setting/text/alphanumeric/name/_label_name.py +21 -0
- cellprofiler_core/setting/text/alphanumeric/name/_name.py +37 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/__init__.py +5 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/_crop_image_name.py +17 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/_external_image_name.py +17 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/_file_image_name.py +17 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/_image_name.py +10 -0
- cellprofiler_core/setting/text/alphanumeric/name/image_name/_outline_image_name.py +10 -0
- cellprofiler_core/setting/text/number/__init__.py +4 -0
- cellprofiler_core/setting/text/number/_float.py +16 -0
- cellprofiler_core/setting/text/number/_number.py +103 -0
- cellprofiler_core/setting/text/number/integer/__init__.py +2 -0
- cellprofiler_core/setting/text/number/integer/_integer.py +19 -0
- cellprofiler_core/setting/text/number/integer/_odd_integer.py +12 -0
- cellprofiler_core/setting/text/pathname/__init__.py +2 -0
- cellprofiler_core/setting/text/pathname/_pathname.py +29 -0
- cellprofiler_core/setting/text/pathname/_url.py +19 -0
- cellprofiler_core/utilities/__init__.py +0 -0
- cellprofiler_core/utilities/analysis.py +89 -0
- cellprofiler_core/utilities/channel_hasher.py +63 -0
- cellprofiler_core/utilities/core/__init__.py +0 -0
- cellprofiler_core/utilities/core/module/__init__.py +0 -0
- cellprofiler_core/utilities/core/module/identify.py +114 -0
- cellprofiler_core/utilities/core/modules/__init__.py +182 -0
- cellprofiler_core/utilities/core/modules/load_data.py +200 -0
- cellprofiler_core/utilities/core/modules.py +0 -0
- cellprofiler_core/utilities/core/object.py +131 -0
- cellprofiler_core/utilities/core/pipeline.py +359 -0
- cellprofiler_core/utilities/core/plugins.py +122 -0
- cellprofiler_core/utilities/core/workspace.py +17 -0
- cellprofiler_core/utilities/grid.py +29 -0
- cellprofiler_core/utilities/hdf5_dict.py +2680 -0
- cellprofiler_core/utilities/image.py +349 -0
- cellprofiler_core/utilities/java.py +64 -0
- cellprofiler_core/utilities/legacy.py +35 -0
- cellprofiler_core/utilities/measurement.py +190 -0
- cellprofiler_core/utilities/pathname.py +29 -0
- cellprofiler_core/utilities/utf16encode.py +32 -0
- cellprofiler_core/utilities/zmq/__init__.py +384 -0
- cellprofiler_core/utilities/zmq/_analysis_context.py +77 -0
- cellprofiler_core/utilities/zmq/_boundary.py +296 -0
- cellprofiler_core/utilities/zmq/communicable/__init__.py +1 -0
- cellprofiler_core/utilities/zmq/communicable/_communicable.py +77 -0
- cellprofiler_core/utilities/zmq/communicable/reply/__init__.py +3 -0
- cellprofiler_core/utilities/zmq/communicable/reply/_lock_status_reply.py +14 -0
- cellprofiler_core/utilities/zmq/communicable/reply/_reply.py +13 -0
- cellprofiler_core/utilities/zmq/communicable/reply/_upstream_exit.py +5 -0
- cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/__init__.py +2 -0
- cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/_boundary_exited.py +7 -0
- cellprofiler_core/utilities/zmq/communicable/reply/upstream_exit/_upstream_exit.py +5 -0
- cellprofiler_core/utilities/zmq/communicable/request/__init__.py +3 -0
- cellprofiler_core/utilities/zmq/communicable/request/_analysis_request.py +17 -0
- cellprofiler_core/utilities/zmq/communicable/request/_lock_status_request.py +12 -0
- cellprofiler_core/utilities/zmq/communicable/request/_request.py +57 -0
- cellprofiler_core/worker/__init__.py +330 -0
- cellprofiler_core/worker/_pipeline_event_listener.py +33 -0
- cellprofiler_core/worker/_worker.py +488 -0
- cellprofiler_core/workspace/__init__.py +2 -0
- cellprofiler_core/workspace/_disposition_changed_event.py +3 -0
- cellprofiler_core/workspace/_workspace.py +598 -0
- cellprofiler_core_nightly-5.0.0.dev65.dist-info/LICENSE +41 -0
- cellprofiler_core_nightly-5.0.0.dev65.dist-info/METADATA +101 -0
- cellprofiler_core_nightly-5.0.0.dev65.dist-info/RECORD +309 -0
- cellprofiler_core_nightly-5.0.0.dev65.dist-info/WHEEL +5 -0
- cellprofiler_core_nightly-5.0.0.dev65.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from cellprofiler_core._version import __version__
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import pathlib
|
|
3
|
+
|
|
4
|
+
import click
|
|
5
|
+
|
|
6
|
+
import cellprofiler_core.commands
|
|
7
|
+
|
|
8
|
+
CONTEXT_SETTINGS = dict(auto_envvar_prefix="COMPLEX")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Command(click.MultiCommand):
|
|
12
|
+
def get_command(self, context, name):
|
|
13
|
+
try:
|
|
14
|
+
name = f"cellprofiler_core.commands._{name}_command"
|
|
15
|
+
|
|
16
|
+
imported_module = __import__(name, None, None, ["command"])
|
|
17
|
+
except ImportError:
|
|
18
|
+
return
|
|
19
|
+
|
|
20
|
+
return imported_module.command
|
|
21
|
+
|
|
22
|
+
def list_commands(self, context):
|
|
23
|
+
command_names = []
|
|
24
|
+
|
|
25
|
+
commands_pathname = cellprofiler_core.commands.__file__
|
|
26
|
+
|
|
27
|
+
commands_directory = pathlib.Path(commands_pathname).parent
|
|
28
|
+
|
|
29
|
+
for filename in os.listdir(commands_directory):
|
|
30
|
+
if filename.endswith("_command.py") and filename.startswith("_"):
|
|
31
|
+
command_name = filename[1:-11]
|
|
32
|
+
|
|
33
|
+
command_names += [command_name]
|
|
34
|
+
|
|
35
|
+
command_names.sort()
|
|
36
|
+
|
|
37
|
+
return command_names
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class Environment:
|
|
41
|
+
def __init__(self):
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
pass_environment = click.make_pass_decorator(Environment, ensure=True)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@click.command(cls=Command, context_settings=CONTEXT_SETTINGS)
|
|
49
|
+
@pass_environment
|
|
50
|
+
def main(context):
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
if __name__ == "__main__":
|
|
55
|
+
main({})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# file generated by setuptools_scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
TYPE_CHECKING = False
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from typing import Tuple, Union
|
|
6
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
|
+
else:
|
|
8
|
+
VERSION_TUPLE = object
|
|
9
|
+
|
|
10
|
+
version: str
|
|
11
|
+
__version__: str
|
|
12
|
+
__version_tuple__: VERSION_TUPLE
|
|
13
|
+
version_tuple: VERSION_TUPLE
|
|
14
|
+
|
|
15
|
+
__version__ = version = '5.0.0.dev65'
|
|
16
|
+
__version_tuple__ = version_tuple = (5, 0, 0, 'dev65')
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Run pipelines on imagesets to produce measurements.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
use_analysis = True
|
|
9
|
+
|
|
10
|
+
DEBUG = "DEBUG"
|
|
11
|
+
ANNOUNCE_DONE = "DONE"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
###############################
|
|
15
|
+
# Request, Replies, Events
|
|
16
|
+
###############################
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if sys.platform == "darwin":
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
if __name__ == "__main__":
|
|
23
|
+
# This is an ugly hack, but it's necesary to unify the Request/Reply
|
|
24
|
+
# classes above, so that regardless of whether this is the current module,
|
|
25
|
+
# or a separately imported one, they see the same classes.
|
|
26
|
+
import cellprofiler_core.analysis
|
|
27
|
+
from ._runner import Runner
|
|
28
|
+
|
|
29
|
+
globals().update(cellprofiler_core.analysis.__dict__)
|
|
30
|
+
|
|
31
|
+
Runner.start_workers(2)
|
|
32
|
+
Runner.stop_workers()
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import gc
|
|
2
|
+
import threading
|
|
3
|
+
import uuid
|
|
4
|
+
|
|
5
|
+
from ._runner import Runner
|
|
6
|
+
from ..measurement import Measurements
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Analysis:
|
|
10
|
+
"""An Analysis is the application of a particular pipeline of modules to a
|
|
11
|
+
set of images to produce measurements.
|
|
12
|
+
|
|
13
|
+
Multiprocessing for analyses is handled by multiple layers of threads and
|
|
14
|
+
processes, to keep the GUI responsive and simplify the code. Threads and
|
|
15
|
+
processes are organized as below. Display/Interaction requests and
|
|
16
|
+
Exceptions are sent directly to the pipeline listener.
|
|
17
|
+
|
|
18
|
+
+------------------------------------------------+
|
|
19
|
+
| CellProfiler GUI/WX thread |
|
|
20
|
+
| |
|
|
21
|
+
+- Analysis() methods down, Events/Requests up -+
|
|
22
|
+
| |
|
|
23
|
+
| AnalysisRunner.interface() thread |
|
|
24
|
+
| |
|
|
25
|
+
+---------------- Queues ----------------------+
|
|
26
|
+
| |
|
|
27
|
+
| AnalysisRunner.jobserver()/announce() threads |
|
|
28
|
+
| |
|
|
29
|
+
+----------------------------------------------- +
|
|
30
|
+
| zmqrequest.Boundary() |
|
|
31
|
+
+---------------+----------------+---------------+
|
|
32
|
+
| Worker | Worker | Worker |
|
|
33
|
+
+---------------+----------------+---------------+
|
|
34
|
+
|
|
35
|
+
Workers are managed by class variables in the AnalysisRunner.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, pipeline, initial_measurements=None):
|
|
39
|
+
"""create an Analysis applying pipeline to a set of images, writing out
|
|
40
|
+
to measurements_filename, optionally starting with previous
|
|
41
|
+
measurements."""
|
|
42
|
+
self.pipeline = pipeline
|
|
43
|
+
initial_measurements = Measurements(copy=initial_measurements)
|
|
44
|
+
self.initial_measurements_buf = initial_measurements.file_contents()
|
|
45
|
+
initial_measurements.close()
|
|
46
|
+
self.debug_mode = False
|
|
47
|
+
self.analysis_in_progress = False
|
|
48
|
+
self.runner = None
|
|
49
|
+
|
|
50
|
+
self.runner_lock = threading.Lock() # defensive coding purposes
|
|
51
|
+
|
|
52
|
+
def start(self, analysis_event_callback, num_workers=None, overwrite=True):
|
|
53
|
+
"""Start the analysis runner
|
|
54
|
+
|
|
55
|
+
analysis_event_callback - callback from runner to UI thread for
|
|
56
|
+
event progress and UI handlers
|
|
57
|
+
|
|
58
|
+
num_workers - # of worker processes to instantiate, default is # of cores
|
|
59
|
+
|
|
60
|
+
overwrite - True (default) to process all image sets, False to only
|
|
61
|
+
process incomplete ones (or incomplete groups if grouping)
|
|
62
|
+
"""
|
|
63
|
+
with self.runner_lock:
|
|
64
|
+
assert not self.analysis_in_progress
|
|
65
|
+
self.analysis_in_progress = uuid.uuid1().hex
|
|
66
|
+
|
|
67
|
+
self.runner = Runner(
|
|
68
|
+
self.analysis_in_progress,
|
|
69
|
+
self.pipeline,
|
|
70
|
+
self.initial_measurements_buf,
|
|
71
|
+
analysis_event_callback,
|
|
72
|
+
)
|
|
73
|
+
self.runner.start(num_workers=num_workers, overwrite=overwrite)
|
|
74
|
+
return self.analysis_in_progress
|
|
75
|
+
|
|
76
|
+
def pause(self):
|
|
77
|
+
with self.runner_lock:
|
|
78
|
+
assert self.analysis_in_progress
|
|
79
|
+
self.runner.pause()
|
|
80
|
+
|
|
81
|
+
def resume(self):
|
|
82
|
+
with self.runner_lock:
|
|
83
|
+
assert self.analysis_in_progress
|
|
84
|
+
self.runner.resume()
|
|
85
|
+
|
|
86
|
+
def cancel(self):
|
|
87
|
+
with self.runner_lock:
|
|
88
|
+
if not self.analysis_in_progress:
|
|
89
|
+
return
|
|
90
|
+
self.analysis_in_progress = False
|
|
91
|
+
self.runner.cancel()
|
|
92
|
+
self.runner = None
|
|
93
|
+
"""
|
|
94
|
+
Explicitly call GC here so that the old runner's threads and
|
|
95
|
+
queues get deleted before any new analysis can be started.
|
|
96
|
+
On rare occasions CP can hang when threads get GC'd during a run
|
|
97
|
+
"""
|
|
98
|
+
gc.collect()
|
|
99
|
+
|
|
100
|
+
def check_running(self):
|
|
101
|
+
"""Verify that an analysis is running, allowing the GUI to recover even
|
|
102
|
+
if the AnalysisRunner fails in some way.
|
|
103
|
+
|
|
104
|
+
Returns True if analysis is still running (threads are still alive).
|
|
105
|
+
"""
|
|
106
|
+
with self.runner_lock:
|
|
107
|
+
if self.analysis_in_progress:
|
|
108
|
+
return self.runner.check()
|
|
109
|
+
return False
|