Tim77777767 commited on
Commit
75346d6
·
1 Parent(s): 2483c4f

Finale Anpassungen

Browse files
segformer_plusplus.egg-info/SOURCES.txt CHANGED
@@ -2,6 +2,7 @@ setup.py
2
  segformer_plusplus/__init__.py
3
  segformer_plusplus/build_model.py
4
  segformer_plusplus/cityscape_benchmark.py
 
5
  segformer_plusplus/modeling_segformer_plusplus.py
6
  segformer_plusplus/random_benchmark.py
7
  segformer_plusplus/start_cityscape_benchmark.py
 
2
  segformer_plusplus/__init__.py
3
  segformer_plusplus/build_model.py
4
  segformer_plusplus/cityscape_benchmark.py
5
+ segformer_plusplus/configuration_segformer_plusplus.py
6
  segformer_plusplus/modeling_segformer_plusplus.py
7
  segformer_plusplus/random_benchmark.py
8
  segformer_plusplus/start_cityscape_benchmark.py
segformer_plusplus/Registry/registry.py CHANGED
@@ -58,40 +58,6 @@ class Registry:
58
  locations (list): The locations to import the modules registered
59
  in this registry. Defaults to [].
60
  New in version 0.4.0.
61
-
62
- Examples:
63
- >>> # define a registry
64
- >>> MODELS = Registry('models')
65
- >>> # registry the `ResNet` to `MODELS`
66
- >>> @MODELS.register_module()
67
- >>> class ResNet:
68
- >>> pass
69
- >>> # build model from `MODELS`
70
- >>> resnet = MODELS.build(dict(type='ResNet'))
71
- >>> @MODELS.register_module()
72
- >>> def resnet50():
73
- >>> pass
74
- >>> resnet = MODELS.build(dict(type='resnet50'))
75
-
76
- >>> # hierarchical registry
77
- >>> DETECTORS = Registry('detectors', parent=MODELS, scope='det')
78
- >>> @DETECTORS.register_module()
79
- >>> class FasterRCNN:
80
- >>> pass
81
- >>> fasterrcnn = DETECTORS.build(dict(type='FasterRCNN'))
82
-
83
- >>> # add locations to enable auto import
84
- >>> DETECTORS = Registry('detectors', parent=MODELS,
85
- >>> scope='det', locations=['det.models.detectors'])
86
- >>> # define this class in 'det.models.detectors'
87
- >>> @DETECTORS.register_module()
88
- >>> class MaskRCNN:
89
- >>> pass
90
- >>> # The registry will auto import det.models.detectors.MaskRCNN
91
- >>> fasterrcnn = DETECTORS.build(dict(type='det.MaskRCNN'))
92
-
93
- More advanced usages can be found at
94
- https://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html.
95
  """
96
 
97
  def __init__(self,
@@ -112,8 +78,6 @@ class Registry:
112
  else:
113
  self._scope = self.infer_scope()
114
 
115
- # See https://mypy.readthedocs.io/en/stable/common_issues.html#
116
- # variables-vs-type-aliases for the use
117
  self.parent: Optional['Registry']
118
  if parent is not None:
119
  assert isinstance(parent, Registry)
@@ -122,10 +86,6 @@ class Registry:
122
  else:
123
  self.parent = None
124
 
125
- # self.build_func will be set with the following priority:
126
- # 1. build_func
127
- # 2. parent.build_func
128
- # 3. build_from_cfg
129
  self.build_func: Callable
130
  if build_func is None:
131
  if self.parent is not None:
@@ -164,30 +124,13 @@ class Registry:
164
 
165
  Returns:
166
  str: The inferred scope name.
167
-
168
- Examples:
169
- >>> # in mmdet/models/backbone/resnet.py
170
- >>> MODELS = Registry('models')
171
- >>> @MODELS.register_module()
172
- >>> class ResNet:
173
- >>> pass
174
- >>> # The scope of ``ResNet`` will be ``mmdet``.
175
  """
176
-
177
- # `sys._getframe` returns the frame object that many calls below the
178
- # top of the stack. The call stack for `infer_scope` can be listed as
179
- # follow:
180
- # frame-0: `infer_scope` itself
181
- # frame-1: `__init__` of `Registry` which calls the `infer_scope`
182
- # frame-2: Where the `Registry(...)` is called
183
  module = inspect.getmodule(sys._getframe(2))
184
  if module is not None:
185
  filename = module.__name__
186
  split_filename = filename.split('.')
187
  scope = split_filename[0]
188
  else:
189
- # use "mmengine" to handle some cases which can not infer the scope
190
- # like initializing Registry in interactive mode
191
  scope = 'mmengine'
192
  return scope
193
 
@@ -201,11 +144,6 @@ class Registry:
201
  tuple[str | None, str]: The former element is the first scope of
202
  the key, which can be ``None``. The latter is the remaining key.
203
 
204
- Examples:
205
- >>> Registry.split_scope_key('mmdet.ResNet')
206
- 'mmdet', 'ResNet'
207
- >>> Registry.split_scope_key('ResNet')
208
- None, 'ResNet'
209
  """
210
  split_index = key.find('.')
211
  if split_index != -1:
@@ -243,51 +181,8 @@ class Registry:
243
 
244
  Args:
245
  scope (str, optional): The target scope.
 
246
 
247
- Examples:
248
- >>> from mmengine.registry import Registry, DefaultScope, MODELS
249
- >>> import time
250
- >>> # External Registry
251
- >>> MMDET_MODELS = Registry('mmdet_model', scope='mmdet',
252
- >>> parent=MODELS)
253
- >>> MMCLS_MODELS = Registry('mmcls_model', scope='mmcls',
254
- >>> parent=MODELS)
255
- >>> # Local Registry
256
- >>> CUSTOM_MODELS = Registry('custom_model', scope='custom',
257
- >>> parent=MODELS)
258
- >>>
259
- >>> # Initiate DefaultScope
260
- >>> DefaultScope.get_instance(f'scope_{time.time()}',
261
- >>> scope_name='custom')
262
- >>> # Check default scope
263
- >>> DefaultScope.get_current_instance().scope_name
264
- custom
265
- >>> # Switch to mmcls scope and get `MMCLS_MODELS` registry.
266
- >>> with CUSTOM_MODELS.switch_scope_and_registry(scope='mmcls') as registry:
267
- >>> DefaultScope.get_current_instance().scope_name
268
- mmcls
269
- >>> registry.scope
270
- mmcls
271
- >>> # Nested switch scope
272
- >>> with CUSTOM_MODELS.switch_scope_and_registry(scope='mmdet') as mmdet_registry:
273
- >>> DefaultScope.get_current_instance().scope_name
274
- mmdet
275
- >>> mmdet_registry.scope
276
- mmdet
277
- >>> with CUSTOM_MODELS.switch_scope_and_registry(scope='mmcls') as mmcls_registry:
278
- >>> DefaultScope.get_current_instance().scope_name
279
- mmcls
280
- >>> mmcls_registry.scope
281
- mmcls
282
- >>>
283
- >>> # Check switch back to original scope.
284
- >>> DefaultScope.get_current_instance().scope_name
285
- custom
286
- """ # noqa: E501
287
-
288
- # Switch to the given scope temporarily. If the corresponding registry
289
- # can be found in root registry, return the registry under the scope,
290
- # otherwise return the registry itself.
291
  with DefaultScope.overwrite_default_scope(scope):
292
  # Get the global default scope
293
  default_scope = DefaultScope.get_current_instance()
@@ -312,8 +207,6 @@ class Registry:
312
  root = self._get_root_registry()
313
  registry = root._search_child(scope_name)
314
  if registry is None:
315
- # if `default_scope` can not be found, fallback to argument
316
- # `registry`
317
  print(
318
  f'Failed to search registry with scope "{scope_name}" '
319
  f'in the "{root.name}" registry tree. '
@@ -324,7 +217,6 @@ class Registry:
324
  'correct scope, or whether the registry is '
325
  'initialized.',)
326
  registry = self
327
- # If there is no built default scope, just return current registry.
328
  else:
329
  registry = self
330
  yield registry
@@ -362,10 +254,6 @@ class Registry:
362
  'its modules, please make sure you '
363
  'have registered the module manually.',)
364
  else:
365
- # The import errors triggered during the registration
366
- # may be more complex, here just throwing
367
- # the error to avoid causing more implicit registry errors
368
- # like `xxx`` not found in `yyy` registry.
369
  module.register_all_modules(False) # type: ignore
370
 
371
  for loc in self._locations:
@@ -406,27 +294,6 @@ class Registry:
406
  Returns:
407
  Type or None: Return the corresponding class if ``key`` exists,
408
  otherwise return None.
409
-
410
- Examples:
411
- >>> # define a registry
412
- >>> MODELS = Registry('models')
413
- >>> # register `ResNet` to `MODELS`
414
- >>> @MODELS.register_module()
415
- >>> class ResNet:
416
- >>> pass
417
- >>> resnet_cls = MODELS.get('ResNet')
418
-
419
- >>> # hierarchical registry
420
- >>> DETECTORS = Registry('detector', parent=MODELS, scope='det')
421
- >>> # `ResNet` does not exist in `DETECTORS` but `get` method
422
- >>> # will try to search from its parents or ancestors
423
- >>> resnet_cls = DETECTORS.get('ResNet')
424
- >>> CLASSIFIER = Registry('classifier', parent=MODELS, scope='cls')
425
- >>> @CLASSIFIER.register_module()
426
- >>> class MobileNet:
427
- >>> pass
428
- >>> # `get` from its sibling registries
429
- >>> mobilenet_cls = DETECTORS.get('cls.MobileNet')
430
  """
431
 
432
  if not isinstance(key, str):
@@ -484,12 +351,6 @@ class Registry:
484
  obj_cls = root.get(key)
485
 
486
  if obj_cls is None:
487
- # Actually, it's strange to implement this `try ... except` to
488
- # get the object by its name in `Registry.get`. However, If we
489
- # want to build the model using a configuration like
490
- # `dict(type='mmengine.model.BaseModel')`, which can
491
- # be dumped by lazy import config, we need this code snippet
492
- # for `Registry.get` to work.
493
  try:
494
  obj_cls = get_object_from_string(key)
495
  except Exception:
@@ -537,17 +398,6 @@ class Registry:
537
 
538
  Returns:
539
  Any: The constructed object.
540
-
541
- Examples:
542
- >>> from mmengine import Registry
543
- >>> MODELS = Registry('models')
544
- >>> @MODELS.register_module()
545
- >>> class ResNet:
546
- >>> def __init__(self, depth, stages=4):
547
- >>> self.depth = depth
548
- >>> self.stages = stages
549
- >>> cfg = dict(type='ResNet', depth=50)
550
- >>> model = MODELS.build(cfg)
551
  """
552
  return self.build_func(cfg, *args, **kwargs, registry=self)
553
 
@@ -612,22 +462,6 @@ class Registry:
612
  name. Defaults to False.
613
  module (type, optional): Module class or function to be registered.
614
  Defaults to None.
615
-
616
- Examples:
617
- >>> backbones = Registry('backbone')
618
- >>> # as a decorator
619
- >>> @backbones.register_module()
620
- >>> class ResNet:
621
- >>> pass
622
- >>> backbones = Registry('backbone')
623
- >>> @backbones.register_module(name='mnet')
624
- >>> class MobileNet:
625
- >>> pass
626
-
627
- >>> # as a normal function
628
- >>> class ResNet:
629
- >>> pass
630
- >>> backbones.register_module(module=ResNet)
631
  """
632
  if not isinstance(force, bool):
633
  raise TypeError(f'force must be a boolean, but got {type(force)}')
@@ -663,14 +497,6 @@ def is_seq_of(seq: Any,
663
 
664
  Returns:
665
  bool: Return True if ``seq`` is valid else False.
666
-
667
- Examples:
668
- >>> from mmengine.utils import is_seq_of
669
- >>> seq = ['a', 'b', 'c']
670
- >>> is_seq_of(seq, str)
671
- True
672
- >>> is_seq_of(seq, int)
673
- False
674
  """
675
  if seq_type is None:
676
  exp_seq_type = abc.Sequence
@@ -690,10 +516,6 @@ def get_object_from_string(obj_name: str):
690
 
691
  Args:
692
  obj_name (str): The name of the object.
693
-
694
- Examples:
695
- >>> get_object_from_string('torch.optim.sgd.SGD')
696
- >>> torch.optim.sgd.SGD
697
  """
698
  parts = iter(obj_name.split('.'))
699
  module_name = next(parts)
 
58
  locations (list): The locations to import the modules registered
59
  in this registry. Defaults to [].
60
  New in version 0.4.0.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  """
62
 
63
  def __init__(self,
 
78
  else:
79
  self._scope = self.infer_scope()
80
 
 
 
81
  self.parent: Optional['Registry']
82
  if parent is not None:
83
  assert isinstance(parent, Registry)
 
86
  else:
87
  self.parent = None
88
 
 
 
 
 
89
  self.build_func: Callable
90
  if build_func is None:
91
  if self.parent is not None:
 
124
 
125
  Returns:
126
  str: The inferred scope name.
 
 
 
 
 
 
 
 
127
  """
 
 
 
 
 
 
 
128
  module = inspect.getmodule(sys._getframe(2))
129
  if module is not None:
130
  filename = module.__name__
131
  split_filename = filename.split('.')
132
  scope = split_filename[0]
133
  else:
 
 
134
  scope = 'mmengine'
135
  return scope
136
 
 
144
  tuple[str | None, str]: The former element is the first scope of
145
  the key, which can be ``None``. The latter is the remaining key.
146
 
 
 
 
 
 
147
  """
148
  split_index = key.find('.')
149
  if split_index != -1:
 
181
 
182
  Args:
183
  scope (str, optional): The target scope.
184
+ """
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  with DefaultScope.overwrite_default_scope(scope):
187
  # Get the global default scope
188
  default_scope = DefaultScope.get_current_instance()
 
207
  root = self._get_root_registry()
208
  registry = root._search_child(scope_name)
209
  if registry is None:
 
 
210
  print(
211
  f'Failed to search registry with scope "{scope_name}" '
212
  f'in the "{root.name}" registry tree. '
 
217
  'correct scope, or whether the registry is '
218
  'initialized.',)
219
  registry = self
 
220
  else:
221
  registry = self
222
  yield registry
 
254
  'its modules, please make sure you '
255
  'have registered the module manually.',)
256
  else:
 
 
 
 
257
  module.register_all_modules(False) # type: ignore
258
 
259
  for loc in self._locations:
 
294
  Returns:
295
  Type or None: Return the corresponding class if ``key`` exists,
296
  otherwise return None.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  """
298
 
299
  if not isinstance(key, str):
 
351
  obj_cls = root.get(key)
352
 
353
  if obj_cls is None:
 
 
 
 
 
 
354
  try:
355
  obj_cls = get_object_from_string(key)
356
  except Exception:
 
398
 
399
  Returns:
400
  Any: The constructed object.
 
 
 
 
 
 
 
 
 
 
 
401
  """
402
  return self.build_func(cfg, *args, **kwargs, registry=self)
403
 
 
462
  name. Defaults to False.
463
  module (type, optional): Module class or function to be registered.
464
  Defaults to None.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
  """
466
  if not isinstance(force, bool):
467
  raise TypeError(f'force must be a boolean, but got {type(force)}')
 
497
 
498
  Returns:
499
  bool: Return True if ``seq`` is valid else False.
 
 
 
 
 
 
 
 
500
  """
501
  if seq_type is None:
502
  exp_seq_type = abc.Sequence
 
516
 
517
  Args:
518
  obj_name (str): The name of the object.
 
 
 
 
519
  """
520
  parts = iter(obj_name.split('.'))
521
  module_name = next(parts)
segformer_plusplus/cityscapes_prediction_output.txt CHANGED
@@ -20,16 +20,16 @@
20
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
21
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
22
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
23
- 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17
24
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17
25
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
26
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 17 6 6 6 6 6 6 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
27
- 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 17 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
28
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
29
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
30
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
31
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
32
- 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
33
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
34
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
35
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
@@ -41,7 +41,7 @@
41
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 17 17 17 17 17 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 17 6 6 6 17 17 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
42
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 6 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
43
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 6 6 17 17 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 17 17 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
44
- 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 17 6 6 6 17 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
45
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17
46
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
47
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
 
20
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
21
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
22
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
23
+ 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
24
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17
25
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
26
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 17 6 6 6 6 6 6 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
27
+ 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 17 17 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
28
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
29
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
30
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
31
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
32
+ 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
33
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
34
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
35
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17
 
41
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 6 17 17 17 17 17 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 6 17 6 6 6 17 17 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
42
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 6 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 6 6 17 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
43
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 17 17 17 17 17 6 6 17 17 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 17 17 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
44
+ 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 17 6 6 6 17 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
45
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 17 17 6 6 6 17 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17
46
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 17 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
47
  17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 6 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 17 17 6 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 6 6 6 6 6 6 6 6 6 6 6 6 6 6 17 17 17 17 17 17 17 17 17 17
segformer_plusplus/configs/config/utils.py CHANGED
@@ -25,34 +25,6 @@ __import__('pkg_resources.extern.packaging.markers')
25
  PYTHON_ROOT_DIR = osp.dirname(osp.dirname(sys.executable))
26
  SYSTEM_PYTHON_PREFIX = '/usr/lib/python'
27
 
28
- MODULE2PACKAGE = {
29
- 'mmcls': 'mmcls',
30
- 'mmdet': 'mmdet',
31
- 'mmdet3d': 'mmdet3d',
32
- 'mmseg': 'mmsegmentation',
33
- 'mmaction': 'mmaction2',
34
- 'mmtrack': 'mmtrack',
35
- 'mmpose': 'mmpose',
36
- 'mmedit': 'mmedit',
37
- 'mmocr': 'mmocr',
38
- 'mmgen': 'mmgen',
39
- 'mmfewshot': 'mmfewshot',
40
- 'mmrazor': 'mmrazor',
41
- 'mmflow': 'mmflow',
42
- 'mmhuman3d': 'mmhuman3d',
43
- 'mmrotate': 'mmrotate',
44
- 'mmselfsup': 'mmselfsup',
45
- 'mmyolo': 'mmyolo',
46
- 'mmpretrain': 'mmpretrain',
47
- 'mmagic': 'mmagic',
48
- }
49
-
50
- # PKG2PROJECT is not a proper name to represent the mapping between module name
51
- # (module import from) and package name (used by pip install). Therefore,
52
- # PKG2PROJECT will be deprecated and this alias will only be kept until
53
- # MMEngine v1.0.0
54
- PKG2PROJECT = MODULE2PACKAGE
55
-
56
 
57
  class ConfigParsingError(RuntimeError):
58
  """Raise error when failed to parse pure Python style config files."""
@@ -143,9 +115,6 @@ def _get_package_and_cfg_path(cfg_path: str) -> Tuple[str, str]:
143
  'config name, but found multiple `::` in '
144
  f'{cfg_path}')
145
  package, cfg_path = package_cfg
146
- assert package in MODULE2PACKAGE, (
147
- f'mmengine does not support to load {package} config.')
148
- package = MODULE2PACKAGE[package]
149
  return package, cfg_path
150
 
151
 
@@ -199,82 +168,8 @@ class ImportTransformer(ast.NodeTransformer):
199
  """Convert the import syntax to the assignment of
200
  :class:`mmengine.config.LazyObject` and preload the base variable before
201
  parsing the configuration file.
202
-
203
- Since you are already looking at this part of the code, I believe you must
204
- be interested in the mechanism of the ``lazy_import`` feature of
205
- :class:`Config`. In this docstring, we will dive deeper into its
206
- principles.
207
-
208
- Most of OpenMMLab users maybe bothered with that:
209
-
210
- * In most of popular IDEs, they cannot navigate to the source code in
211
- configuration file
212
- * In most of popular IDEs, they cannot jump to the base file in current
213
- configuration file, which is much painful when the inheritance
214
- relationship is complex.
215
-
216
- In order to solve this problem, we introduce the ``lazy_import`` mode.
217
-
218
- A very intuitive idea for solving this problem is to import the module
219
- corresponding to the "type" field using the ``import`` syntax. Similarly,
220
- we can also ``import`` base file.
221
-
222
- However, this approach has a significant drawback. It requires triggering
223
- the import logic to parse the configuration file, which can be
224
- time-consuming. Additionally, it implies downloading numerous dependencies
225
- solely for the purpose of parsing the configuration file.
226
- However, it's possible that only a portion of the config will actually be
227
- used. For instance, the package used in the ``train_pipeline`` may not
228
- be necessary for an evaluation task. Forcing users to download these
229
- unused packages is not a desirable solution.
230
-
231
- To avoid this problem, we introduce :class:`mmengine.config.LazyObject` and
232
- :class:`mmengine.config.LazyAttr`. Before we proceed with further
233
- explanations, you may refer to the documentation of these two modules to
234
- gain an understanding of their functionalities.
235
-
236
- Actually, one of the functions of ``ImportTransformer`` is to hack the
237
- ``import`` syntax. It will replace the import syntax
238
- (exclude import the base files) with the assignment of ``LazyObject``.
239
-
240
- As for the import syntax of the base file, we cannot lazy import it since
241
- we're eager to merge the fields of current file and base files. Therefore,
242
- another function of the ``ImportTransformer`` is to collaborate with
243
- ``Config._parse_lazy_import`` to parse the base files.
244
-
245
- Args:
246
- global_dict (dict): The global dict of the current configuration file.
247
- If we divide ordinary Python syntax into two parts, namely the
248
- import section and the non-import section (assuming a simple case
249
- with imports at the beginning and the rest of the code following),
250
- the variables generated by the import statements are stored in
251
- global variables for subsequent code use. In this context,
252
- the ``global_dict`` represents the global variables required when
253
- executing the non-import code. ``global_dict`` will be filled
254
- during visiting the parsed code.
255
- base_dict (dict): All variables defined in base files.
256
-
257
- Examples:
258
- >>> from mmengine.config import read_base
259
- >>>
260
- >>>
261
- >>> with read_base():
262
- >>> from .._base_.default_runtime import *
263
- >>> from .._base_.datasets.coco_detection import dataset
264
-
265
- In this case, the base_dict will be:
266
-
267
- Examples:
268
- >>> base_dict = {
269
- >>> '.._base_.default_runtime': ...
270
- >>> '.._base_.datasets.coco_detection': dataset}
271
-
272
- and `global_dict` will be updated like this:
273
-
274
- Examples:
275
- >>> global_dict.update(base_dict['.._base_.default_runtime']) # `import *` means update all data
276
- >>> global_dict.update(dataset=base_dict['.._base_.datasets.coco_detection']['dataset']) # only update `dataset`
277
- """ # noqa: E501
278
 
279
  def __init__(self,
280
  global_dict: dict,
@@ -282,15 +177,6 @@ class ImportTransformer(ast.NodeTransformer):
282
  filename: Optional[str] = None):
283
  self.base_dict = base_dict if base_dict is not None else {}
284
  self.global_dict = global_dict
285
- # In Windows, the filename could be like this:
286
- # "C:\\Users\\runneradmin\\AppData\\Local\\"
287
- # Although it has been an raw string, ast.parse will firstly escape
288
- # it as the executed code:
289
- # "C:\Users\runneradmin\AppData\Local\\\"
290
- # As you see, the `\U` will be treated as a part of
291
- # the escape sequence during code parsing, leading to an
292
- # parsing error
293
- # Here we use `encode('unicode_escape').decode()` for double escaping
294
  if isinstance(filename, str):
295
  filename = filename.encode('unicode_escape').decode()
296
  self.filename = filename
@@ -300,32 +186,6 @@ class ImportTransformer(ast.NodeTransformer):
300
  def visit_ImportFrom(
301
  self, node: ast.ImportFrom
302
  ) -> Optional[Union[List[ast.Assign], ast.ImportFrom]]:
303
- """Hack the ``from ... import ...`` syntax and update the global_dict.
304
-
305
- Examples:
306
- >>> from mmdet.models import RetinaNet
307
-
308
- Will be parsed as:
309
-
310
- Examples:
311
- >>> RetinaNet = lazyObject('mmdet.models', 'RetinaNet')
312
-
313
- ``global_dict`` will also be updated by ``base_dict`` as the
314
- class docstring says.
315
-
316
- Args:
317
- node (ast.AST): The node of the current import statement.
318
-
319
- Returns:
320
- Optional[List[ast.Assign]]: There three cases:
321
-
322
- * If the node is a statement of importing base files.
323
- None will be returned.
324
- * If the node is a statement of importing a builtin module,
325
- node will be directly returned
326
- * Otherwise, it will return the assignment statements of
327
- ``LazyObject``.
328
- """
329
  # Built-in modules will not be parsed as LazyObject
330
  module = f'{node.level*"."}{node.module}'
331
  if _is_builtin_module(module):
@@ -361,23 +221,13 @@ class ImportTransformer(ast.NodeTransformer):
361
  else:
362
  lineno = node.lineno
363
  if alias_node.name == '*':
364
- # TODO: If users import * from a non-config module, it should
365
- # fallback to import the real module and raise a warning to
366
- # remind users the real module will be imported which will slow
367
- # down the parsing speed.
368
  raise ConfigParsingError(
369
  'Illegal syntax in config! `from xxx import *` is not '
370
  'allowed to appear outside the `if base:` statement')
371
  elif alias_node.asname is not None:
372
- # case1:
373
- # from mmengine.dataset import BaseDataset as Dataset ->
374
- # Dataset = LazyObject('mmengine.dataset', 'BaseDataset')
375
  code = f'{alias_node.asname} = LazyObject("{module}", "{alias_node.name}", "{self.filename}, line {lineno}")' # noqa: E501
376
  self.imported_obj.add(alias_node.asname)
377
  else:
378
- # case2:
379
- # from mmengine.model import BaseModel
380
- # BaseModel = LazyObject('mmengine.model', 'BaseModel')
381
  code = f'{alias_node.name} = LazyObject("{module}", "{alias_node.name}", "{self.filename}, line {lineno}")' # noqa: E501
382
  self.imported_obj.add(alias_node.name)
383
  try:
@@ -394,37 +244,7 @@ class ImportTransformer(ast.NodeTransformer):
394
  def visit_Import(self, node) -> Union[ast.Assign, ast.Import]:
395
  """Work with ``_gather_abs_import_lazyobj`` to hack the ``import ...``
396
  syntax.
397
-
398
- Examples:
399
- >>> import mmcls.models
400
- >>> import mmcls.datasets
401
- >>> import mmcls
402
-
403
- Will be parsed as:
404
-
405
- Examples:
406
- >>> # import mmcls.models; import mmcls.datasets; import mmcls
407
- >>> mmcls = lazyObject(['mmcls', 'mmcls.datasets', 'mmcls.models'])
408
-
409
- Args:
410
- node (ast.AST): The node of the current import statement.
411
-
412
- Returns:
413
- ast.Assign: If the import statement is ``import ... as ...``,
414
- ast.Assign will be returned, otherwise node will be directly
415
- returned.
416
  """
417
- # For absolute import like: `import mmdet.configs as configs`.
418
- # It will be parsed as:
419
- # configs = LazyObject('mmdet.configs')
420
- # For absolute import like:
421
- # `import mmdet.configs`
422
- # `import mmdet.configs.default_runtime`
423
- # This will be parsed as
424
- # mmdet = LazyObject(['mmdet.configs.default_runtime', 'mmdet.configs])
425
- # However, visit_Import cannot gather other import information, so
426
- # `_gather_abs_import_LazyObject` will gather all import information
427
- # from the same module and construct the LazyObject.
428
  alias_list = node.names
429
  assert len(alias_list) == 1, (
430
  'Illegal syntax in config! import multiple modules in one line is '
@@ -485,19 +305,11 @@ def get_installed_path(package: str) -> str:
485
 
486
  Args:
487
  package (str): Name of package.
488
-
489
- Example:
490
- >>> get_installed_path('mmcls')
491
- >>> '.../lib/python3.7/site-packages/mmcls'
492
  """
493
  import importlib.util
494
 
495
  from pkg_resources import DistributionNotFound, get_distribution
496
 
497
- # if the package name is not the same as module name, module name should be
498
- # inferred. For example, mmcv-full is the package name, but mmcv is module
499
- # name. If we want to get the installed path of mmcv-full, we should concat
500
- # the pkg.location and module name
501
  try:
502
  pkg = get_distribution(package)
503
  except DistributionNotFound as e:
@@ -533,14 +345,6 @@ def import_modules_from_strings(imports, allow_failed_imports=False):
533
 
534
  Returns:
535
  list[module] | module | None: The imported modules.
536
-
537
- Examples:
538
- >>> osp, sys = import_modules_from_strings(
539
- ... ['os.path', 'sys'])
540
- >>> import os.path as osp_
541
- >>> import sys as sys_
542
- >>> assert osp == osp_
543
- >>> assert sys == sys_
544
  """
545
  if not imports:
546
  return
@@ -582,15 +386,10 @@ def is_installed(package: str) -> bool:
582
  Args:
583
  package (str): Name of package to be checked.
584
  """
585
- # When executing `import mmengine.runner`,
586
- # pkg_resources will be imported and it takes too much time.
587
- # Therefore, import it in function scope to save time.
588
  import importlib.util
589
  import pkg_resources
590
  from pkg_resources import get_distribution
591
 
592
- # refresh the pkg_resources
593
- # more datails at https://github.com/pypa/setuptools/issues/373
594
  importlib.reload(pkg_resources)
595
  try:
596
  get_distribution(package)
@@ -712,10 +511,6 @@ class Requirement(packaging.requirements.Requirement):
712
  return False
713
 
714
  item = item.version
715
-
716
- # Allow prereleases always in order to match the previous behavior of
717
- # this method. In the future this should be smarter and follow PEP 440
718
- # more accurately.
719
  return self.specifier.contains(item, prereleases=True)
720
 
721
  def __hash__(self):
 
25
  PYTHON_ROOT_DIR = osp.dirname(osp.dirname(sys.executable))
26
  SYSTEM_PYTHON_PREFIX = '/usr/lib/python'
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  class ConfigParsingError(RuntimeError):
30
  """Raise error when failed to parse pure Python style config files."""
 
115
  'config name, but found multiple `::` in '
116
  f'{cfg_path}')
117
  package, cfg_path = package_cfg
 
 
 
118
  return package, cfg_path
119
 
120
 
 
168
  """Convert the import syntax to the assignment of
169
  :class:`mmengine.config.LazyObject` and preload the base variable before
170
  parsing the configuration file.
171
+ """
172
+ # noqa: E501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
 
174
  def __init__(self,
175
  global_dict: dict,
 
177
  filename: Optional[str] = None):
178
  self.base_dict = base_dict if base_dict is not None else {}
179
  self.global_dict = global_dict
 
 
 
 
 
 
 
 
 
180
  if isinstance(filename, str):
181
  filename = filename.encode('unicode_escape').decode()
182
  self.filename = filename
 
186
  def visit_ImportFrom(
187
  self, node: ast.ImportFrom
188
  ) -> Optional[Union[List[ast.Assign], ast.ImportFrom]]:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  # Built-in modules will not be parsed as LazyObject
190
  module = f'{node.level*"."}{node.module}'
191
  if _is_builtin_module(module):
 
221
  else:
222
  lineno = node.lineno
223
  if alias_node.name == '*':
 
 
 
 
224
  raise ConfigParsingError(
225
  'Illegal syntax in config! `from xxx import *` is not '
226
  'allowed to appear outside the `if base:` statement')
227
  elif alias_node.asname is not None:
 
 
 
228
  code = f'{alias_node.asname} = LazyObject("{module}", "{alias_node.name}", "{self.filename}, line {lineno}")' # noqa: E501
229
  self.imported_obj.add(alias_node.asname)
230
  else:
 
 
 
231
  code = f'{alias_node.name} = LazyObject("{module}", "{alias_node.name}", "{self.filename}, line {lineno}")' # noqa: E501
232
  self.imported_obj.add(alias_node.name)
233
  try:
 
244
  def visit_Import(self, node) -> Union[ast.Assign, ast.Import]:
245
  """Work with ``_gather_abs_import_lazyobj`` to hack the ``import ...``
246
  syntax.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  """
 
 
 
 
 
 
 
 
 
 
 
248
  alias_list = node.names
249
  assert len(alias_list) == 1, (
250
  'Illegal syntax in config! import multiple modules in one line is '
 
305
 
306
  Args:
307
  package (str): Name of package.
 
 
 
 
308
  """
309
  import importlib.util
310
 
311
  from pkg_resources import DistributionNotFound, get_distribution
312
 
 
 
 
 
313
  try:
314
  pkg = get_distribution(package)
315
  except DistributionNotFound as e:
 
345
 
346
  Returns:
347
  list[module] | module | None: The imported modules.
 
 
 
 
 
 
 
 
348
  """
349
  if not imports:
350
  return
 
386
  Args:
387
  package (str): Name of package to be checked.
388
  """
 
 
 
389
  import importlib.util
390
  import pkg_resources
391
  from pkg_resources import get_distribution
392
 
 
 
393
  importlib.reload(pkg_resources)
394
  try:
395
  get_distribution(package)
 
511
  return False
512
 
513
  item = item.version
 
 
 
 
514
  return self.specifier.contains(item, prereleases=True)
515
 
516
  def __hash__(self):
segformer_plusplus/utils/build_functions.py CHANGED
@@ -29,23 +29,6 @@ def build_from_cfg(
29
  will be popped up and the remaining keys will be used as initialization
30
  arguments.
31
 
32
- Examples:
33
- >>> from mmengine import Registry, build_from_cfg
34
- >>> MODELS = Registry('models')
35
- >>> @MODELS.register_module()
36
- >>> class ResNet:
37
- >>> def __init__(self, depth, stages=4):
38
- >>> self.depth = depth
39
- >>> self.stages = stages
40
- >>> cfg = dict(type='ResNet', depth=50)
41
- >>> model = build_from_cfg(cfg, MODELS)
42
- >>> # Returns an instantiated object
43
- >>> @MODELS.register_module()
44
- >>> def resnet50():
45
- >>> pass
46
- >>> resnet = build_from_cfg(dict(type='resnet50'), MODELS)
47
- >>> # Return a result of the calling function
48
-
49
  Args:
50
  cfg (dict or ConfigDict or Config): Config dict. It should at least
51
  contain the key "type".
@@ -82,9 +65,6 @@ def build_from_cfg(
82
  for name, value in default_args.items():
83
  args.setdefault(name, value)
84
 
85
- # Instance should be built under target scope, if `_scope_` is defined
86
- # in cfg, current default scope should switch to specified scope
87
- # temporarily.
88
  scope = args.pop('_scope_', None)
89
  with registry.switch_scope_and_registry(scope) as registry:
90
  obj_type = args.pop('type')
@@ -94,9 +74,6 @@ def build_from_cfg(
94
  raise KeyError(
95
  f'{obj_type} is not in the {registry.scope}::{registry.name} registry. ' # noqa: E501
96
  f'Please check whether the value of `{obj_type}` is '
97
- 'correct or it was registered as expected. More details '
98
- 'can be found at '
99
- 'https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#import-the-custom-module' # noqa: E501
100
  )
101
  # this will include classes, functions, partial functions and more
102
  elif callable(obj_type):
 
29
  will be popped up and the remaining keys will be used as initialization
30
  arguments.
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  Args:
33
  cfg (dict or ConfigDict or Config): Config dict. It should at least
34
  contain the key "type".
 
65
  for name, value in default_args.items():
66
  args.setdefault(name, value)
67
 
 
 
 
68
  scope = args.pop('_scope_', None)
69
  with registry.switch_scope_and_registry(scope) as registry:
70
  obj_type = args.pop('type')
 
74
  raise KeyError(
75
  f'{obj_type} is not in the {registry.scope}::{registry.name} registry. ' # noqa: E501
76
  f'Please check whether the value of `{obj_type}` is '
 
 
 
77
  )
78
  # this will include classes, functions, partial functions and more
79
  elif callable(obj_type):