code-loader 1.0.77__tar.gz → 1.0.77.dev2__tar.gz
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.
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/PKG-INFO +1 -1
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/datasetclasses.py +4 -2
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/inner_leap_binder/leapbinder.py +50 -17
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/inner_leap_binder/leapbinder_decorators.py +5 -4
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/leaploader.py +14 -8
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/pyproject.toml +1 -1
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/LICENSE +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/README.md +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/__init__.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/__init__.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/enums.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/exceptions.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/responsedataclasses.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/contract/visualizer_classes.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/default_losses.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/default_metrics.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/__init__.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/api.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/cli_config_utils.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/client.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/epoch.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/experiment.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/experiment_context.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/types.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/utils.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/workingspace_config_utils.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/inner_leap_binder/__init__.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/leaploaderbase.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/utils.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/visualizers/__init__.py +0 -0
- {code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/visualizers/default_visualizers.py +0 -0
@@ -4,7 +4,8 @@ import re
|
|
4
4
|
import numpy as np
|
5
5
|
import numpy.typing as npt
|
6
6
|
|
7
|
-
from code_loader.contract.enums import DataStateType, DataStateEnum, LeapDataType, ConfusionMatrixValue,
|
7
|
+
from code_loader.contract.enums import DataStateType, DataStateEnum, LeapDataType, ConfusionMatrixValue, \
|
8
|
+
MetricDirection, DatasetMetadataType
|
8
9
|
from code_loader.contract.visualizer_classes import LeapImage, LeapText, LeapGraph, LeapHorizontalBar, \
|
9
10
|
LeapTextMask, LeapImageMask, LeapImageWithBBox, LeapImageWithHeatmap
|
10
11
|
|
@@ -196,6 +197,7 @@ class GroundTruthHandler(DatasetBaseHandler):
|
|
196
197
|
class MetadataHandler:
|
197
198
|
name: str
|
198
199
|
function: MetadataSectionCallableInterface
|
200
|
+
metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None
|
199
201
|
|
200
202
|
|
201
203
|
@dataclass
|
@@ -232,6 +234,6 @@ class DatasetIntegrationSetup:
|
|
232
234
|
class DatasetSample:
|
233
235
|
inputs: Dict[str, npt.NDArray[np.float32]]
|
234
236
|
gt: Optional[Dict[str, npt.NDArray[np.float32]]]
|
235
|
-
metadata: Dict[str, Union[str, int, bool, float]]
|
237
|
+
metadata: Dict[str, Union[Optional[str], int, bool, Optional[float]]]
|
236
238
|
index: Union[int, str]
|
237
239
|
state: DataStateEnum
|
@@ -11,7 +11,7 @@ from code_loader.contract.datasetclasses import SectionCallableInterface, InputH
|
|
11
11
|
CustomCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, LeapData, \
|
12
12
|
CustomMultipleReturnCallableInterfaceMultiArgs, DatasetBaseHandler, custom_latent_space_attribute, \
|
13
13
|
RawInputsForHeatmap, VisualizerHandlerData, MetricHandlerData, CustomLossHandlerData, SamplePreprocessResponse
|
14
|
-
from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection
|
14
|
+
from code_loader.contract.enums import LeapDataType, DataStateEnum, DataStateType, MetricDirection, DatasetMetadataType
|
15
15
|
from code_loader.contract.responsedataclasses import DatasetTestResultPayload
|
16
16
|
from code_loader.contract.visualizer_classes import map_leap_data_type_to_visualizer_class
|
17
17
|
from code_loader.default_losses import loss_name_to_function
|
@@ -333,7 +333,8 @@ class LeapBinder:
|
|
333
333
|
|
334
334
|
self._encoder_names.append(name)
|
335
335
|
|
336
|
-
def set_metadata(self, function: MetadataSectionCallableInterface, name: str
|
336
|
+
def set_metadata(self, function: MetadataSectionCallableInterface, name: str,
|
337
|
+
metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None) -> None:
|
337
338
|
"""
|
338
339
|
Set the metadata handler function. This function is used for measuring and analyzing external variable values per sample, which is recommended for analysis within the Tensorleap platform.
|
339
340
|
|
@@ -368,7 +369,7 @@ class LeapBinder:
|
|
368
369
|
leap_binder.set_metadata(metadata_handler_index, name='metadata_index')
|
369
370
|
leap_binder.set_metadata(metadata_handler_image_mean, name='metadata_image_mean')
|
370
371
|
"""
|
371
|
-
self.setup_container.metadata.append(MetadataHandler(name, function))
|
372
|
+
self.setup_container.metadata.append(MetadataHandler(name, function, metadata_type))
|
372
373
|
|
373
374
|
def set_custom_layer(self, custom_layer: Type[Any], name: str, inspect_layer: bool = False,
|
374
375
|
kernel_index: Optional[int] = None, use_custom_latent_space: bool = False) -> None:
|
@@ -465,23 +466,55 @@ class LeapBinder:
|
|
465
466
|
@staticmethod
|
466
467
|
def check_handler(
|
467
468
|
preprocess_response: PreprocessResponse, test_result: List[DatasetTestResultPayload],
|
468
|
-
dataset_base_handler: Union[DatasetBaseHandler, MetadataHandler]) -> List[DatasetTestResultPayload]:
|
469
|
+
dataset_base_handler: Union[DatasetBaseHandler, MetadataHandler], state: DataStateEnum) -> List[DatasetTestResultPayload]:
|
469
470
|
assert preprocess_response.sample_ids is not None
|
470
471
|
raw_result = dataset_base_handler.function(preprocess_response.sample_ids[0], preprocess_response)
|
471
472
|
handler_type = 'metadata' if isinstance(dataset_base_handler, MetadataHandler) else None
|
472
|
-
if isinstance(dataset_base_handler, MetadataHandler)
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
473
|
+
if isinstance(dataset_base_handler, MetadataHandler):
|
474
|
+
if isinstance(raw_result, dict):
|
475
|
+
metadata_test_result_payloads = [
|
476
|
+
DatasetTestResultPayload(f'{dataset_base_handler.name}_{single_metadata_name}')
|
477
|
+
for single_metadata_name, single_metadata_result in raw_result.items()
|
478
|
+
]
|
479
|
+
for i, (single_metadata_name, single_metadata_result) in enumerate(raw_result.items()):
|
480
|
+
metadata_test_result = metadata_test_result_payloads[i]
|
481
|
+
|
482
|
+
metadata_type = None
|
483
|
+
if single_metadata_result is None:
|
484
|
+
if state != DataStateEnum.training and test_result[i].name == f'{dataset_base_handler.name}_{single_metadata_name}':
|
485
|
+
metadata_test_result_payloads[i] = test_result[i]
|
486
|
+
continue
|
487
|
+
|
488
|
+
if dataset_base_handler.metadata_type is None:
|
489
|
+
raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
|
490
|
+
elif isinstance(dataset_base_handler.metadata_type, dict):
|
491
|
+
if single_metadata_name not in dataset_base_handler.metadata_type:
|
492
|
+
raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
|
493
|
+
metadata_type = dataset_base_handler.metadata_type[single_metadata_name]
|
494
|
+
else:
|
495
|
+
raise Exception(f"Metadata {single_metadata_name} is None and no metadata type is provided")
|
496
|
+
|
497
|
+
result_shape = get_shape(single_metadata_result)
|
498
|
+
metadata_test_result.shape = result_shape
|
499
|
+
metadata_test_result.raw_result = (
|
500
|
+
single_metadata_result) if single_metadata_result is not None else metadata_type
|
501
|
+
metadata_test_result.handler_type = handler_type
|
502
|
+
test_result = metadata_test_result_payloads
|
503
|
+
else:
|
504
|
+
if raw_result is None:
|
505
|
+
if state != DataStateEnum.training:
|
506
|
+
return test_result
|
507
|
+
|
508
|
+
if dataset_base_handler.metadata_type is None:
|
509
|
+
raise Exception(f"Metadata {dataset_base_handler.name} is None and no metadata type is provided")
|
510
|
+
elif isinstance(dataset_base_handler.metadata_type, dict):
|
511
|
+
raise Exception(f"Metadata {dataset_base_handler.name} is None and no metadata type is provided")
|
512
|
+
metadata_type = dataset_base_handler.metadata_type
|
513
|
+
|
514
|
+
result_shape = get_shape(raw_result)
|
515
|
+
test_result[0].shape = result_shape
|
516
|
+
test_result[0].raw_result = raw_result if raw_result is not None else metadata_type
|
517
|
+
test_result[0].handler_type = handler_type
|
485
518
|
else:
|
486
519
|
result_shape = get_shape(raw_result)
|
487
520
|
test_result[0].shape = result_shape
|
@@ -9,7 +9,7 @@ from code_loader.contract.datasetclasses import CustomCallableInterfaceMultiArgs
|
|
9
9
|
CustomMultipleReturnCallableInterfaceMultiArgs, ConfusionMatrixCallableInterfaceMultiArgs, CustomCallableInterface, \
|
10
10
|
VisualizerCallableInterface, MetadataSectionCallableInterface, PreprocessResponse, SectionCallableInterface, \
|
11
11
|
ConfusionMatrixElement, SamplePreprocessResponse
|
12
|
-
from code_loader.contract.enums import MetricDirection, LeapDataType
|
12
|
+
from code_loader.contract.enums import MetricDirection, LeapDataType, DatasetMetadataType
|
13
13
|
from code_loader import leap_binder
|
14
14
|
from code_loader.contract.visualizer_classes import LeapImage, LeapImageMask, LeapTextMask, LeapText, LeapGraph, \
|
15
15
|
LeapHorizontalBar, LeapImageWithBBox, LeapImageWithHeatmap
|
@@ -160,14 +160,15 @@ def tensorleap_custom_visualizer(name: str, visualizer_type: LeapDataType,
|
|
160
160
|
return decorating_function
|
161
161
|
|
162
162
|
|
163
|
-
def tensorleap_metadata(
|
163
|
+
def tensorleap_metadata(
|
164
|
+
name: str, metadata_type: Optional[Union[DatasetMetadataType, Dict[str, DatasetMetadataType]]] = None):
|
164
165
|
def decorating_function(user_function: MetadataSectionCallableInterface):
|
165
166
|
for metadata_handler in leap_binder.setup_container.metadata:
|
166
167
|
if metadata_handler.name == name:
|
167
168
|
raise Exception(f'Metadata with name {name} already exists. '
|
168
169
|
f'Please choose another')
|
169
170
|
|
170
|
-
leap_binder.set_metadata(user_function, name)
|
171
|
+
leap_binder.set_metadata(user_function, name, metadata_type)
|
171
172
|
|
172
173
|
def _validate_input_args(sample_id: Union[int, str], preprocess_response: PreprocessResponse):
|
173
174
|
assert isinstance(sample_id, (int, str)), \
|
@@ -182,7 +183,7 @@ def tensorleap_metadata(name: str):
|
|
182
183
|
f'{preprocess_response.sample_id_type}. Got {type(sample_id)}.')
|
183
184
|
|
184
185
|
def _validate_result(result):
|
185
|
-
supported_result_types = (int, str, bool, float, dict, np.floating,
|
186
|
+
supported_result_types = (type(None), int, str, bool, float, dict, np.floating,
|
186
187
|
np.bool_, np.unsignedinteger, np.signedinteger, np.integer)
|
187
188
|
assert isinstance(result, supported_result_types), \
|
188
189
|
(f'tensorleap_metadata validation failed: '
|
@@ -46,7 +46,7 @@ class LeapLoader(LeapLoaderBase):
|
|
46
46
|
|
47
47
|
def evaluate_module(self) -> None:
|
48
48
|
def append_path_recursively(full_path: str) -> None:
|
49
|
-
if
|
49
|
+
if '/' not in full_path or full_path == '/':
|
50
50
|
return
|
51
51
|
|
52
52
|
parent_path = str(Path(full_path).parent)
|
@@ -210,7 +210,7 @@ class LeapLoader(LeapLoaderBase):
|
|
210
210
|
state_name = state.name
|
211
211
|
try:
|
212
212
|
test_result = global_leap_binder.check_handler(
|
213
|
-
preprocess_response, test_result, dataset_base_handler)
|
213
|
+
preprocess_response, test_result, dataset_base_handler, state)
|
214
214
|
except Exception as e:
|
215
215
|
line_number, file_name, stacktrace = get_root_exception_file_and_line_number()
|
216
216
|
test_result[0].display[
|
@@ -339,6 +339,11 @@ class LeapLoader(LeapLoaderBase):
|
|
339
339
|
continue
|
340
340
|
if hasattr(handler_test_payload.raw_result, 'tolist'):
|
341
341
|
handler_test_payload.raw_result = handler_test_payload.raw_result.tolist()
|
342
|
+
if isinstance(handler_test_payload.raw_result, DatasetMetadataType):
|
343
|
+
dataset_metadata_type = handler_test_payload.raw_result
|
344
|
+
metadata_instances.append(DatasetMetadataInstance(name=handler_test_payload.name,
|
345
|
+
type=dataset_metadata_type))
|
346
|
+
continue
|
342
347
|
metadata_type = type(handler_test_payload.raw_result)
|
343
348
|
if metadata_type == int or isinstance(handler_test_payload.raw_result,
|
344
349
|
(np.unsignedinteger, np.signedinteger)):
|
@@ -447,21 +452,22 @@ class LeapLoader(LeapLoaderBase):
|
|
447
452
|
DatasetMetadataType.int: int
|
448
453
|
}
|
449
454
|
metadata_type_to_default_value = {
|
450
|
-
DatasetMetadataType.float:
|
451
|
-
DatasetMetadataType.string:
|
452
|
-
DatasetMetadataType.boolean:
|
453
|
-
DatasetMetadataType.int:
|
455
|
+
DatasetMetadataType.float: np.nan,
|
456
|
+
DatasetMetadataType.string: 'None',
|
457
|
+
DatasetMetadataType.boolean: np.nan,
|
458
|
+
DatasetMetadataType.int: np.nan
|
454
459
|
}
|
455
460
|
|
456
461
|
try:
|
462
|
+
if value is None:
|
463
|
+
raise ValueError()
|
457
464
|
converted_value = metadata_type_to_python_type[metadata_name_to_type[metadata_name]](value)
|
458
465
|
except ValueError:
|
459
466
|
converted_value = metadata_type_to_default_value[metadata_name_to_type[metadata_name]]
|
460
467
|
|
461
468
|
return converted_value
|
462
469
|
|
463
|
-
def _get_metadata(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[
|
464
|
-
str, Union[str, int, bool, float]]:
|
470
|
+
def _get_metadata(self, state: DataStateEnum, sample_id: Union[int, str]) -> Dict[str, Union[str, int, bool, float]]:
|
465
471
|
result_agg = {}
|
466
472
|
preprocess_result = self._preprocess_result()
|
467
473
|
preprocess_state = preprocess_result[state]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/cli_config_utils.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/experiment_api/experiment_context.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{code_loader-1.0.77 → code_loader-1.0.77.dev2}/code_loader/visualizers/default_visualizers.py
RENAMED
File without changes
|