code-loader 1.0.134.dev1__py3-none-any.whl → 1.0.136__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.

Potentially problematic release.


This version of code-loader might be problematic. Click here for more details.

@@ -3,7 +3,6 @@ from enum import Enum
3
3
  from code_loader.default_metrics import mean_absolute_percentage_error_dimension_reduced, \
4
4
  mean_absolute_error_dimension_reduced, mean_squared_logarithmic_error_dimension_reduced, \
5
5
  mean_squared_error_dimension_reduced, categorical_crossentropy, binary_crossentropy
6
- from code_loader.inner_leap_binder.leapbinder_decorators import tensorleap_custom_loss
7
6
 
8
7
 
9
8
  class LossName(Enum):
@@ -23,9 +22,3 @@ loss_name_to_function = {
23
22
  LossName.CategoricalCrossentropy.name: categorical_crossentropy,
24
23
  LossName.BinaryCrossentropy.name: binary_crossentropy
25
24
  }
26
-
27
-
28
- for loss_name, func in loss_name_to_function.items():
29
- @tensorleap_custom_loss(loss_name)
30
- def loss_func(ground_truth, prediction):
31
- return func(ground_truth, prediction)
@@ -6,7 +6,17 @@ import numpy as np
6
6
 
7
7
  from code_loader.contract.datasetclasses import ConfusionMatrixElement # type: ignore
8
8
  from code_loader.contract.enums import ConfusionMatrixValue, MetricDirection # type: ignore
9
- from code_loader.inner_leap_binder.leapbinder_decorators import tensorleap_custom_metric
9
+
10
+
11
+ class Metric(Enum):
12
+ MeanSquaredError = 'MeanSquaredError'
13
+ MeanSquaredLogarithmicError = 'MeanSquaredLogarithmicError'
14
+ MeanAbsoluteError = 'MeanAbsoluteError'
15
+ MeanAbsolutePercentageError = 'MeanAbsolutePercentageError'
16
+ Accuracy = 'Accuracy'
17
+ ConfusionMatrixClassification = 'ConfusionMatrixClassification'
18
+ CategoricalCrossentropy = 'CategoricalCrossentropy'
19
+ BinaryCrossentropy = 'BinaryCrossentropy'
10
20
 
11
21
 
12
22
  def binary_crossentropy(ground_truth: np.array, prediction: np.array) -> np.array:
@@ -24,7 +34,6 @@ def categorical_crossentropy(ground_truth: np.array, prediction: np.array) -> np
24
34
  prediction = np.clip(prediction, epsilon, 1.0 - epsilon)
25
35
  return -(ground_truth * np.log(prediction)).sum(axis=1).astype(np.float32)
26
36
 
27
-
28
37
  def accuracy_reduced(ground_truth: np.array, prediction: np.array) -> np.array:
29
38
  ground_truth, prediction = flatten_non_batch_dims(ground_truth, prediction)
30
39
  return np.mean((np.round(prediction).astype(np.bool_) == ground_truth.astype(np.bool_)), axis=1)
@@ -79,17 +88,6 @@ def confusion_matrix_classification_metric(ground_truth, prediction) -> List[Lis
79
88
  return ret
80
89
 
81
90
 
82
- class Metric(Enum):
83
- MeanSquaredError = 'MeanSquaredError'
84
- MeanSquaredLogarithmicError = 'MeanSquaredLogarithmicError'
85
- MeanAbsoluteError = 'MeanAbsoluteError'
86
- MeanAbsolutePercentageError = 'MeanAbsolutePercentageError'
87
- Accuracy = 'Accuracy'
88
- ConfusionMatrixClassification = 'ConfusionMatrixClassification'
89
- CategoricalCrossentropy = 'CategoricalCrossentropy'
90
- BinaryCrossentropy = 'BinaryCrossentropy'
91
-
92
-
93
91
  metrics_names_to_functions_and_direction = {
94
92
  Metric.MeanSquaredError.name: (mean_squared_error_dimension_reduced, MetricDirection.Downward),
95
93
  Metric.MeanSquaredLogarithmicError.name: (
@@ -102,8 +100,3 @@ metrics_names_to_functions_and_direction = {
102
100
  Metric.CategoricalCrossentropy.name: (categorical_crossentropy, MetricDirection.Downward),
103
101
  Metric.BinaryCrossentropy.name: (binary_crossentropy, MetricDirection.Downward)
104
102
  }
105
-
106
- for metric_name, (func, direction) in metrics_names_to_functions_and_direction.items():
107
- @tensorleap_custom_metric(metric_name, direction)
108
- def metric_func(ground_truth, prediction):
109
- return func(ground_truth, prediction)
@@ -1,5 +1,8 @@
1
1
  import inspect
2
- from typing import Callable, Optional, Dict, Any, Type, Union
2
+ from typing import Callable, List, Optional, Dict, Any, Type, Union
3
+
4
+ import numpy as np
5
+ import numpy.typing as npt
3
6
 
4
7
  from code_loader.contract.datasetclasses import SectionCallableInterface, InputHandler, \
5
8
  GroundTruthHandler, MetadataHandler, DatasetIntegrationSetup, VisualizerHandler, PreprocessResponse, \
@@ -9,16 +12,17 @@ from code_loader.contract.datasetclasses import SectionCallableInterface, InputH
9
12
  CustomMultipleReturnCallableInterfaceMultiArgs, DatasetBaseHandler, custom_latent_space_attribute, \
10
13
  RawInputsForHeatmap, VisualizerHandlerData, MetricHandlerData, CustomLossHandlerData, SamplePreprocessResponse, \
11
14
  ElementInstanceMasksHandler, InstanceCallableInterface, CustomLatentSpaceHandler
12
- from code_loader.contract.enums import DataStateEnum, DataStateType, DatasetMetadataType
15
+ from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection, DatasetMetadataType
13
16
  from code_loader.contract.mapping import NodeConnection, NodeMapping, NodeMappingType
14
17
  from code_loader.contract.responsedataclasses import DatasetTestResultPayload
15
18
  from code_loader.contract.visualizer_classes import map_leap_data_type_to_visualizer_class
16
-
17
- from code_loader.default_metrics import *
18
- from code_loader.visualizers.default_visualizers import *
19
- from code_loader.default_losses import *
20
-
19
+ from code_loader.default_losses import loss_name_to_function
20
+ from code_loader.default_metrics import metrics_names_to_functions_and_direction
21
21
  from code_loader.utils import to_numpy_return_wrapper, get_shape, to_numpy_return_masks_wrapper
22
+ from code_loader.visualizers.default_visualizers import DefaultVisualizer, \
23
+ default_graph_visualizer, \
24
+ default_image_visualizer, default_horizontal_bar_visualizer, default_word_visualizer, \
25
+ default_image_mask_visualizer, default_text_mask_visualizer, default_raw_data_visualizer, default_video_visualizer
22
26
 
23
27
 
24
28
  mapping_runtime_mode_env_var_mame = '__MAPPING_RUNTIME_MODE__'
@@ -40,13 +44,40 @@ class LeapBinder:
40
44
  self.cache_container: Dict[str, Any] = {"word_to_index": {}}
41
45
  self._visualizer_names: List[str] = list()
42
46
  self._encoder_names: List[str] = list()
47
+ self._extend_with_default_visualizers()
48
+ self._extend_with_default_metrics()
49
+ self._extend_with_default_losses()
43
50
 
44
51
  self.mapping_connections: List[NodeConnection] = []
45
52
  self.integration_test_func: Optional[Callable[[str, PreprocessResponse], Any]] = None
46
53
 
47
54
  self.batch_size_to_validate: Optional[int] = None
48
55
 
49
-
56
+ def _extend_with_default_visualizers(self) -> None:
57
+ self.set_visualizer(function=default_image_visualizer, name=DefaultVisualizer.Image.value,
58
+ visualizer_type=LeapDataType.Image)
59
+ self.set_visualizer(function=default_video_visualizer, name=DefaultVisualizer.Video.value,
60
+ visualizer_type=LeapDataType.Video)
61
+ self.set_visualizer(function=default_graph_visualizer, name=DefaultVisualizer.Graph.value,
62
+ visualizer_type=LeapDataType.Graph)
63
+ self.set_visualizer(function=default_raw_data_visualizer, name=DefaultVisualizer.RawData.value,
64
+ visualizer_type=LeapDataType.Text)
65
+ self.set_visualizer(function=default_horizontal_bar_visualizer, name=DefaultVisualizer.HorizontalBar.value,
66
+ visualizer_type=LeapDataType.HorizontalBar)
67
+ self.set_visualizer(function=default_word_visualizer, name=DefaultVisualizer.Text.value,
68
+ visualizer_type=LeapDataType.Text)
69
+ self.set_visualizer(function=default_image_mask_visualizer, name=DefaultVisualizer.ImageMask.value,
70
+ visualizer_type=LeapDataType.ImageMask)
71
+ self.set_visualizer(function=default_text_mask_visualizer, name=DefaultVisualizer.TextMask.value,
72
+ visualizer_type=LeapDataType.TextMask)
73
+
74
+ def _extend_with_default_losses(self) -> None:
75
+ for loss_name, func in loss_name_to_function.items():
76
+ self.add_custom_loss(func, loss_name)
77
+
78
+ def _extend_with_default_metrics(self) -> None:
79
+ for metric_name, (func, direction) in metrics_names_to_functions_and_direction.items():
80
+ self.add_custom_metric(func, metric_name, direction)
50
81
 
51
82
  def set_visualizer(self, function: VisualizerCallableInterface,
52
83
  name: str,
@@ -1,5 +1,6 @@
1
1
  # mypy: ignore-errors
2
2
  import os
3
+ from collections import defaultdict
3
4
  from functools import lru_cache
4
5
  from typing import Optional, Union, Callable, List, Dict
5
6
 
@@ -232,9 +233,11 @@ def tensorleap_custom_metric(name: str,
232
233
  direction: Union[MetricDirection, Dict[str, MetricDirection]] = MetricDirection.Downward,
233
234
  compute_insights: Optional[Union[bool, Dict[str, bool]]] = None,
234
235
  connects_to=None):
235
- def decorating_function(user_function: Union[CustomCallableInterfaceMultiArgs,
236
- CustomMultipleReturnCallableInterfaceMultiArgs,
237
- ConfusionMatrixCallableInterfaceMultiArgs]):
236
+ name_to_unique_name = defaultdict(set)
237
+
238
+ def decorating_function(
239
+ user_function: Union[CustomCallableInterfaceMultiArgs, CustomMultipleReturnCallableInterfaceMultiArgs,
240
+ ConfusionMatrixCallableInterfaceMultiArgs]):
238
241
  for metric_handler in leap_binder.setup_container.metrics:
239
242
  if metric_handler.metric_handler_data.name == name:
240
243
  raise Exception(f'Metric with name {name} already exists. '
@@ -354,6 +357,11 @@ def tensorleap_custom_metric(name: str,
354
357
 
355
358
  ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
356
359
  ordered_connections = list(args) + ordered_connections
360
+
361
+ if user_unique_name in name_to_unique_name[mapping_inner.name]:
362
+ user_unique_name = f'{user_unique_name}_{len(name_to_unique_name[mapping_inner.name])}'
363
+ name_to_unique_name[mapping_inner.name].add(user_unique_name)
364
+
357
365
  _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
358
366
  mapping_inner.name, NodeMappingType.Metric)
359
367
 
@@ -376,6 +384,8 @@ def tensorleap_custom_metric(name: str,
376
384
  def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
377
385
  heatmap_function: Optional[Callable[..., npt.NDArray[np.float32]]] = None,
378
386
  connects_to=None):
387
+ name_to_unique_name = defaultdict(set)
388
+
379
389
  def decorating_function(user_function: VisualizerCallableInterface):
380
390
  for viz_handler in leap_binder.setup_container.visualizers:
381
391
  if viz_handler.visualizer_handler_data.name == name:
@@ -452,6 +462,10 @@ def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
452
462
  if 'user_unique_name' in kwargs:
453
463
  user_unique_name = kwargs['user_unique_name']
454
464
 
465
+ if user_unique_name in name_to_unique_name[mapping_inner.name]:
466
+ user_unique_name = f'{user_unique_name}_{len(name_to_unique_name[mapping_inner.name])}'
467
+ name_to_unique_name[mapping_inner.name].add(user_unique_name)
468
+
455
469
  ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
456
470
  ordered_connections = list(args) + ordered_connections
457
471
  _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
@@ -974,6 +988,8 @@ def tensorleap_gt_encoder(name: str):
974
988
 
975
989
 
976
990
  def tensorleap_custom_loss(name: str, connects_to=None):
991
+ name_to_unique_name = defaultdict(set)
992
+
977
993
  def decorating_function(user_function: CustomCallableInterface):
978
994
  for loss_handler in leap_binder.setup_container.custom_loss_handlers:
979
995
  if loss_handler.custom_loss_handler_data.name == name:
@@ -1042,6 +1058,10 @@ def tensorleap_custom_loss(name: str, connects_to=None):
1042
1058
  if 'user_unique_name' in kwargs:
1043
1059
  user_unique_name = kwargs['user_unique_name']
1044
1060
 
1061
+ if user_unique_name in name_to_unique_name[mapping_inner.name]:
1062
+ user_unique_name = f'{user_unique_name}_{len(name_to_unique_name[mapping_inner.name])}'
1063
+ name_to_unique_name[mapping_inner.name].add(user_unique_name)
1064
+
1045
1065
  ordered_connections = [kwargs[n] for n in mapping_inner.arg_names if n in kwargs]
1046
1066
  ordered_connections = list(args) + ordered_connections
1047
1067
  _add_mapping_connection(user_unique_name, ordered_connections, mapping_inner.arg_names,
@@ -1,36 +1,42 @@
1
+ from enum import Enum
2
+
1
3
  import numpy as np
2
4
  import numpy.typing as npt
3
5
 
4
- from code_loader.contract.enums import LeapDataType
5
6
  from code_loader.contract.visualizer_classes import LeapImage, LeapGraph, LeapHorizontalBar, LeapText, \
6
7
  LeapImageMask, LeapTextMask, LeapVideo
7
- from code_loader.inner_leap_binder.leapbinder_decorators import tensorleap_custom_visualizer
8
8
  from code_loader.utils import rescale_min_max
9
9
 
10
10
 
11
+ class DefaultVisualizer(Enum):
12
+ Image = 'Image'
13
+ Video = 'Video'
14
+ Graph = 'Graph'
15
+ HorizontalBar = 'HorizontalBar'
16
+ Text = 'Text'
17
+ ImageMask = 'ImageMask'
18
+ TextMask = 'TextMask'
19
+ RawData = 'RawData'
11
20
 
12
21
 
13
-
14
- @tensorleap_custom_visualizer('Image', LeapDataType.Image)
15
22
  def default_image_visualizer(data: npt.NDArray[np.float32]) -> LeapImage:
16
23
  rescaled_data = rescale_min_max(data[0])
17
24
  return LeapImage(rescaled_data)
18
25
 
19
- @tensorleap_custom_visualizer('Video', LeapDataType.Video)
26
+
20
27
  def default_video_visualizer(data: npt.NDArray[np.float32]) -> LeapVideo:
21
28
  return LeapVideo(data[0])
22
29
 
23
- @tensorleap_custom_visualizer('Graph', LeapDataType.Graph)
30
+
24
31
  def default_graph_visualizer(data: npt.NDArray[np.float32]) -> LeapGraph:
25
32
  return LeapGraph(data[0])
26
33
 
27
- @tensorleap_custom_visualizer('HorizontalBar', LeapDataType.HorizontalBar)
34
+
28
35
  def default_horizontal_bar_visualizer(data: npt.NDArray[np.float32]) -> LeapHorizontalBar:
29
36
  labels = [str(index) for index in range(data.shape[-1])]
30
37
  return LeapHorizontalBar(data[0], labels)
31
38
 
32
39
 
33
- @tensorleap_custom_visualizer('Text', LeapDataType.Text)
34
40
  def default_word_visualizer(data: npt.NDArray[np.float32]) -> LeapText:
35
41
  if len(data.shape) == 2 and data.shape[0] == 1:
36
42
  data = data[0]
@@ -39,11 +45,11 @@ def default_word_visualizer(data: npt.NDArray[np.float32]) -> LeapText:
39
45
  words = [str(index[0]) if type(index) is list else str(index) for index in data]
40
46
  return LeapText(words)
41
47
 
42
- @tensorleap_custom_visualizer('RawData', LeapDataType.Text)
48
+
43
49
  def default_raw_data_visualizer(data: npt.NDArray[np.float32]) -> LeapText:
44
50
  return LeapText([str(data)])
45
51
 
46
- @tensorleap_custom_visualizer('ImageMask', LeapDataType.ImageMask)
52
+
47
53
  def default_image_mask_visualizer(mask: npt.NDArray[np.float32], image: npt.NDArray[np.float32]) -> LeapImageMask:
48
54
  if image.shape[0] == 1:
49
55
  image = image[0]
@@ -62,7 +68,6 @@ def default_image_mask_visualizer(mask: npt.NDArray[np.float32], image: npt.NDAr
62
68
  return LeapImageMask(mask.astype(np.uint8), image.astype(np.float32), labels)
63
69
 
64
70
 
65
- @tensorleap_custom_visualizer('TextMask', LeapDataType.TextMask)
66
71
  def default_text_mask_visualizer(mask: npt.NDArray[np.float32], text_data: npt.NDArray[np.float32]) -> LeapTextMask:
67
72
  mask = mask[0]
68
73
  text_data = text_data[0]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: code-loader
3
- Version: 1.0.134.dev1
3
+ Version: 1.0.136
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -7,8 +7,8 @@ code_loader/contract/exceptions.py,sha256=jWqu5i7t-0IG0jGRsKF4DjJdrsdpJjIYpUkN1F
7
7
  code_loader/contract/mapping.py,sha256=sWJhpng-IkOzQnWQdMT5w2ZZ3X1Z_OOzSwCLXIS7oxE,1446
8
8
  code_loader/contract/responsedataclasses.py,sha256=6-5DJkYBdXb3UB1eNidTTPPBIYxMjEoMdYDkp9VhH8o,4223
9
9
  code_loader/contract/visualizer_classes.py,sha256=Wz9eItmoRaKEHa3p0aW0Ypxx4_xUmaZyLBznnTuxwi0,15425
10
- code_loader/default_losses.py,sha256=mfup6TruVUxU-M_v-TXSNihDDg6tIFjNlZMW19fyprI,1412
11
- code_loader/default_metrics.py,sha256=StPWgd4Ok-h1Oac8QyNYLZPrM1ccP3wOze5tHWvggyY,5336
10
+ code_loader/default_losses.py,sha256=NoOQym1106bDN5dcIk56Elr7ZG5quUHArqfP5-Nyxyo,1139
11
+ code_loader/default_metrics.py,sha256=v16Mrt2Ze1tXPgfKywGVdRSrkaK4CKLNQztN1UdVqIY,5010
12
12
  code_loader/experiment_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  code_loader/experiment_api/api.py,sha256=a7wh6Hhe7IaVxu46eV2soSz-yxnmXG3ipU1BBtsEAaQ,2493
14
14
  code_loader/experiment_api/cli_config_utils.py,sha256=n6JMyNrquxql3KKxHhAP8jAzezlRT-PV2KWI95kKsm0,1140
@@ -20,8 +20,8 @@ code_loader/experiment_api/types.py,sha256=MY8xFARHwdVA7p4dxyhD60ShmttgTvb4qdp1o
20
20
  code_loader/experiment_api/utils.py,sha256=XZHtxge12TS4H4-8PjV3sKuhp8Ud6ojAiIzTZJEqBqc,3304
21
21
  code_loader/experiment_api/workingspace_config_utils.py,sha256=DLzXQCg4dgTV_YgaSbeTVzq-2ja_SQw4zi7LXwKL9cY,990
22
22
  code_loader/inner_leap_binder/__init__.py,sha256=koOlJyMNYzGbEsoIbXathSmQ-L38N_pEXH_HvL7beXU,99
23
- code_loader/inner_leap_binder/leapbinder.py,sha256=YFfYpZjje7rCf2uQpBPtuWt4tkKmczOvuKEouHsyaOc,30908
24
- code_loader/inner_leap_binder/leapbinder_decorators.py,sha256=9gS1nttSiFHvzIIcdlBIt4vcLUjEOLel1YvUaT79pxI,50030
23
+ code_loader/inner_leap_binder/leapbinder.py,sha256=Q3D9yVM-GNEJfYRFvMV__BoZbcWOgnWKhrZXAv6Tu7o,33232
24
+ code_loader/inner_leap_binder/leapbinder_decorators.py,sha256=EptQhu4dPVXmAfUnv_Whzmess0ueRYy5RLpm7WYe6Ho,50981
25
25
  code_loader/leaploader.py,sha256=85XUWd7Y8kup76xeqefgd8db7pGaeHMhE7QlmYlNFMw,29747
26
26
  code_loader/leaploaderbase.py,sha256=LIFcC6xo6V_iiGN3BjibXETu_l84EWM_WIOKAvkfTiM,4458
27
27
  code_loader/mixpanel_tracker.py,sha256=l9z_szKKQ7apEbdNZpGH1TKAiT_TsBHb9AQnePaWTyo,4942
@@ -30,8 +30,8 @@ code_loader/plot_functions/plot_functions.py,sha256=VyVWxd7R3lALIo2z8oZlYybbN0Ip
30
30
  code_loader/plot_functions/visualize.py,sha256=gsBAYYkwMh7jIpJeDMPS8G4CW-pxwx6LznoQIvi4vpo,657
31
31
  code_loader/utils.py,sha256=gXENTYpjdidq2dx0gVbXlErPeHoNs-4TYAZbLRe0y2c,2712
32
32
  code_loader/visualizers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- code_loader/visualizers/default_visualizers.py,sha256=JHcCJ9_GThbvQVyLQ8H--3yfZU7X0x99bAYigH7RfVw,3000
34
- code_loader-1.0.134.dev1.dist-info/LICENSE,sha256=qIwWjdspQeSMTtnFZBC8MuT-95L02FPvzRUdWFxrwJY,1067
35
- code_loader-1.0.134.dev1.dist-info/METADATA,sha256=69D87OK4h_zzQWDQ2RLCB0bAvKyGe6mXT9_b9FE2pHw,1095
36
- code_loader-1.0.134.dev1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
37
- code_loader-1.0.134.dev1.dist-info/RECORD,,
33
+ code_loader/visualizers/default_visualizers.py,sha256=onRnLE_TXfgLN4o52hQIOOhUcFexGlqJ3xSpQDVLuZM,2604
34
+ code_loader-1.0.136.dist-info/LICENSE,sha256=qIwWjdspQeSMTtnFZBC8MuT-95L02FPvzRUdWFxrwJY,1067
35
+ code_loader-1.0.136.dist-info/METADATA,sha256=pNpIswJBMtQtorkL80niuBszYQ38F9repsK8WOCHRJ8,1090
36
+ code_loader-1.0.136.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
37
+ code_loader-1.0.136.dist-info/RECORD,,