code-loader 1.0.87.dev8__py3-none-any.whl → 1.0.88__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.
@@ -2,7 +2,6 @@ from typing import List, Optional, Dict, Any, Union
2
2
 
3
3
  from dataclasses import dataclass, field
4
4
  from code_loader.contract.enums import DatasetMetadataType, LeapDataType
5
- from code_loader.contract.mapping import NodeConnection
6
5
 
7
6
 
8
7
  @dataclass
@@ -121,12 +120,6 @@ class BoundingBox:
121
120
  metadata: Optional[Dict[str, Union[str, int, float]]] = None
122
121
 
123
122
 
124
-
125
- @dataclass
126
- class EngineFileContract:
127
- node_connections: Optional[List[NodeConnection]] = None
128
-
129
-
130
123
  @dataclass
131
124
  class DatasetIntegParseResult:
132
125
  payloads: List[DatasetTestResultPayload]
@@ -136,4 +129,3 @@ class DatasetIntegParseResult:
136
129
  model_setup: Optional[ModelSetup] = None
137
130
  general_error: Optional[str] = None
138
131
  print_log: Optional[str] = None
139
- engine_file_contract: Optional[EngineFileContract] = None
@@ -12,7 +12,6 @@ from code_loader.contract.datasetclasses import SectionCallableInterface, InputH
12
12
  CustomMultipleReturnCallableInterfaceMultiArgs, DatasetBaseHandler, custom_latent_space_attribute, \
13
13
  RawInputsForHeatmap, VisualizerHandlerData, MetricHandlerData, CustomLossHandlerData, SamplePreprocessResponse
14
14
  from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection, DatasetMetadataType
15
- from code_loader.contract.mapping import NodeConnection, NodeMapping, NodeMappingType
16
15
  from code_loader.contract.responsedataclasses import DatasetTestResultPayload
17
16
  from code_loader.contract.visualizer_classes import map_leap_data_type_to_visualizer_class
18
17
  from code_loader.default_losses import loss_name_to_function
@@ -44,8 +43,6 @@ class LeapBinder:
44
43
  self._extend_with_default_metrics()
45
44
  self._extend_with_default_losses()
46
45
 
47
- self.mapping_connections: List[NodeConnection] = []
48
-
49
46
  self.batch_size_to_validate: Optional[int] = None
50
47
 
51
48
  def _extend_with_default_visualizers(self) -> None:
@@ -310,7 +307,7 @@ class LeapBinder:
310
307
  metric_handler_data = MetricHandlerData(name, regular_arg_names, direction, compute_insights)
311
308
  self.setup_container.metrics.append(MetricHandler(metric_handler_data, function))
312
309
 
313
- def add_prediction(self, name: str, labels: List[str], channel_dim: int = -1, prediction_index: Optional[int]=None) -> None:
310
+ def add_prediction(self, name: str, labels: List[str], channel_dim: int = -1) -> None:
314
311
  """
315
312
  Add prediction labels to the setup.
316
313
 
@@ -325,11 +322,6 @@ class LeapBinder:
325
322
  leap_binder.add_prediction(name='class_labels', labels=['cat', 'dog'])
326
323
  """
327
324
  self.setup_container.prediction_types.append(PredictionTypeHandler(name, labels, channel_dim))
328
- if prediction_index is not None:
329
- node_connection = NodeConnection(NodeMapping(name, NodeMappingType.PredictionLabels),
330
- {'temp': NodeMapping('', NodeMappingType(f'Prediction{prediction_index}'))})
331
-
332
- self.mapping_connections.append(node_connection)
333
325
 
334
326
  def set_ground_truth(self, function: SectionCallableInterface, name: str) -> None:
335
327
  """
@@ -513,6 +505,10 @@ class LeapBinder:
513
505
  for i, (single_metadata_name, single_metadata_result) in enumerate(raw_result.items()):
514
506
  metadata_test_result = metadata_test_result_payloads[i]
515
507
 
508
+ if not isinstance(single_metadata_result, (int, str, bool, float, np.unsignedinteger, np.signedinteger, np.bool_, np.floating)):
509
+ raise Exception(f"Unsupported return type of metadata {single_metadata_name}."
510
+ f"The return type should be one of [int, float, str, bool]. Got {type(single_metadata_result)}")
511
+
516
512
  metadata_type = None
517
513
  if single_metadata_result is None:
518
514
  if state != DataStateEnum.training and test_result[i].name == f'{dataset_base_handler.name}_{single_metadata_name}':
@@ -11,25 +11,13 @@ from code_loader.contract.datasetclasses import CustomCallableInterfaceMultiArgs
11
11
  ConfusionMatrixElement, SamplePreprocessResponse
12
12
  from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType
13
13
  from code_loader import leap_binder
14
- from code_loader.contract.mapping import NodeMapping, NodeMappingType, NodeConnection
15
14
  from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, LeapTextMask, LeapText, LeapGraph, \
16
15
  LeapHorizontalBar, LeapImageWithBBox, LeapImageWithHeatmap
17
16
 
18
17
 
19
- def _add_mapping_connections(connects_to, arg_names, node_mapping_type, name):
20
- for user_unique_name, connection_destinations in connects_to.items():
21
- main_node_mapping = NodeMapping(name, node_mapping_type, user_unique_name, arg_names=arg_names)
22
- node_inputs = {}
23
- for arg_name, destination in zip(arg_names, connection_destinations):
24
- node_inputs[arg_name] = destination.node_mapping
25
-
26
- leap_binder.mapping_connections.append(NodeConnection(main_node_mapping, node_inputs))
27
-
28
-
29
18
  def tensorleap_custom_metric(name: str,
30
19
  direction: Union[MetricDirection, Dict[str, MetricDirection]] = MetricDirection.Downward,
31
- compute_insights: Optional[Union[bool, Dict[str, bool]]] = None,
32
- connects_to=None):
20
+ compute_insights: Optional[Union[bool, Dict[str, bool]]] = None):
33
21
  def decorating_function(user_function: Union[CustomCallableInterfaceMultiArgs,
34
22
  CustomMultipleReturnCallableInterfaceMultiArgs,
35
23
  ConfusionMatrixCallableInterfaceMultiArgs]):
@@ -40,10 +28,6 @@ def tensorleap_custom_metric(name: str,
40
28
 
41
29
  leap_binder.add_custom_metric(user_function, name, direction, compute_insights)
42
30
 
43
- if connects_to is not None:
44
- arg_names = leap_binder.setup_container.metrics[-1].metric_handler_data.arg_names
45
- _add_mapping_connections(connects_to, arg_names, NodeMappingType.Metric, name)
46
-
47
31
  def _validate_input_args(*args, **kwargs) -> None:
48
32
  for i, arg in enumerate(args):
49
33
  assert isinstance(arg, (np.ndarray, SamplePreprocessResponse)), (
@@ -132,8 +116,7 @@ def tensorleap_custom_metric(name: str,
132
116
 
133
117
 
134
118
  def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
135
- heatmap_function: Optional[Callable[..., npt.NDArray[np.float32]]] = None,
136
- connects_to=None):
119
+ heatmap_function: Optional[Callable[..., npt.NDArray[np.float32]]] = None):
137
120
  def decorating_function(user_function: VisualizerCallableInterface):
138
121
  for viz_handler in leap_binder.setup_container.visualizers:
139
122
  if viz_handler.visualizer_handler_data.name == name:
@@ -142,10 +125,6 @@ def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
142
125
 
143
126
  leap_binder.set_visualizer(user_function, name, visualizer_type, heatmap_function)
144
127
 
145
- if connects_to is not None:
146
- arg_names = leap_binder.setup_container.visualizers[-1].visualizer_handler_data.arg_names
147
- _add_mapping_connections(connects_to, arg_names, NodeMappingType.Visualizer, name)
148
-
149
128
  def _validate_input_args(*args, **kwargs):
150
129
  for i, arg in enumerate(args):
151
130
  assert isinstance(arg, (np.ndarray, SamplePreprocessResponse)), (
@@ -296,7 +275,7 @@ def tensorleap_unlabeled_preprocess():
296
275
  return decorating_function
297
276
 
298
277
 
299
- def tensorleap_input_encoder(name: str, channel_dim=-1, model_input_index=None):
278
+ def tensorleap_input_encoder(name: str, channel_dim=-1):
300
279
  def decorating_function(user_function: SectionCallableInterface):
301
280
  for input_handler in leap_binder.setup_container.inputs:
302
281
  if input_handler.name == name:
@@ -335,11 +314,6 @@ def tensorleap_input_encoder(name: str, channel_dim=-1, model_input_index=None):
335
314
  _validate_result(result)
336
315
  return result
337
316
 
338
- node_mapping_type = NodeMappingType.Input
339
- if model_input_index is not None:
340
- node_mapping_type = NodeMappingType(f'Input{str(model_input_index)}')
341
- inner.node_mapping = NodeMapping(name, node_mapping_type)
342
-
343
317
  return inner
344
318
 
345
319
  return decorating_function
@@ -380,16 +354,12 @@ def tensorleap_gt_encoder(name: str):
380
354
  _validate_result(result)
381
355
  return result
382
356
 
383
- inner.node_mapping = NodeMapping(name, NodeMappingType.GroundTruth)
384
-
385
357
  return inner
386
358
 
387
-
388
-
389
359
  return decorating_function
390
360
 
391
361
 
392
- def tensorleap_custom_loss(name: str, connects_to=None):
362
+ def tensorleap_custom_loss(name: str):
393
363
  def decorating_function(user_function: CustomCallableInterface):
394
364
  for loss_handler in leap_binder.setup_container.custom_loss_handlers:
395
365
  if loss_handler.custom_loss_handler_data.name == name:
@@ -398,11 +368,6 @@ def tensorleap_custom_loss(name: str, connects_to=None):
398
368
 
399
369
  leap_binder.add_custom_loss(user_function, name)
400
370
 
401
- if connects_to is not None:
402
- arg_names = leap_binder.setup_container.custom_loss_handlers[-1].custom_loss_handler_data.arg_names
403
- _add_mapping_connections(connects_to, arg_names, NodeMappingType.CustomLoss, name)
404
-
405
-
406
371
  valid_types = (np.ndarray, SamplePreprocessResponse)
407
372
  try:
408
373
  import tensorflow as tf
code_loader/leaploader.py CHANGED
@@ -19,8 +19,7 @@ from code_loader.contract.enums import DataStateEnum, TestingSectionEnum, DataSt
19
19
  from code_loader.contract.exceptions import DatasetScriptException
20
20
  from code_loader.contract.responsedataclasses import DatasetIntegParseResult, DatasetTestResultPayload, \
21
21
  DatasetPreprocess, DatasetSetup, DatasetInputInstance, DatasetOutputInstance, DatasetMetadataInstance, \
22
- VisualizerInstance, PredictionTypeInstance, ModelSetup, CustomLayerInstance, MetricInstance, CustomLossInstance, \
23
- EngineFileContract
22
+ VisualizerInstance, PredictionTypeInstance, ModelSetup, CustomLayerInstance, MetricInstance, CustomLossInstance
24
23
  from code_loader.inner_leap_binder import global_leap_binder
25
24
  from code_loader.leaploaderbase import LeapLoaderBase
26
25
  from code_loader.utils import get_root_exception_file_and_line_number
@@ -180,8 +179,7 @@ class LeapLoader(LeapLoaderBase):
180
179
  return DatasetIntegParseResult(is_valid=is_valid, payloads=test_payloads,
181
180
  is_valid_for_model=is_valid_for_model, setup=setup_response,
182
181
  model_setup=model_setup, general_error=general_error,
183
- print_log=print_log,
184
- engine_file_contract=EngineFileContract(global_leap_binder.mapping_connections))
182
+ print_log=print_log)
185
183
 
186
184
  def _check_preprocess(self) -> DatasetTestResultPayload:
187
185
  test_result = DatasetTestResultPayload('preprocess')
@@ -206,6 +204,9 @@ class LeapLoader(LeapLoaderBase):
206
204
  preprocess_result = self._preprocess_result()
207
205
  result_payloads: List[DatasetTestResultPayload] = []
208
206
  dataset_base_handlers: List[Union[DatasetBaseHandler, MetadataHandler]] = self._get_all_dataset_base_handlers()
207
+ metadata_handlers_num = sum(isinstance(x, MetadataHandler) for x in dataset_base_handlers)
208
+ assert metadata_handlers_num < 100, f"More than 100 metadata function are not allowed, current metadata function discovered: {metadata_handlers_num}"
209
+ metadata_param_count = 0
209
210
  for dataset_base_handler in dataset_base_handlers:
210
211
  test_result = [DatasetTestResultPayload(dataset_base_handler.name)]
211
212
  for state, preprocess_response in preprocess_result.items():
@@ -220,9 +221,10 @@ class LeapLoader(LeapLoaderBase):
220
221
  test_result[0].display[
221
222
  state_name] = f"{repr(e)} in file {file_name}, line_number: {line_number}\nStacktrace:\n{stacktrace}"
222
223
  test_result[0].is_passed = False
223
-
224
+ if isinstance(dataset_base_handler, MetadataHandler):
225
+ metadata_param_count += len(test_result)
226
+ assert metadata_param_count < 800, f"More than 800 metadata keys are not allowed, current metadata keys discovered: {metadata_param_count}"
224
227
  result_payloads.extend(test_result)
225
-
226
228
  return result_payloads
227
229
 
228
230
  @staticmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: code-loader
3
- Version: 1.0.87.dev8
3
+ Version: 1.0.88
4
4
  Summary:
5
5
  Home-page: https://github.com/tensorleap/code-loader
6
6
  License: MIT
@@ -4,8 +4,7 @@ code_loader/contract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
4
4
  code_loader/contract/datasetclasses.py,sha256=ZN6XC-tg0qaT-GF4YiV2SsM2dUQW4fc1akLF-J4YT0w,7964
5
5
  code_loader/contract/enums.py,sha256=GEFkvUMXnCNt-GOoz7NJ9ecQZ2PPDettJNOsxsiM0wk,1622
6
6
  code_loader/contract/exceptions.py,sha256=jWqu5i7t-0IG0jGRsKF4DjJdrsdpJjIYpUkN1F4RiyQ,51
7
- code_loader/contract/mapping.py,sha256=vAeIIAzPekSoVfJED_FITGrZPC44syff553Fqr4obOQ,1141
8
- code_loader/contract/responsedataclasses.py,sha256=6-5DJkYBdXb3UB1eNidTTPPBIYxMjEoMdYDkp9VhH8o,4223
7
+ code_loader/contract/responsedataclasses.py,sha256=RSx9m_R3LawhK5o1nAcO3hfp2F9oJYtxZr_bpP3bTmw,4005
9
8
  code_loader/contract/visualizer_classes.py,sha256=_nlukRfW8QeQaQG7G5HfAUSeCuoqslB4xJS2AGI_Nz8,15156
10
9
  code_loader/default_losses.py,sha256=NoOQym1106bDN5dcIk56Elr7ZG5quUHArqfP5-Nyxyo,1139
11
10
  code_loader/default_metrics.py,sha256=v16Mrt2Ze1tXPgfKywGVdRSrkaK4CKLNQztN1UdVqIY,5010
@@ -20,14 +19,14 @@ code_loader/experiment_api/types.py,sha256=MY8xFARHwdVA7p4dxyhD60ShmttgTvb4qdp1o
20
19
  code_loader/experiment_api/utils.py,sha256=XZHtxge12TS4H4-8PjV3sKuhp8Ud6ojAiIzTZJEqBqc,3304
21
20
  code_loader/experiment_api/workingspace_config_utils.py,sha256=DLzXQCg4dgTV_YgaSbeTVzq-2ja_SQw4zi7LXwKL9cY,990
22
21
  code_loader/inner_leap_binder/__init__.py,sha256=koOlJyMNYzGbEsoIbXathSmQ-L38N_pEXH_HvL7beXU,99
23
- code_loader/inner_leap_binder/leapbinder.py,sha256=57lJPLDbCth7m2oh-O8JDEOsCukVTXk263t-LUPM02k,31323
24
- code_loader/inner_leap_binder/leapbinder_decorators.py,sha256=y5TuhJe-J3xEE0Oj7bxIfhyN1lXiLJgfgy3ZiAs-yic,24364
25
- code_loader/leaploader.py,sha256=3_opkzRnzGWqB8aubSqpCEf1aPo3Z7nkKY4R5j8iFeY,25914
22
+ code_loader/inner_leap_binder/leapbinder.py,sha256=1zPMMmpbdATQbWrEiLdHYrmfTgLqz-aOXWTJAup-pWw,31205
23
+ code_loader/inner_leap_binder/leapbinder_decorators.py,sha256=qcYyekpIN1hgbmSqTrN7o6IMpfu8ZWp2J_lhMEoV8I8,22598
24
+ code_loader/leaploader.py,sha256=puboAweNAreN0nJ7hJG86ZE13hBYlw4pn_ilZ9PJbPU,26335
26
25
  code_loader/leaploaderbase.py,sha256=VH0vddRmkqLtcDlYPCO7hfz1_VbKo43lUdHDAbd4iJc,4198
27
26
  code_loader/utils.py,sha256=aw2i_fqW_ADjLB66FWZd9DfpCQ7mPdMyauROC5Nd51I,2197
28
27
  code_loader/visualizers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
28
  code_loader/visualizers/default_visualizers.py,sha256=f95WzLYO2KU8endWxrmtwjHx7diDfm8AaWjucYHT7GI,2439
30
- code_loader-1.0.87.dev8.dist-info/LICENSE,sha256=qIwWjdspQeSMTtnFZBC8MuT-95L02FPvzRUdWFxrwJY,1067
31
- code_loader-1.0.87.dev8.dist-info/METADATA,sha256=0hgea3o3I_efCPvT87JtY8UJvRcjX0dGuuzCMIqXwlA,854
32
- code_loader-1.0.87.dev8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
33
- code_loader-1.0.87.dev8.dist-info/RECORD,,
29
+ code_loader-1.0.88.dist-info/LICENSE,sha256=qIwWjdspQeSMTtnFZBC8MuT-95L02FPvzRUdWFxrwJY,1067
30
+ code_loader-1.0.88.dist-info/METADATA,sha256=f7Wd5MJoAbaxyA6cBPOdDLnvQ8ge5euqtMoxXQ1F1DM,849
31
+ code_loader-1.0.88.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
32
+ code_loader-1.0.88.dist-info/RECORD,,
@@ -1,53 +0,0 @@
1
- from enum import Enum
2
-
3
- from typing import Optional, Dict, Any, List
4
- from dataclasses import dataclass
5
-
6
-
7
-
8
- class NodeMappingType(Enum):
9
- Visualizer = 'Visualizer'
10
- Metric = 'Metric'
11
- GroundTruth = 'GroundTruth'
12
- Input = 'Input'
13
- Layer = 'Layer'
14
- Loss = 'Loss'
15
- CustomLoss = 'CustomLoss'
16
- Optimizer = 'Optimizer'
17
- Prediction0 = 'Prediction0'
18
- Prediction1 = 'Prediction1'
19
- Prediction2 = 'Prediction2'
20
- Prediction3 = 'Prediction3'
21
- Input0 = 'Input0'
22
- Input1 = 'Input1'
23
- Input2 = 'Input2'
24
- Input3 = 'Input3'
25
- Input4 = 'Input4'
26
- Input5 = 'Input5'
27
- PredictionLabels = 'PredictionLabels'
28
-
29
-
30
- @dataclass
31
- class NodeMapping:
32
- name: str
33
- type: NodeMappingType
34
- user_unique_name: Optional[str] = None
35
- sub_type: Optional[str] = None
36
- arg_names: Optional[List[str]] = None
37
-
38
-
39
- @dataclass
40
- class NodeConnection:
41
- node: NodeMapping
42
- node_inputs: Optional[Dict[str, NodeMapping]]
43
-
44
-
45
- def leap_output(idx):
46
- def dummy():
47
- return None
48
-
49
- node_mapping_type = NodeMappingType(f'Prediction{str(idx)}')
50
- dummy.node_mapping = NodeMapping('', node_mapping_type)
51
-
52
- return dummy
53
-