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
|
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
|
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
|
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
|
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 |
-
|
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):
|